Git commit 02cec2e0d36818b9862fd40d4d4a3c064fd99d61 by Natalie Clarius.
Committed on 24/03/2024 at 13:51.
Pushed by nclarius into branch 'shift-click-forward-search'.

add Shift+Leftclick in editor to forward search

Analogous to Shift+Leftclick in the viewer to backward search.

M  +2    -2    doc/index.docbook
M  +12   -10   src/documentinfo.cpp
M  +4    -1    src/documentinfo.h
M  +63   -2    src/eventfilter.cpp
M  +11   -1    src/eventfilter.h
M  +2    -1    src/kiledocmanager.cpp

https://invent.kde.org/office/kile/-/commit/02cec2e0d36818b9862fd40d4d4a3c064fd99d61

diff --git a/doc/index.docbook b/doc/index.docbook
index 3ba55e29..66e7b288 100644
--- a/doc/index.docbook
+++ b/doc/index.docbook
@@ -694,8 +694,8 @@
                
<guimenuitem>Tools</guimenuitem><guilabel>Build</guilabel></menuchoice>
                and always choose the <guilabel>Modern</guilabel> 
configuration.</para>
 
-               <para>To execute a forward search, position the cursor on a 
line of source code, and click
-               <guilabel>Forward Search</guilabel> to jump to the associated 
position
+               <para>To execute a forward search, position the cursor on a 
line of source code, and click 
+               with the <mousebutton>left</mousebutton> mouse button while 
pressing &Shift;, or click <guilabel>Forward DVI</guilabel>/<guilabel>Forward 
PDF</guilabel> to jump to the associated position
                in the &DVI; or PDF viewer window.</para>
        </sect1>
 
diff --git a/src/documentinfo.cpp b/src/documentinfo.cpp
index c3342b6f..cf758763 100644
--- a/src/documentinfo.cpp
+++ b/src/documentinfo.cpp
@@ -831,22 +831,24 @@ void TextInfo::setDocumentContents(const QStringList& 
contents)
     m_documentContents = contents;
 }
 
-LaTeXInfo::LaTeXInfo(Extensions* extensions,
-                     KileAbbreviation::Manager* abbreviationManager,
-                     LatexCommands* commands,
-                     EditorExtension* editorExtension,
-                     KileConfiguration::Manager* manager,
-                     KileCodeCompletion::Manager* codeCompletionManager,
-                     KileTool::LivePreviewManager* livePreviewManager,
+LaTeXInfo::LaTeXInfo(Extensions *extensions,
+                     KileAbbreviation::Manager *abbreviationManager,
+                     LatexCommands *commands, 
+                     EditorExtension *editorExtension,
+                     KileConfiguration::Manager *manager,
+                     KileCodeCompletion::Manager *codeCompletionManager,
+                     KileTool::LivePreviewManager *livePreviewManager,
                      KileView::Manager *viewManager,
-                     KileParser::Manager* parserManager)
+                     KileParser::Manager *parserManager,
+                     KileTool::Manager *toolManager)
     : TextInfo(extensions, abbreviationManager, parserManager, "LaTeX"),
       m_commands(commands),
       m_editorExtension(editorExtension),
       m_configurationManager(manager),
       m_eventFilter(Q_NULLPTR),
       m_livePreviewManager(livePreviewManager),
-      m_viewManager(viewManager)
+      m_viewManager(viewManager),
+      m_toolManager(toolManager)
 {
     documentTypePromotionAllowed = false;
     updateStructLevelInfo();
@@ -976,7 +978,7 @@ void LaTeXInfo::updateStructLevelInfo() {
 QList<QObject*> LaTeXInfo::createEventFilters(KTextEditor::View *view)
 {
     QList<QObject*> toReturn;
-    QObject *eventFilter = new LaTeXEventFilter(view, m_editorExtension);
+    QObject *eventFilter = new LaTeXEventFilter(view, m_editorExtension, 
m_viewManager, m_livePreviewManager, m_toolManager);
     connect(m_configurationManager, SIGNAL(configChanged()), eventFilter, 
SLOT(readConfig()));
     toReturn << eventFilter;
     return toReturn;
diff --git a/src/documentinfo.h b/src/documentinfo.h
index d78e82ee..b6f40265 100644
--- a/src/documentinfo.h
+++ b/src/documentinfo.h
@@ -26,6 +26,7 @@
 
 #include "kileconstants.h"
 #include "kileextensions.h"
+#include "kiletoolmanager.h"
 #include "livepreview_utils.h"
 #include "outputinfo.h"
 
@@ -481,7 +482,8 @@ public:
               KileCodeCompletion::Manager *codeCompletionManager,
               KileTool::LivePreviewManager *livePreviewManager,
               KileView::Manager *viewManager,
-              KileParser::Manager *parserManager);
+              KileParser::Manager *parserManager,
+              KileTool::Manager *toolManager);
 
     virtual ~LaTeXInfo();
 
@@ -504,6 +506,7 @@ protected:
     KileCodeCompletion::LaTeXCompletionModel *m_latexCompletionModel;
     KileTool::LivePreviewManager *m_livePreviewManager;
     KileView::Manager *m_viewManager;
+    KileTool::Manager *m_toolManager;
 
     virtual void updateStructLevelInfo() override;
     virtual void checkChangedDeps();
diff --git a/src/eventfilter.cpp b/src/eventfilter.cpp
index 62dc724e..4c823b7d 100644
--- a/src/eventfilter.cpp
+++ b/src/eventfilter.cpp
@@ -25,12 +25,22 @@
 #include <KModifierKeyInfo>
 #include <KTextEditor/Document>
 #include <KTextEditor/View>
+#include <qfileinfo.h>
 
-#include "kiledebug.h"
 #include "editorextension.h"
 #include "kileconfig.h"
+#include "kiledebug.h"
+#include "kiletoolmanager.h"
+#include "kileviewmanager.h"
+#include "livepreview.h"
 
-LaTeXEventFilter::LaTeXEventFilter(KTextEditor::View *view, 
KileDocument::EditorExtension *edit) : QObject(view), m_view(view), m_edit(edit)
+LaTeXEventFilter::LaTeXEventFilter(
+    KTextEditor::View *view, KileDocument::EditorExtension *edit,
+    KileView::Manager *viewManager,
+    KileTool::LivePreviewManager *livePreviewManager,
+    KileTool::Manager *toolManager)
+    : QObject(view), m_view(view), m_edit(edit), m_viewManager(viewManager),
+      m_previewManager(livePreviewManager), m_toolManager(toolManager)
 {
     m_modifierKeyInfo = new KModifierKeyInfo(this);
     readConfig();
@@ -271,6 +281,57 @@ bool LaTeXEventFilter::eventFilter(QObject* /* o */, 
QEvent *e)
         }
     }
 
