aboutsummaryrefslogtreecommitdiffhomepage
path: root/qbuffers.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qbuffers.cpp')
-rw-r--r--qbuffers.cpp23
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);