From a6bdcc1bd1818260bd649e0643c7ca7b3cc5ca6b Mon Sep 17 00:00:00 2001 From: Yoann Lopes Date: Thu, 29 Aug 2013 17:18:06 +0200 Subject: Expose "Qt.application.state". This deprecates Qt.application.active. The new property can indicate more states than just active or inactive (currently Suspended and Hidden exists in addition to the aforementioned). Change-Id: I8d5bf72f89a357c13daf1625c20e8e7311dac013 Reviewed-by: Friedemann Kleint Reviewed-by: Alan Alpert --- .../qquickapplication/tst_qquickapplication.cpp | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) (limited to 'tests/auto/quick/qquickapplication') diff --git a/tests/auto/quick/qquickapplication/tst_qquickapplication.cpp b/tests/auto/quick/qquickapplication/tst_qquickapplication.cpp index b8986fbf85..ef27445920 100644 --- a/tests/auto/quick/qquickapplication/tst_qquickapplication.cpp +++ b/tests/auto/quick/qquickapplication/tst_qquickapplication.cpp @@ -46,6 +46,8 @@ #include #include #include +#include +#include class tst_qquickapplication : public QObject { @@ -55,6 +57,7 @@ public: private slots: void active(); + void state(); void layoutDirection(); void inputMethod(); @@ -103,6 +106,69 @@ void tst_qquickapplication::active() QVERIFY(!item->property("active2").toBool()); } +void tst_qquickapplication::state() +{ + QQmlComponent component(&engine); + component.setData("import QtQuick 2.0; " + "Item { " + " property int state: Qt.application.state; " + " property int state2: Qt.ApplicationInactive; " + " Connections { " + " target: Qt.application; " + " onStateChanged: state2 = Qt.application.state; " + " } " + "}", QUrl::fromLocalFile("")); + QQuickItem *item = qobject_cast(component.create()); + QVERIFY(item); + QQuickWindow window; + item->setParentItem(window.contentItem()); + + // initial state should be ApplicationInactive + QCOMPARE(Qt::ApplicationState(item->property("state").toInt()), Qt::ApplicationInactive); + QCOMPARE(Qt::ApplicationState(item->property("state2").toInt()), Qt::ApplicationInactive); + + // If the platform plugin has the ApplicationState capability, state changes originate from it + // as a result of a system event. We therefore have to simulate these events here. + if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::ApplicationState)) { + + QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationActive); + QTest::waitForEvents(); + QCOMPARE(Qt::ApplicationState(item->property("state").toInt()), Qt::ApplicationActive); + QCOMPARE(Qt::ApplicationState(item->property("state2").toInt()), Qt::ApplicationActive); + + QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationInactive); + QTest::waitForEvents(); + QCOMPARE(Qt::ApplicationState(item->property("state").toInt()), Qt::ApplicationInactive); + QCOMPARE(Qt::ApplicationState(item->property("state2").toInt()), Qt::ApplicationInactive); + + QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationSuspended); + QTest::waitForEvents(); + QCOMPARE(Qt::ApplicationState(item->property("state").toInt()), Qt::ApplicationSuspended); + QCOMPARE(Qt::ApplicationState(item->property("state2").toInt()), Qt::ApplicationSuspended); + + QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationHidden); + QTest::waitForEvents(); + QCOMPARE(Qt::ApplicationState(item->property("state").toInt()), Qt::ApplicationHidden); + QCOMPARE(Qt::ApplicationState(item->property("state2").toInt()), Qt::ApplicationHidden); + + } else { + // Otherwise, the application can only be in two states, Active and Inactive. These are + // triggered by window activation. + window.show(); + window.requestActivate(); + QTest::qWaitForWindowActive(&window); + QVERIFY(QGuiApplication::focusWindow() == &window); + QCOMPARE(Qt::ApplicationState(item->property("state").toInt()), Qt::ApplicationActive); + QCOMPARE(Qt::ApplicationState(item->property("state2").toInt()), Qt::ApplicationActive); + + // not active again + QWindowSystemInterface::handleWindowActivated(0); + QTRY_VERIFY(QGuiApplication::focusWindow() != &window); + QCOMPARE(Qt::ApplicationState(item->property("state").toInt()), Qt::ApplicationInactive); + QCOMPARE(Qt::ApplicationState(item->property("state2").toInt()), Qt::ApplicationInactive); + } +} + void tst_qquickapplication::layoutDirection() { -- cgit v1.2.3