commit d1ea8a40afc54edb37965c632b261b1f2cfe2fad
Author: Juergen Spitzmueller <[email protected]>
Date:   Fri Feb 12 10:50:47 2021 +0100

    GuiSearch: catch global shortcuts to find forwards/backwards (#11170)
---
 src/frontends/qt/GuiSearch.cpp |   32 ++++++++++++++++++++++++++++++--
 src/frontends/qt/GuiSearch.h   |    5 ++++-
 2 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/src/frontends/qt/GuiSearch.cpp b/src/frontends/qt/GuiSearch.cpp
index 3bd1be0..e33e421 100644
--- a/src/frontends/qt/GuiSearch.cpp
+++ b/src/frontends/qt/GuiSearch.cpp
@@ -20,6 +20,9 @@
 #include "BufferView.h"
 #include "Buffer.h"
 #include "Cursor.h"
+#include "FuncRequest.h"
+#include "KeyMap.h"
+#include "GuiKeySymbol.h"
 #include "GuiView.h"
 
 #include "support/gettext.h"
@@ -30,6 +33,8 @@
 
 using namespace std;
 
+using lyx::KeySymbol;
+
 namespace lyx {
 namespace frontend {
 
@@ -75,6 +80,29 @@ GuiSearch::GuiSearch(GuiView & lv)
 }
 
 
+void GuiSearch::keyPressEvent(QKeyEvent * ev)
+{
+       KeySymbol sym;
+       setKeySymbol(&sym, ev);
+
+       // we catch the key sequences for forward and backwards search
+       if (sym.isOK()) {
+               KeyModifier mod = lyx::q_key_state(ev->modifiers());
+               KeySequence keyseq(&theTopLevelKeymap(), &theTopLevelKeymap());
+               FuncRequest fr = keyseq.addkey(sym, mod);
+               if (fr == FuncRequest(LFUN_WORD_FIND_FORWARD) || fr == 
FuncRequest(LFUN_WORD_FIND)) {
+                       findClicked();
+                       return;
+               }
+               if (fr == FuncRequest(LFUN_WORD_FIND_BACKWARD)) {
+                       findClicked(true);
+                       return;
+               }
+       }
+       QDialog::keyPressEvent(ev);
+}
+
+
 void GuiSearch::showEvent(QShowEvent * e)
 {
        findChanged();
@@ -95,11 +123,11 @@ void GuiSearch::findChanged()
 }
 
 
-void GuiSearch::findClicked()
+void GuiSearch::findClicked(bool const backwards)
 {
        docstring const needle = qstring_to_ucs4(findCO->currentText());
        find(needle, caseCB->isChecked(), wordsCB->isChecked(),
-               !backwardsCB->isChecked());
+               (!backwards && !backwardsCB->isChecked()));
        uniqueInsert(findCO, findCO->currentText());
        findCO->lineEdit()->selectAll();
 }
diff --git a/src/frontends/qt/GuiSearch.h b/src/frontends/qt/GuiSearch.h
index 2901110..e6c7c99 100644
--- a/src/frontends/qt/GuiSearch.h
+++ b/src/frontends/qt/GuiSearch.h
@@ -28,11 +28,14 @@ public:
 
 private Q_SLOTS:
        void findChanged();
-       void findClicked();
+       void findClicked(bool const backwards = false);
        void replaceClicked();
        void replaceallClicked();
 
 private:
+       ///
+       void keyPressEvent(QKeyEvent * e) override;
+       ///
        void showEvent(QShowEvent * e) override;
        ///
        bool initialiseParams(std::string const &) override { return true; }
-- 
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to