From dba9cbb38fd014bdddf1aed6905ec04faeb1dcf3 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Tue, 13 Nov 2012 02:12:36 +0100 Subject: fixed undoing of setting Q-Register string --- qbuffers.cpp | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'qbuffers.cpp') 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(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(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(reg->dot); - undo.push_msg(SCI_UNDO); + reg->undo_set_string(); reg->set_string(tr.lpstrText); g_free(tr.lpstrText); -- cgit v1.2.3