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 --- parser.cpp | 3 +-- qbuffers.cpp | 23 ++++++++++++++++++----- qbuffers.h | 1 + 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/parser.cpp b/parser.cpp index 4ce0f8b..7dcb8a7 100644 --- a/parser.cpp +++ b/parser.cpp @@ -1070,8 +1070,7 @@ StateSearch::done(const gchar *str) QRegister *search_reg = qregisters["_"]; if (*str) { - undo.push_var(search_reg->dot); - undo.push_msg(SCI_UNDO); + search_reg->undo_set_string(); search_reg->set_string(str); } else { gchar *search_str = search_reg->get_string(); 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); diff --git a/qbuffers.h b/qbuffers.h index 9aacaa8..b5b09a5 100644 --- a/qbuffers.h +++ b/qbuffers.h @@ -48,6 +48,7 @@ public: } void set_string(const gchar *str); + void undo_set_string(void); gchar *get_string(void); inline void -- cgit v1.2.3