summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@nokia.com>2011-10-21 11:01:21 +0200
committerQt by Nokia <qt-info@nokia.com>2011-10-31 09:55:07 +0100
commit5761d8546f3ff3802cae85ed5224c2bdd9524452 (patch)
treeacaf3b5d808c6112a3f5423f468e52a32ea083ee
parent79fb588030fbfec9f5e8cc2d81c90965e181631f (diff)
Correctly handle null windows or widgets in keyClick()
Allow passing of null windows or widgets to keyClick(). In that case route the event through the normal Qt event processing. This allows e.g. shortcuts to catch the key event. Change-Id: Ic9455ea9be5164918b1c0bccbd58dd32eae74ff1 Reviewed-by: Jason McDonald <jason.mcdonald@nokia.com>
-rw-r--r--src/testlib/qtestkeyboard.h11
-rw-r--r--tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp2
2 files changed, 13 insertions, 0 deletions
diff --git a/src/testlib/qtestkeyboard.h b/src/testlib/qtestkeyboard.h
index e2c02ac496..deb572b8fd 100644
--- a/src/testlib/qtestkeyboard.h
+++ b/src/testlib/qtestkeyboard.h
@@ -85,8 +85,13 @@ namespace QTest
QString text, Qt::KeyboardModifiers modifier, int delay=-1)
{
QTEST_ASSERT(qApp);
+
+ if (!window)
+ window = QGuiApplication::activeWindow();
+
QTEST_ASSERT(window);
+
if (action == Click) {
sendKeyEvent(Press, window, code, text, modifier, delay);
sendKeyEvent(Release, window, code, text, modifier, delay);
@@ -183,6 +188,12 @@ namespace QTest
if (!widget)
widget = QWidget::keyboardGrabber();
if (!widget) {
+ QWindow *window = QGuiApplication::focusWindow();
+ if (window) {
+ sendKeyEvent(action, window, code, text, modifier, delay);
+ return;
+ }
+
if (QWidget *apw = QApplication::activePopupWidget())
widget = apw->focusWidget() ? apw->focusWidget() : apw;
else
diff --git a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
index 4a6123cdc3..f620b9b9be 100644
--- a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
+++ b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
@@ -1249,10 +1249,12 @@ void tst_QMenuBar::taskQTBUG4965_escapeEaten()
menubar.setActiveAction(first);
QTRY_VERIFY(menu.isVisible());
QCOMPARE(menubar.activeAction(), first);
+ QTest::qWaitForWindowShown(&menu);
QTest::keyClick(static_cast<QWidget *>(0), Qt::Key_Escape);
QVERIFY(!menu.isVisible());
QTRY_VERIFY(menubar.hasFocus());
QCOMPARE(menubar.activeAction(), first);
+ QTest::qWait(200);
QTest::keyClick(static_cast<QWidget *>(0), Qt::Key_Escape);
QVERIFY(!menubar.activeAction());
QTest::keyClick(static_cast<QWidget *>(0), Qt::Key_Escape); //now the action should be triggered