commit 46bb8f22c9ae8a39476ce8f89a9c58d8f3bd6a43
Author: Stephan Witt <[email protected]>
Date:   Fri Feb 12 22:20:02 2021 +0100

    #8055 correct processing of LFUN_WORD_FIND option flags for repeated search 
operations
---
 src/BufferView.cpp |    7 +++++--
 src/lyxfind.cpp    |   33 +++++++++++++++++++++++----------
 src/lyxfind.h      |    8 ++++++++
 3 files changed, 36 insertions(+), 12 deletions(-)

diff --git a/src/BufferView.cpp b/src/BufferView.cpp
index 84f107a..b67775e 100644
--- a/src/BufferView.cpp
+++ b/src/BufferView.cpp
@@ -1629,9 +1629,12 @@ void BufferView::dispatch(FuncRequest const & cmd, 
DispatchResult & dr)
                if (searched_string.empty())
                        break;
 
-               bool const fw = act == LFUN_WORD_FIND_FORWARD;
+               bool casesensitive;
+               bool matchword;
+               bool forward;
+               docstring const search = string2find(searched_string, 
casesensitive, matchword, forward);
                docstring const data =
-                       find2string(searched_string, true, false, fw);
+                       find2string(search, casesensitive, matchword, act == 
LFUN_WORD_FIND_FORWARD);
                bool found = lyxfind(this, FuncRequest(LFUN_WORD_FIND, data));
                if (found)
                        dr.screenUpdate(Update::Force | Update::FitCursor);
diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index 7a5a46b..4c629b3 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -459,22 +459,35 @@ docstring const replace2string(docstring const & replace,
 }
 
 
-bool lyxfind(BufferView * bv, FuncRequest const & ev)
+docstring const string2find(docstring const & argument,
+                             bool &casesensitive,
+                             bool &matchword,
+                             bool &forward)
 {
-       if (!bv || ev.action() != LFUN_WORD_FIND)
-               return false;
-
-       //lyxerr << "find called, cmd: " << ev << endl;
-
        // data is of the form
        // "<search>
        //  <casesensitive> <matchword> <forward>"
        docstring search;
-       docstring howto = split(ev.argument(), search, '\n');
+       docstring howto = split(argument, search, '\n');
 
-       bool casesensitive = parse_bool(howto);
-       bool matchword     = parse_bool(howto);
-       bool forward       = parse_bool(howto);
+       casesensitive = parse_bool(howto);
+       matchword     = parse_bool(howto);
+       forward       = parse_bool(howto);
+
+       return search;
+}
+
+
+bool lyxfind(BufferView * bv, FuncRequest const & ev)
+{
+       if (!bv || ev.action() != LFUN_WORD_FIND)
+               return false;
+
+       //lyxerr << "find called, cmd: " << ev << endl;
+       bool casesensitive;
+       bool matchword;
+       bool forward;
+       docstring search = string2find(ev.argument(), casesensitive, matchword, 
forward);
 
        return findOne(bv, search, casesensitive, matchword, forward, false, 
true);
 }
diff --git a/src/lyxfind.h b/src/lyxfind.h
index 30c1ddd..88f06fe 100644
--- a/src/lyxfind.h
+++ b/src/lyxfind.h
@@ -28,6 +28,14 @@ class BufferView;
 class DocIterator;
 class FuncRequest;
 
+/** Decode the \c argument to extract search plus options from a string
+ *  that came to the LyX core in a FuncRequest wrapper.
+ */
+docstring const string2find(docstring const & argument,
+                             bool &casesensitive,
+                             bool &matchword,
+                             bool &forward);
+
 /** Encode the parameters needed to find \c search as a string
  *  that can be dispatched to the LyX core in a FuncRequest wrapper.
  */
-- 
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to