summaryrefslogtreecommitdiffstats
path: root/src/webenginewidgets
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@qt.io>2017-04-10 13:47:20 +0200
committerJoerg Bornemann <joerg.bornemann@qt.io>2017-04-25 18:18:30 +0000
commit3902b27ee40400db6cf596ca0db31b6497f0421b (patch)
tree774bb6e244482dd308b7488e91cfdba4a3eee665 /src/webenginewidgets
parent3e7aab785a22e0bdf96d22e2ed03689c37554baa (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.cpp21
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;