From 44a5b008f7a6dce065f5997503e403609ee62859 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Tue, 23 May 2017 14:34:23 +0200 Subject: Forward ShortcutOverride in QQuickWidget This is now essential since otherwise these events are simply lost. Amends 0dbc575c1a8359534761167a5f5f1e29abedd51d Task-number: QTBUG-60988 Change-Id: Ib1d99d8fcd5bb92c9b52977796f2910f0fe71c48 Reviewed-by: J-P Nurmi Reviewed-by: Andy Nichols --- src/quickwidgets/qquickwidget.cpp | 3 ++ .../quickwidgets/qquickwidget/tst_qquickwidget.cpp | 33 ++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/src/quickwidgets/qquickwidget.cpp b/src/quickwidgets/qquickwidget.cpp index 49ac0caefd..2e8623f508 100644 --- a/src/quickwidgets/qquickwidget.cpp +++ b/src/quickwidgets/qquickwidget.cpp @@ -1440,6 +1440,9 @@ bool QQuickWidget::event(QEvent *e) d->offscreenWindow->setWindowState(resolveWindowState(windowState())); break; + case QEvent::ShortcutOverride: + return QCoreApplication::sendEvent(d->offscreenWindow, e); + default: break; } diff --git a/tests/auto/quickwidgets/qquickwidget/tst_qquickwidget.cpp b/tests/auto/quickwidgets/qquickwidget/tst_qquickwidget.cpp index bd051ec990..60495596d1 100644 --- a/tests/auto/quickwidgets/qquickwidget/tst_qquickwidget.cpp +++ b/tests/auto/quickwidgets/qquickwidget/tst_qquickwidget.cpp @@ -59,6 +59,7 @@ private slots: void reparentToNewWindow(); void nullEngine(); void keyEvents(); + void shortcuts(); }; @@ -365,6 +366,38 @@ void tst_qquickwidget::keyEvents() QTRY_VERIFY(widget.ok); } +class ShortcutEventFilter : public QObject +{ +public: + bool eventFilter(QObject *obj, QEvent *e) override { + if (e->type() == QEvent::ShortcutOverride) + shortcutOk = true; + + return QObject::eventFilter(obj, e); + } + + bool shortcutOk = false; +}; + +void tst_qquickwidget::shortcuts() +{ + // Verify that ShortcutOverride events do not get lost. (QTBUG-60988) + KeyHandlingWidget widget; + widget.setSource(testFileUrl("rectangle.qml")); + widget.show(); + QVERIFY(QTest::qWaitForWindowExposed(widget.window(), 5000)); + + // Send to the widget, verify that the QQuickWindow sees it. + + ShortcutEventFilter filter; + widget.quickWindow()->installEventFilter(&filter); + + QKeyEvent e(QEvent::ShortcutOverride, Qt::Key_A, Qt::ControlModifier); + QCoreApplication::sendEvent(&widget, &e); + + QTRY_VERIFY(filter.shortcutOk); +} + QTEST_MAIN(tst_qquickwidget) #include "tst_qquickwidget.moc" -- cgit v1.2.3