diff options
Diffstat (limited to 'qbuffers.cpp')
-rw-r--r-- | qbuffers.cpp | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/qbuffers.cpp b/qbuffers.cpp index a2fed34..3421d39 100644 --- a/qbuffers.cpp +++ b/qbuffers.cpp @@ -33,6 +33,7 @@ QRegisterTable qregisters; static QRegister *register_argument = NULL; +/* FIXME: clean up current_save_dot() usage */ static inline void current_save_dot(void) { @@ -56,7 +57,6 @@ current_edit(void) void QRegister::set_string(const gchar *str) { - current_save_dot(); edit(); dot = 0; @@ -67,6 +67,21 @@ QRegister::set_string(const gchar *str) current_edit(); } +void +QRegister::undo_set_string(void) +{ + current_save_dot(); + if (ring.current) + ring.current->undo_edit(); + else if (qregisters.current) + qregisters.current->undo_edit(); + + undo.push_var<gint>(dot); + undo.push_msg(SCI_UNDO); + + undo_edit(); +} + gchar * QRegister::get_string(void) { @@ -361,8 +376,7 @@ StateSetQRegString::done(const gchar *str) { BEGIN_EXEC(&States::start); - undo.push_var<gint>(register_argument->dot); - undo.push_msg(SCI_UNDO); + register_argument->undo_set_string(); register_argument->set_string(str); return &States::start; @@ -461,8 +475,7 @@ StateCopyToQReg::got_register(QRegister *reg) tr.lpstrText = (char *)g_malloc(len + 1); editor_msg(SCI_GETTEXTRANGE, 0, (sptr_t)&tr); - undo.push_var<gint>(reg->dot); - undo.push_msg(SCI_UNDO); + reg->undo_set_string(); reg->set_string(tr.lpstrText); g_free(tr.lpstrText); |