diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2013-01-27 23:12:02 +0100 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2013-01-27 23:12:02 +0100 |
commit | 72c65f59ef95f070442b84cba48be60cbb8195cc (patch) | |
tree | 84e17879f63f69daff74bc0d5e67b02681d44369 /src/search.cpp | |
parent | 5051f4aefbdf0f11097656c3c028b4ef1f2448a3 (diff) | |
download | sciteco-72c65f59ef95f070442b84cba48be60cbb8195cc.tar.gz |
prevent creating Scintilla UNDO token when FD or FK fails
rubout would undo something different and screw up editor state
Diffstat (limited to 'src/search.cpp')
-rw-r--r-- | src/search.cpp | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/src/search.cpp b/src/search.cpp index 30ae5e7..a2d7f70 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -528,19 +528,23 @@ StateSearchKill::done(const gchar *str) throw (Error) BEGIN_EXEC(&States::start); + QRegister *search_reg = QRegisters::globals["_"]; + StateSearch::done(str); - undo.push_msg(SCI_GOTOPOS, interface.ssm(SCI_GETCURRENTPOS)); - anchor = interface.ssm(SCI_GETANCHOR); - interface.ssm(SCI_GOTOPOS, anchor); + if (IS_SUCCESS(search_reg->get_integer())) { + undo.push_msg(SCI_GOTOPOS, interface.ssm(SCI_GETCURRENTPOS)); + anchor = interface.ssm(SCI_GETANCHOR); + interface.ssm(SCI_GOTOPOS, anchor); - interface.ssm(SCI_BEGINUNDOACTION); - interface.ssm(SCI_DELETERANGE, - parameters.dot, anchor - parameters.dot); - interface.ssm(SCI_ENDUNDOACTION); - ring.dirtify(); + interface.ssm(SCI_BEGINUNDOACTION); + interface.ssm(SCI_DELETERANGE, + parameters.dot, anchor - parameters.dot); + interface.ssm(SCI_ENDUNDOACTION); + ring.dirtify(); - undo.push_msg(SCI_UNDO); + undo.push_msg(SCI_UNDO); + } return &States::start; } @@ -550,14 +554,18 @@ StateSearchDelete::done(const gchar *str) throw (Error) { BEGIN_EXEC(&States::start); + QRegister *search_reg = QRegisters::globals["_"]; + StateSearch::done(str); - interface.ssm(SCI_BEGINUNDOACTION); - interface.ssm(SCI_REPLACESEL, 0, (sptr_t)""); - interface.ssm(SCI_ENDUNDOACTION); - ring.dirtify(); + if (IS_SUCCESS(search_reg->get_integer())) { + interface.ssm(SCI_BEGINUNDOACTION); + interface.ssm(SCI_REPLACESEL, 0, (sptr_t)""); + interface.ssm(SCI_ENDUNDOACTION); + ring.dirtify(); - undo.push_msg(SCI_UNDO); + undo.push_msg(SCI_UNDO); + } return &States::start; } |