]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView.cpp
GuiSearch did not work with num. keypad enter
[lyx.git] / src / BufferView.cpp
index f23027c269a3af011a6a125ca3f9aaeeb857c69b..065723621b9dee268f23a40121ccc7814eb48085 100644 (file)
@@ -61,6 +61,7 @@
 #include "frontends/NullPainter.h"
 #include "frontends/Painter.h"
 #include "frontends/Selection.h"
+#include "frontends/Clipboard.h"
 
 #include "support/convert.h"
 #include "support/debug.h"
@@ -274,9 +275,6 @@ struct BufferView::Private
          */
        frontend::GuiBufferViewDelegate * gui_;
 
-       /// cache search string for simple search
-       docstring search_request_cache_;
-
        ///
        map<string, Inset *> edited_insets_;
 
@@ -449,6 +447,26 @@ Buffer const & BufferView::buffer() const
 }
 
 
+docstring const & BufferView::searchRequestCache() const
+{
+       return theClipboard().getFindBuffer();
+}
+
+
+void BufferView::setSearchRequestCache(docstring const & text)
+{
+       bool casesensitive;
+       bool matchword;
+       bool forward;
+       bool wrap;
+       bool instant;
+       bool onlysel;
+       docstring const search = string2find(text, casesensitive, matchword,
+                                            forward, wrap, instant, onlysel);
+       theClipboard().setFindBuffer(search);
+}
+
+
 bool BufferView::needsFitCursor() const
 {
        if (cursorStatus(d->cursor_) == CUR_INSIDE) {
@@ -1620,18 +1638,18 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                docstring searched_string;
 
                if (!cmd.argument().empty()) {
-                       d->search_request_cache_ = cmd.argument();
+                       setSearchRequestCache(cmd.argument());
                        searched_string = cmd.argument();
                } else {
-                       searched_string = d->search_request_cache_;
+                       searched_string = searchRequestCache();
                }
 
                if (searched_string.empty())
                        break;
 
-               bool const fw = act == LFUN_WORD_FIND_FORWARD;
                docstring const data =
-                       find2string(searched_string, true, false, fw);
+                       find2string(searched_string, false, false,
+                                   act == LFUN_WORD_FIND_FORWARD, false, false, false);
                bool found = lyxfind(this, FuncRequest(LFUN_WORD_FIND, data));
                if (found)
                        dr.screenUpdate(Update::Force | Update::FitCursor);
@@ -1642,8 +1660,8 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
 
        case LFUN_WORD_FIND: {
                docstring arg = cmd.argument();
-               if (arg.empty() && !d->search_request_cache_.empty())
-                       arg = d->search_request_cache_;
+               if (arg.empty())
+                       arg = searchRequestCache();
                if (arg.empty()) {
                        lyx::dispatch(FuncRequest(LFUN_DIALOG_SHOW, "findreplace"));
                        break;
@@ -1653,14 +1671,14 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                else
                        dr.setMessage(_("Search string not found!"));
 
-               d->search_request_cache_ = arg;
+               setSearchRequestCache(arg);
                break;
        }
 
        case LFUN_SEARCH_STRING_SET: {
                docstring pattern = cmd.argument();
                if (!pattern.empty()) {
-                       d->search_request_cache_ = pattern;
+                       setSearchRequestCache(pattern);
                        break;
                }
                if (cur.selection())
@@ -1672,7 +1690,7 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                        cur.selection(false);
                        cur.pos() = spos;
                }
-               d->search_request_cache_ = pattern;
+               setSearchRequestCache(pattern);
                break;
        }
 
@@ -1855,7 +1873,7 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                cur.setCursor(doc_iterator_begin(cur.buffer()));
                cur.selHandle(false);
                // Force an immediate computation of metrics because we need it below
-               processUpdateFlags(Update::Force);
+               updateMetrics();
 
                d->text_metrics_[&buffer_.text()].editXY(cur, p.x_, p.y_,
                        true, act == LFUN_SCREEN_UP);