diff options
Diffstat (limited to 'tests/auto/applicationwindow')
-rw-r--r-- | tests/auto/applicationwindow/data/focusAfterPopupClosed.qml | 15 | ||||
-rw-r--r-- | tests/auto/applicationwindow/tst_applicationwindow.cpp | 44 |
2 files changed, 55 insertions, 4 deletions
diff --git a/tests/auto/applicationwindow/data/focusAfterPopupClosed.qml b/tests/auto/applicationwindow/data/focusAfterPopupClosed.qml index 015e03bc..f0499a3a 100644 --- a/tests/auto/applicationwindow/data/focusAfterPopupClosed.qml +++ b/tests/auto/applicationwindow/data/focusAfterPopupClosed.qml @@ -57,9 +57,12 @@ ApplicationWindow { visible: true signal focusScopeKeyPressed + signal focusPopupKeyPressed + property alias fileMenu: fileMenu property alias toolButton: toolButton property alias focusScope: focusScope + property alias focusPopup: focusPopup header: ToolBar { ToolButton { @@ -92,5 +95,17 @@ ApplicationWindow { Keys.onSpacePressed: focusScopeKeyPressed() } + + Popup { + id: focusPopup + focus: true + width: parent.width + height: parent.height + + Item { + focus: true + Keys.onSpacePressed: focusPopupKeyPressed() + } + } } diff --git a/tests/auto/applicationwindow/tst_applicationwindow.cpp b/tests/auto/applicationwindow/tst_applicationwindow.cpp index 61f84673..f35d9b7d 100644 --- a/tests/auto/applicationwindow/tst_applicationwindow.cpp +++ b/tests/auto/applicationwindow/tst_applicationwindow.cpp @@ -46,6 +46,8 @@ #include <QtQuickTemplates2/private/qquickoverlay_p.h> #include <QtQuickTemplates2/private/qquickcontrol_p.h> #include <QtQuickTemplates2/private/qquicklabel_p.h> +#include <QtQuickTemplates2/private/qquickmenu_p.h> +#include <QtQuickTemplates2/private/qquickpopup_p.h> #include <QtQuickTemplates2/private/qquicktextarea_p.h> #include <QtQuickTemplates2/private/qquicktextfield_p.h> #include <QtQuickControls2/private/qquickproxytheme_p.h> @@ -664,9 +666,9 @@ void tst_applicationwindow::focusAfterPopupClosed() QVERIFY(focusScope); QVERIFY(focusScope->hasActiveFocus()); - QSignalSpy spy(window.data(), SIGNAL(focusScopeKeyPressed())); + QSignalSpy focusScopeSpy(window.data(), SIGNAL(focusScopeKeyPressed())); QTest::keyClick(window.data(), Qt::Key_Space); - QCOMPARE(spy.count(), 1); + QCOMPARE(focusScopeSpy.count(), 1); // Open the menu. QQuickItem* toolButton = window->property("toolButton").value<QQuickItem*>(); @@ -677,14 +679,48 @@ void tst_applicationwindow::focusAfterPopupClosed() // The FocusScope shouldn't receive any key events while the menu is open. QTest::keyClick(window.data(), Qt::Key_Space); - QCOMPARE(spy.count(), 1); + QCOMPARE(focusScopeSpy.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); + QCOMPARE(focusScopeSpy.count(), 2); + + QQuickPopup *focusPopup = window->property("focusPopup").value<QQuickPopup*>(); + QVERIFY(focusPopup); + QVERIFY(!focusPopup->hasActiveFocus()); + + focusPopup->open(); + QVERIFY(focusPopup->isVisible()); + + QSignalSpy focusPopupSpy(window.data(), SIGNAL(focusPopupKeyPressed())); + QTest::keyClick(window.data(), Qt::Key_Space); + QCOMPARE(focusPopupSpy.count(), 1); + + QQuickMenu *fileMenu = window->property("fileMenu").value<QQuickMenu*>(); + QVERIFY(fileMenu); + fileMenu->open(); + QVERIFY(fileMenu->isVisible()); + + // The Popup shouldn't receive any key events while the menu is open. + QTest::keyClick(window.data(), Qt::Key_Space); + QCOMPARE(focusPopupSpy.count(), 1); + + // Close the menu. The Popup should regain focus. + QTest::keyClick(window.data(), Qt::Key_Escape); + QVERIFY(focusPopup->hasActiveFocus()); + + QTest::keyClick(window.data(), Qt::Key_Space); + QCOMPARE(focusPopupSpy.count(), 2); + + // Close the popup. The FocusScope should regain focus. + QTest::keyClick(window.data(), Qt::Key_Escape); + QVERIFY(focusScope->hasActiveFocus()); + + QTest::keyClick(window.data(), Qt::Key_Space); + QCOMPARE(focusScopeSpy.count(), 3); } void tst_applicationwindow::clearFocusOnDestruction() |