aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/qregisters.cpp
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2014-11-16 23:29:34 +0100
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2014-11-16 23:34:25 +0100
commit52db2f4e20d7c544d3040af1f359dd3365ca204b (patch)
tree5f1d9ae0e9673215a2cb99965943e4ed93e50850 /src/qregisters.cpp
parent38fcf6d15cdf09591e7d7a142ad724164875e433 (diff)
downloadsciteco-52db2f4e20d7c544d3040af1f359dd3365ca204b.tar.gz
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)
Diffstat (limited to 'src/qregisters.cpp')
-rw-r--r--src/qregisters.cpp68
1 files changed, 28 insertions, 40 deletions
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;
@@ -151,26 +156,11 @@ QRegisterData::get_string(void)
}
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);
}