diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-11-18 01:05:37 +0100 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-11-18 01:05:37 +0100 |
commit | 9be9fcca0c9ab63180a2e9aeb64e25829034b7a4 (patch) | |
tree | 94cd667c59f75551921e988bdfd1edbaa4a3d946 /parser.cpp | |
parent | ed6d0bdbf4b69061dd5db69d823c2ee39b98dcdd (diff) | |
download | sciteco-9be9fcca0c9ab63180a2e9aeb64e25829034b7a4.tar.gz |
avoid using Scintilla's SAVEPOINT mechanism altogether: fixes some destructive commands
* the only thing gained from (partially) using that mechanism is that no explicit calls to set the dirty-status of a buffer are necessary
* however it had many disadvantages:
* setting the buffer clean had to be done manually anyway (see previous commits)
* when changing Q-Registers without affecting the current document, a flag had to be used to prevent setting the current document dirty
* last but not least, it introduced a dependency on the order of the destructive operation and its UNDO token.
* the UNDO token could trigger a SAVEPOINTLEFT notification resulting in additional rubout tokens to be pushed on the stack which screws
the rubout stack. this can be avoided by clever ordering of the operations
* using an explicit ring.dirtify() is therefore much better
Diffstat (limited to 'parser.cpp')
-rw-r--r-- | parser.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
@@ -415,6 +415,8 @@ StateStart::delete_words(gint64 n) undo.push_msg(SCI_GOTOPOS, pos); undo.push_msg(SCI_UNDO); + ring.dirtify(); + return SUCCESS; } @@ -804,6 +806,7 @@ StateStart::custom(gchar chr) throw (Error) interface.ssm(SCI_BEGINUNDOACTION); interface.ssm(SCI_DELETERANGE, from, len); interface.ssm(SCI_ENDUNDOACTION); + ring.dirtify(); break; } @@ -1110,6 +1113,7 @@ StateInsert::initial(void) throw (Error) expressions.pop_num_calc(); interface.ssm(SCI_SCROLLCARET); interface.ssm(SCI_ENDUNDOACTION); + ring.dirtify(); undo.push_msg(SCI_UNDO); } @@ -1122,6 +1126,7 @@ StateInsert::process(const gchar *str, gint new_chars) throw (Error) (sptr_t)(str + strlen(str) - new_chars)); interface.ssm(SCI_SCROLLCARET); interface.ssm(SCI_ENDUNDOACTION); + ring.dirtify(); undo.push_msg(SCI_UNDO); } |