]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView.cpp
grammar
[lyx.git] / src / BufferView.cpp
index 376425339c092fbf49c1d379a741669210edb11c..0025277e5330406ae1d33eda3113ebf668c3884b 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 for Find Next
-       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) {
@@ -1613,18 +1631,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);
@@ -1635,8 +1653,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;
@@ -1646,14 +1664,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())
@@ -1665,7 +1683,7 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                        cur.selection(false);
                        cur.pos() = spos;
                }
-               d->search_request_cache_ = pattern;
+               setSearchRequestCache(pattern);
                break;
        }
 
@@ -1848,7 +1866,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);