From 52db2f4e20d7c544d3040af1f359dd3365ca204b Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Sun, 16 Nov 2014 23:29:34 +0100 Subject: cleaned up Scintilla document "updating" * allowed me to remove some obscure global functions and methods like QRegister::update_string(). * Document updating is concentrated in qregisters.cpp now * also fixes some bugs introduced earlier, like undo tokens being generated for non-undo registers (resulting in segfaults on rubout) --- src/qregisters.cpp | 68 ++++++++++++++++++++++-------------------------------- 1 file changed, 28 insertions(+), 40 deletions(-) (limited to 'src/qregisters.cpp') diff --git a/src/qregisters.cpp b/src/qregisters.cpp index 981db88..002d4b7 100644 --- a/src/qregisters.cpp +++ b/src/qregisters.cpp @@ -61,14 +61,6 @@ namespace QRegisters { QRegister *current = NULL; ViewCurrent *view = NULL; - void - undo_edit(void) - { - current->update_string(); - undo.push_var(ring.current); - undo.push_var(current)->undo_edit(); - } - static QRegisterStack stack; } @@ -77,8 +69,11 @@ static QRegister *register_argument = NULL; void QRegisterData::set_string(const gchar *str) { - string.edit(QRegisters::view); + if (QRegisters::current) + QRegisters::current->string.update(QRegisters::view); + string.reset(); + string.edit(QRegisters::view); QRegisters::view->ssm(SCI_BEGINUNDOACTION); QRegisters::view->ssm(SCI_SETTEXT, 0, @@ -92,13 +87,16 @@ QRegisterData::set_string(const gchar *str) void QRegisterData::undo_set_string(void) { - /* set_string() assumes that parameters have been saved */ - current_doc_update(); - if (!must_undo) return; - if (QRegisters::current) + /* + * Necessary, so that upon rubout the + * string's parameters are restored. + */ + string.update(QRegisters::view); + + if (QRegisters::current && QRegisters::current->must_undo) QRegisters::current->string.undo_edit(QRegisters::view); string.undo_reset(); @@ -112,16 +110,21 @@ QRegisterData::append_string(const gchar *str) { /* * NOTE: Will not create undo action - * if string is empty + * if string is empty. + * Also, appending preserves the string's + * parameters. */ if (!str || !*str) return; + if (QRegisters::current) + QRegisters::current->string.update(QRegisters::view); + string.edit(QRegisters::view); QRegisters::view->ssm(SCI_BEGINUNDOACTION); QRegisters::view->ssm(SCI_APPENDTEXT, - strlen(str), (sptr_t)str); + strlen(str), (sptr_t)str); QRegisters::view->ssm(SCI_ENDUNDOACTION); if (QRegisters::current) @@ -137,7 +140,9 @@ QRegisterData::get_string(void) if (!string.is_initialized()) return g_strdup(""); - current_doc_update(); + if (QRegisters::current) + QRegisters::current->string.update(QRegisters::view); + string.edit(QRegisters::view); size = QRegisters::view->ssm(SCI_GETLENGTH) + 1; @@ -150,27 +155,12 @@ QRegisterData::get_string(void) return str; } -void -QRegisterData::edit(void) -{ - string.edit(QRegisters::view); - interface.show_view(QRegisters::view); -} - -void -QRegisterData::undo_edit(void) -{ - if (!must_undo) - return; - - string.undo_edit(QRegisters::view); - interface.undo_show_view(QRegisters::view); -} - void QRegister::edit(void) { - /* NOTE: could call QRegisterData::edit() */ + if (QRegisters::current) + QRegisters::current->string.update(QRegisters::view); + string.edit(QRegisters::view); interface.show_view(QRegisters::view); interface.info_update(this); @@ -183,7 +173,7 @@ QRegister::undo_edit(void) return; interface.undo_info_update(this); - /* NOTE: could call QRegisterData::undo_edit() */ + string.update(QRegisters::view); string.undo_edit(QRegisters::view); interface.undo_show_view(QRegisters::view); } @@ -281,7 +271,6 @@ QRegisterTable::QRegisterTable(bool _undo) : RBTree(), must_undo(_undo) void QRegisterTable::edit(QRegister *reg) { - current_doc_update(); reg->edit(); ring.current = NULL; @@ -538,13 +527,12 @@ StateLoadQReg::done(const gchar *str) BEGIN_EXEC(&States::start); if (*str) { + /* Load file into Q-Register */ register_argument->undo_load(); register_argument->load(str); } else { - if (ring.current) - ring.undo_edit(); - else /* QRegisters::current != NULL */ - QRegisters::undo_edit(); + /* Edit Q-Register */ + current_doc_undo_edit(); QRegisters::globals.edit(register_argument); } -- cgit v1.2.3