aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/applicationwindow/tst_applicationwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/applicationwindow/tst_applicationwindow.cpp')
-rw-r--r--tests/auto/applicationwindow/tst_applicationwindow.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/tests/auto/applicationwindow/tst_applicationwindow.cpp b/tests/auto/applicationwindow/tst_applicationwindow.cpp
index 954f80d8..bec8aa81 100644
--- a/tests/auto/applicationwindow/tst_applicationwindow.cpp
+++ b/tests/auto/applicationwindow/tst_applicationwindow.cpp
@@ -71,6 +71,7 @@ private slots:
void locale();
void activeFocusControl_data();
void activeFocusControl();
+ void focusAfterPopupClosed();
};
void tst_applicationwindow::qmlCreation()
@@ -639,6 +640,50 @@ void tst_applicationwindow::activeFocusControl()
QCOMPARE(window->activeFocusControl(), activeFocusControl);
}
+void tst_applicationwindow::focusAfterPopupClosed()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadUrl(testFileUrl("focusAfterPopupClosed.qml"));
+ QScopedPointer<QQuickWindow> window(qobject_cast<QQuickWindow*>(component.create()));
+ QVERIFY(window);
+
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(window.data()));
+ QVERIFY(QGuiApplication::focusWindow() == window.data());
+
+ QQuickItem* contentItem = window->contentItem();
+ QVERIFY(contentItem);
+ QVERIFY(contentItem->hasActiveFocus());
+
+ QQuickItem* focusScope = window->property("focusScope").value<QQuickItem*>();
+ QVERIFY(focusScope);
+ QVERIFY(focusScope->hasActiveFocus());
+
+ QSignalSpy spy(window.data(), SIGNAL(focusScopeKeyPressed()));
+ QTest::keyClick(window.data(), Qt::Key_Space);
+ QCOMPARE(spy.count(), 1);
+
+ // Open the menu.
+ QQuickItem* toolButton = window->property("toolButton").value<QQuickItem*>();
+ QVERIFY(toolButton);
+ QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier,
+ toolButton->mapFromScene(QPointF(toolButton->width() / 2, toolButton->height() / 2)).toPoint());
+ QVERIFY(!focusScope->hasActiveFocus());
+
+ // The FocusScope shouldn't receive any key events while the menu is open.
+ QTest::keyClick(window.data(), Qt::Key_Space);
+ QCOMPARE(spy.count(), 1);
+
+ // Close the menu. The FocusScope should regain focus.
+ QTest::keyClick(window.data(), Qt::Key_Escape);
+ QVERIFY(focusScope->hasActiveFocus());
+
+ QTest::keyClick(window.data(), Qt::Key_Space);
+ QCOMPARE(spy.count(), 2);
+}
+
QTEST_MAIN(tst_applicationwindow)
#include "tst_applicationwindow.moc"