diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2017-07-13 14:37:18 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@qt.io> | 2017-07-14 18:49:25 +0000 |
commit | 19e5c2057b9f127726018d3e39a62066317a983f (patch) | |
tree | fafbd781906eeff88326b10cc3d0ecab40f1ca52 | |
parent | a0f7ba909905ea917f47154cb5b18b8f108e0613 (diff) |
Fix propagation of unhandled key press events
Unhandled key presses for printable keys were not received by the parent
widget anymore. This was a regression from 5.8.0.
The propagation is suppressed if NativeWebKeyboardEvent::skip_in_browser
is true.
Commit 4501b9d8 accidentally removed the wrong skip_in_browser
assignment.
Task-number: QTBUG-61621
Change-Id: I7eafa1fac5fb9a7edc4af2bc1aac21c106264713
Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
-rw-r--r-- | src/core/render_widget_host_view_qt.cpp | 5 | ||||
-rw-r--r-- | tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp | 11 |
2 files changed, 13 insertions, 3 deletions
diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp index 131f2a664..dd372b72f 100644 --- a/src/core/render_widget_host_view_qt.cpp +++ b/src/core/render_widget_host_view_qt.cpp @@ -1145,8 +1145,9 @@ void RenderWidgetHostViewQt::handleKeyEvent(QKeyEvent *ev) if (keyDownTextInsertion) { // Blink won't consume the RawKeyDown, but rather the Char event in this case. - // Make sure to skip the former on the way back. The same os_event will be set on both of them. - webEvent.skip_in_browser = true; + // The RawKeyDown is skipped on the way back (see above). + // The same os_event will be set on both NativeWebKeyboardEvents. + webEvent.skip_in_browser = false; webEvent.type = blink::WebInputEvent::Char; m_host->ForwardKeyboardEvent(webEvent); } diff --git a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp index 8509e9a2d..7fbbd63d3 100644 --- a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp +++ b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp @@ -447,16 +447,25 @@ void tst_QWebEngineView::unhandledKeyEventPropagation() QTRY_COMPARE(parentWidget.releaseEvents.size(), 3); QCOMPARE(evaluateJavaScriptSync(webView.page(), "document.activeElement.id").toString(), QStringLiteral("second_div")); + // Focus the button and press 'y'. + evaluateJavaScriptSync(webView.page(), "document.getElementById('submit_button').focus()"); + QTRY_COMPARE(evaluateJavaScriptSync(webView.page(), "document.activeElement.id").toString(), QStringLiteral("submit_button")); + QTest::sendKeyEvent(QTest::Press, webView.focusProxy(), Qt::Key_Y, 'y', Qt::NoModifier); + QTest::sendKeyEvent(QTest::Release, webView.focusProxy(), Qt::Key_Y, 'y', Qt::NoModifier); + QTRY_COMPARE(parentWidget.releaseEvents.size(), 4); + // The page will consume the Tab key to change focus between elements while the arrow // keys won't be used. - QCOMPARE(parentWidget.pressEvents.size(), 2); + QCOMPARE(parentWidget.pressEvents.size(), 3); QCOMPARE(parentWidget.pressEvents[0].key(), (int)Qt::Key_Right); QCOMPARE(parentWidget.pressEvents[1].key(), (int)Qt::Key_Left); + QCOMPARE(parentWidget.pressEvents[2].key(), (int)Qt::Key_Y); // Key releases will all come back unconsumed. QCOMPARE(parentWidget.releaseEvents[0].key(), (int)Qt::Key_Right); QCOMPARE(parentWidget.releaseEvents[1].key(), (int)Qt::Key_Tab); QCOMPARE(parentWidget.releaseEvents[2].key(), (int)Qt::Key_Left); + QCOMPARE(parentWidget.releaseEvents[3].key(), (int)Qt::Key_Y); } void tst_QWebEngineView::horizontalScrollbarTest() |