diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2017-04-10 13:47:20 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@qt.io> | 2017-04-25 18:18:30 +0000 |
commit | 3902b27ee40400db6cf596ca0db31b6497f0421b (patch) | |
tree | 774bb6e244482dd308b7488e91cfdba4a3eee665 /src/webenginewidgets | |
parent | 3e7aab785a22e0bdf96d22e2ed03689c37554baa (diff) |
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 <qt_ci_bot@qt-project.org>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'src/webenginewidgets')
-rw-r--r-- | src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
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<QKeyEvent *>(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<QKeyEvent*>(event)) != QWebEnginePage::NoWebAction) { - event->accept(); + if (event->type() == QEvent::ShortcutOverride) { + handleShortcutOverrideEvent(m_client, static_cast<QKeyEvent *>(event)); return true; } break; |