From 789872a0f9283499d4dfe6b14480bc296ba1a8b7 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 29 Jul 2024 12:45:39 +0200 Subject: [PATCH] macOS: Support gestures for going back and forward MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit in the editor and help viewer, when setting macOS Trackpad preferences to "Swipe between pages: Swipe with Three Fingers". Fixes: QTCREATORBUG-7387 Change-Id: I1c2684f846d72bb98ba6626c3a04f01fb57b8e24 Reviewed-by: Tor Arne Vestbø --- .../coreplugin/editormanager/editorview.cpp | 17 ++++++++++++++++ .../coreplugin/editormanager/editorview.h | 1 + src/plugins/help/helpviewer.cpp | 20 ++++++++++++++++++- src/plugins/help/helpviewer.h | 1 + 4 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/plugins/coreplugin/editormanager/editorview.cpp b/src/plugins/coreplugin/editormanager/editorview.cpp index 9afd9899d3f..e82e1e6bee0 100644 --- a/src/plugins/coreplugin/editormanager/editorview.cpp +++ b/src/plugins/coreplugin/editormanager/editorview.cpp @@ -324,6 +324,23 @@ void EditorView::focusInEvent(QFocusEvent *) EditorManagerPrivate::setCurrentView(this); } +bool EditorView::event(QEvent *e) +{ + if (e->type() == QEvent::NativeGesture) { + auto ev = static_cast(e); + if (ev->gestureType() == Qt::SwipeNativeGesture) { + if (ev->value() > 0 && canGoBack()) { // swipe from right to left == go back + goBackInNavigationHistory(); + return true; + } else if (ev->value() <= 0 && canGoForward()) { + goForwardInNavigationHistory(); + return true; + } + } + } + return false; +} + void EditorView::addEditor(IEditor *editor) { if (m_editors.contains(editor)) diff --git a/src/plugins/coreplugin/editormanager/editorview.h b/src/plugins/coreplugin/editormanager/editorview.h index 374c6df21fa..90c26c4acf2 100644 --- a/src/plugins/coreplugin/editormanager/editorview.h +++ b/src/plugins/coreplugin/editormanager/editorview.h @@ -111,6 +111,7 @@ protected: void paintEvent(QPaintEvent *) override; void mousePressEvent(QMouseEvent *e) override; void focusInEvent(QFocusEvent *) override; + bool event(QEvent *e) override; private: friend class SplitterOrView; // for setParentSplitterOrView diff --git a/src/plugins/help/helpviewer.cpp b/src/plugins/help/helpviewer.cpp index 01eed943b1b..1fc9f45a351 100644 --- a/src/plugins/help/helpviewer.cpp +++ b/src/plugins/help/helpviewer.cpp @@ -15,9 +15,10 @@ #include #include -#include #include +#include #include +#include #include @@ -189,6 +190,23 @@ void HelpViewer::wheelEvent(QWheelEvent *event) QWidget::wheelEvent(event); } +bool HelpViewer::event(QEvent *e) +{ + if (e->type() == QEvent::NativeGesture) { + auto ev = static_cast(e); + if (ev->gestureType() == Qt::SwipeNativeGesture) { + if (ev->value() > 0 && isBackwardAvailable()) { // swipe from right to left == go back + backward(); + return true; + } else if (ev->value() <= 0 && isForwardAvailable()) { + forward(); + return true; + } + } + } + return false; +} + void HelpViewer::incrementZoom(int steps) { const int incrementPercentage = 10 * steps; // 10 percent increase by single step diff --git a/src/plugins/help/helpviewer.h b/src/plugins/help/helpviewer.h index 503e06db35a..49d1b236500 100644 --- a/src/plugins/help/helpviewer.h +++ b/src/plugins/help/helpviewer.h @@ -88,6 +88,7 @@ signals: protected: void wheelEvent(QWheelEvent *event) override; + bool event(QEvent *e) override; void slotLoadStarted(); void slotLoadFinished();