+    else if (e->type() == QEvent::MouseButtonPress) {
+        QMouseEvent *me = static_cast<QMouseEvent *>(e);
+        if (me->button() == Qt::LeftButton &&
+            me->modifiers() & Qt::ShiftModifier) { // forward search
+            // live preview
+            if (m_previewManager->isLivePreviewEnabledForCurrentDocument()) {
+                m_previewManager->showCursorPositionInDocumentViewer();
+                return true;
+            }
+            // generated PDF or DVI file
+            auto forwardPdfTool = 
m_toolManager->createTool(QLatin1String("ForwardPDF"));
+            if (!forwardPdfTool) {
+                return false;
+            }
+            forwardPdfTool->prepareToRun();
+            QFile pdfFile(forwardPdfTool->targetDir() + QLatin1Char('/') +
+                          forwardPdfTool->target());
+            auto forwardDviTool = 
m_toolManager->createTool(QLatin1String("ForwardDVI"));
+            if (!forwardDviTool) {
+                return false;
+            }
+            forwardDviTool->prepareToRun();
+            QFile dviFile(forwardDviTool->targetDir() + QLatin1Char('/') +
+                          forwardDviTool->target());
+            if (QFileInfo(pdfFile).exists() && QFileInfo(dviFile).exists()) {
+                if (QFileInfo(pdfFile).lastModified() > 
QFileInfo(dviFile).lastModified()) {
+                    m_toolManager->run(forwardPdfTool);
+                    delete forwardPdfTool;
+                    delete forwardDviTool;
+                    return true;
+                } else {
+                    m_toolManager->run(forwardDviTool);
+                    delete forwardPdfTool;
+                    delete forwardDviTool;
+                    return true;
+                }
+            } else if (QFileInfo(pdfFile).exists()) {
+                m_toolManager->run(forwardPdfTool);
+                delete forwardPdfTool;
+                delete forwardDviTool;
+                return true;
+            } else if (QFileInfo(dviFile).exists()) {
+                m_toolManager->run(forwardDviTool);
+                delete forwardPdfTool;
+                delete forwardDviTool;
+                return true;
+            }
+            return false;
+        }
+    }
+
     //pass this event on
     return false;
 }
diff --git a/src/eventfilter.h b/src/eventfilter.h
index cdc78d5e..28f46a63 100644
--- a/src/eventfilter.h
+++ b/src/eventfilter.h
@@ -15,6 +15,9 @@
 #ifndef EVENTFILTER_H
 #define EVENTFILTER_H
 
+#include "kiletoolmanager.h"
+#include "kileviewmanager.h"
+#include "livepreview.h"
 #include <QEvent>
 #include <QObject>
 
@@ -36,7 +39,11 @@ class LaTeXEventFilter : public QObject
     Q_OBJECT
 
 public:
-    LaTeXEventFilter(KTextEditor::View *view, KileDocument::EditorExtension 
*edit);
+    LaTeXEventFilter(KTextEditor::View *view, 
+                    KileDocument::EditorExtension *edit,
+                    KileView::Manager *viewManager,
+                    KileTool::LivePreviewManager *previewManager,
+                    KileTool::Manager *toolManager);
 
 public Q_SLOTS:
     void readConfig();
@@ -49,6 +56,9 @@ private:
     bool m_bCompleteEnvironment;
     KTextEditor::View *m_view;
     KileDocument::EditorExtension *m_edit;
+    KileView::Manager *m_viewManager;
+    KileTool::LivePreviewManager *m_previewManager;
+    KileTool::Manager *m_toolManager;
     KModifierKeyInfo *m_modifierKeyInfo;
 
 };
diff --git a/src/kiledocmanager.cpp b/src/kiledocmanager.cpp
index 002a010f..c96290b4 100644
--- a/src/kiledocmanager.cpp
+++ b/src/kiledocmanager.cpp
@@ -431,7 +431,8 @@ TextInfo* 
Manager::createTextDocumentInfo(KileDocument::Type type, const QUrl &u
                                     m_ki->codeCompletionManager(),
                                     m_ki->livePreviewManager(),
                                     m_ki->viewManager(),
-                                    m_ki->parserManager());
+                                    m_ki->parserManager(),
+                                    m_ki->toolManager());
             break;
         case BibTeX:
             KILE_DEBUG_MAIN << "CREATING BibInfo for " << url.url();

Reply via email to