diff options
author | Anu Aliyas <anu.aliyas@qt.io> | 2023-12-15 13:37:19 +0100 |
---|---|---|
committer | Anu Aliyas <anu.aliyas@qt.io> | 2023-12-20 15:51:32 +0100 |
commit | 5654e6c45c4c0aee8d2d6f4e344b4c8c9dd3d74e (patch) | |
tree | a11b30e3894971aa2f5694d78e082173cf2fd7b1 | |
parent | 19915aa4b598bc11c988b6f6fa04f1061a6aaa3f (diff) |
Forward unhandled mouse wheel events to the parent widget
- All mouse wheel events are forwarded to Chromium.
- Forward unhandled wheel events by Chromium to the parent widget.
- Impersonated QSpontaneKeyEvent in Qt WebEngine to set
spontaneous flag and forwarded the event as spontaneous.
Fixes: QTBUG-118398
Pick-to: 6.7 6.6 6.5
Change-Id: I4ec831b0077edc3d833fdd7ae8d31a5535b0c05b
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
-rw-r--r-- | src/core/render_widget_host_view_qt_delegate_item.cpp | 6 | ||||
-rw-r--r-- | src/core/render_widget_host_view_qt_delegate_item.h | 1 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebengineview.cpp | 16 |
3 files changed, 19 insertions, 4 deletions
diff --git a/src/core/render_widget_host_view_qt_delegate_item.cpp b/src/core/render_widget_host_view_qt_delegate_item.cpp index 1ad664a1f..78ec06bb8 100644 --- a/src/core/render_widget_host_view_qt_delegate_item.cpp +++ b/src/core/render_widget_host_view_qt_delegate_item.cpp @@ -449,10 +449,8 @@ void RenderWidgetHostViewQtDelegateItem::updateAdapterClientIfNeeded(WebContents void RenderWidgetHostViewQtDelegateItem::unhandledWheelEvent(QWheelEvent *ev) { - if (QWindow *w = Window()) { - if (QWindow *p = w->parent()) - qApp->sendEvent(p, ev); - } + if (m_widgetDelegate) + m_widgetDelegate->unhandledWheelEvent(ev); } } // namespace QtWebEngineCore diff --git a/src/core/render_widget_host_view_qt_delegate_item.h b/src/core/render_widget_host_view_qt_delegate_item.h index 082bd7791..55f243eab 100644 --- a/src/core/render_widget_host_view_qt_delegate_item.h +++ b/src/core/render_widget_host_view_qt_delegate_item.h @@ -35,6 +35,7 @@ public: virtual void Destroy() = 0; virtual void Resize(int, int) { } virtual QWindow *Window() { return nullptr; } + virtual void unhandledWheelEvent(QWheelEvent *) { } }; // Useful information keyboard and mouse QEvent propagation. diff --git a/src/webenginewidgets/api/qwebengineview.cpp b/src/webenginewidgets/api/qwebengineview.cpp index 8d88726fa..65474506c 100644 --- a/src/webenginewidgets/api/qwebengineview.cpp +++ b/src/webenginewidgets/api/qwebengineview.cpp @@ -68,6 +68,14 @@ #include <QThread> #endif +QT_BEGIN_NAMESPACE +class QSpontaneKeyEvent +{ +public: + static inline void makeSpontaneous(QEvent *ev) { ev->setSpontaneous(); } +}; +QT_END_NAMESPACE + namespace QtWebEngineCore { class WebEngineQuickWidget : public QQuickWidget, public WidgetDelegate { @@ -172,6 +180,14 @@ public: return root->windowHandle(); return nullptr; } + void unhandledWheelEvent(QWheelEvent *ev) override + { + auto parentWidget = QQuickWidget::parentWidget(); + if (parentWidget) { + QSpontaneKeyEvent::makeSpontaneous(ev); + qApp->notify(parentWidget, ev); + } + } protected: void closeEvent(QCloseEvent *event) override |