From 3902b27ee40400db6cf596ca0db31b6497f0421b Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Mon, 10 Apr 2017 13:47:20 +0200 Subject: Override shortcuts in HTML input fields When users defined a single-letter short cut it was not possible to type this letter in HTML input fields. Fix this by accepting ShortcutOverride events whenever the web page is editing text. Use QInputControl::isCommonTextEditShortcut for Qt 5.9 and later. For the case where QtWebEngine is built against an older Qt a duplicated code path is used. Also, ensure users do not override web action short cuts. Task-number: QTBUG-59053 Change-Id: Ic26cf2a040a72b118273c6645c00b2913b995b0b Reviewed-by: Qt CI Bot Reviewed-by: Alexandru Croitor --- .../render_widget_host_view_qt_delegate_widget.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'src/webenginewidgets') diff --git a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp index fd58a0708..c608ba2aa 100644 --- a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp +++ b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp @@ -59,6 +59,15 @@ namespace QtWebEngineCore { +static bool handleShortcutOverrideEvent(RenderWidgetHostViewQtDelegateClient *client, QKeyEvent *ke) +{ + if (client->handleShortcutOverrideEvent(ke)) + return true; + if (editorActionForKeyEvent(ke) != QWebEnginePage::NoWebAction) + ke->accept(); + return true; +} + class RenderWidgetHostViewQuickItem : public QQuickItem { public: RenderWidgetHostViewQuickItem(RenderWidgetHostViewQtDelegateClient *client) : m_client(client) @@ -68,6 +77,14 @@ public: setFocus(true); } protected: + bool event(QEvent *event) override + { + if (event->type() == QEvent::ShortcutOverride) { + handleShortcutOverrideEvent(m_client, static_cast(event)); + return true; + } + return QQuickItem::event(event); + } void focusInEvent(QFocusEvent *event) override { m_client->forwardEvent(event); @@ -437,8 +454,8 @@ bool RenderWidgetHostViewQtDelegateWidget::event(QEvent *event) // We forward focus events later, once they have made it to the m_rootItem. return QQuickWidget::event(event); case QEvent::ShortcutOverride: - if (editorActionForKeyEvent(static_cast(event)) != QWebEnginePage::NoWebAction) { - event->accept(); + if (event->type() == QEvent::ShortcutOverride) { + handleShortcutOverrideEvent(m_client, static_cast(event)); return true; } break; -- cgit v1.2.3