diff options
Diffstat (limited to 'tests/auto/quick/qquickwindow')
-rw-r--r-- | tests/auto/quick/qquickwindow/data/active.qml | 29 | ||||
-rw-r--r-- | tests/auto/quick/qquickwindow/data/ucantclosethis.qml | 32 | ||||
-rw-r--r-- | tests/auto/quick/qquickwindow/qquickwindow.pro | 1 | ||||
-rw-r--r-- | tests/auto/quick/qquickwindow/tst_qquickwindow.cpp | 91 |
4 files changed, 151 insertions, 2 deletions
diff --git a/tests/auto/quick/qquickwindow/data/active.qml b/tests/auto/quick/qquickwindow/data/active.qml new file mode 100644 index 0000000000..af0b7edeb2 --- /dev/null +++ b/tests/auto/quick/qquickwindow/data/active.qml @@ -0,0 +1,29 @@ +import QtQuick 2.1 +import QtQuick.Window 2.1 + +Window { + id: window1; + objectName: "window1"; + color: "#00FF00"; + width: 100; height: 100; + Item { + objectName: "item1" + width: 100; height: 100; + MouseArea { + objectName: "mousearea" + anchors.fill: parent; + onPressed: window2.requestActivate(); + } + Component.onCompleted: window2.show(); + } + + Window { + id: window2; + objectName: "window2"; + color: "#FF0000"; + width: 100; height: 100; + Item { + width: 100; height: 100; + } + } +} diff --git a/tests/auto/quick/qquickwindow/data/ucantclosethis.qml b/tests/auto/quick/qquickwindow/data/ucantclosethis.qml new file mode 100644 index 0000000000..aa68cf5105 --- /dev/null +++ b/tests/auto/quick/qquickwindow/data/ucantclosethis.qml @@ -0,0 +1,32 @@ +import QtQuick 2.1 +import QtQuick.Window 2.1 + +Window { + width: 240 + height: 75 + title: "Hammer sez" + color: "#e0c31e" + property bool canCloseThis: false; + Rectangle { + color: "#14148c" + width: parent.width * 0.85 + height: parent.height * 0.7 + anchors.horizontalCenter: parent.horizontalCenter + Text { + id: text + anchors.centerIn: parent + color: "white" + textFormat: Text.StyledText + text: "whoa-oa-oa-oh<br/>U can't <font color='#b40000' size='+1'>close</font> this" + } + } + onClosing: { + if (canCloseThis) { + text.text = "uncle! I give up" + // the event is accepted by default + } else { + close.accepted = false + text.text = "...but you still can't close this" + } + } +} diff --git a/tests/auto/quick/qquickwindow/qquickwindow.pro b/tests/auto/quick/qquickwindow/qquickwindow.pro index 05b58fcb4c..46cf96423f 100644 --- a/tests/auto/quick/qquickwindow/qquickwindow.pro +++ b/tests/auto/quick/qquickwindow/qquickwindow.pro @@ -11,6 +11,7 @@ QT += core-private gui-private qml-private quick-private testlib TESTDATA = data/* OTHER_FILES += \ + data/active.qml \ data/AnimationsWhileHidden.qml \ data/Headless.qml \ data/showHideAnimate.qml diff --git a/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp b/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp index 2d3c8f7ca7..e2bb6b431c 100644 --- a/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp +++ b/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp @@ -48,6 +48,7 @@ #include <QtQml/QQmlComponent> #include <QtQuick/private/qquickrectangle_p.h> #include "../../shared/util.h" +#include "../shared/visualtestutil.h" #include <QSignalSpy> #include <qpa/qwindowsysteminterface.h> #include <private/qquickwindow_p.h> @@ -304,6 +305,7 @@ private slots: void qmlCreation(); void clearColor(); + void grab_data(); void grab(); void multipleWindows(); @@ -322,6 +324,10 @@ private slots: void testExpose(); + void requestActivate(); + + void blockClosing(); + #ifndef QT_NO_CURSOR void cursor(); #endif @@ -929,15 +935,28 @@ void tst_qquickwindow::clearColor() QCOMPARE(window->color(), QColor(Qt::blue)); } +void tst_qquickwindow::grab_data() +{ + QTest::addColumn<bool>("visible"); + QTest::newRow("visible") << true; + QTest::newRow("invisible") << false; +} + void tst_qquickwindow::grab() { + QFETCH(bool, visible); + QQuickWindow window; window.setColor(Qt::red); window.resize(250, 250); - window.show(); - QVERIFY(QTest::qWaitForWindowExposed(&window)); + if (visible) { + window.show(); + QVERIFY(QTest::qWaitForWindowExposed(&window)); + } else { + window.create(); + } QImage content = window.grabWindow(); QCOMPARE(content.width(), window.width()); @@ -1400,6 +1419,74 @@ void tst_qquickwindow::testExpose() QTRY_COMPARE(swapSpy.size(), 1); } +void tst_qquickwindow::requestActivate() +{ + QQmlEngine engine; + QQmlComponent component(&engine); + component.loadUrl(testFileUrl("active.qml")); + QQuickWindow* window1 = qobject_cast<QQuickWindow *>(component.create()); + QVERIFY(window1); + + QWindowList windows = QGuiApplication::topLevelWindows(); + QVERIFY(windows.size() == 2); + + for (int i = 0; i < windows.size(); ++i) { + if (windows.at(i)->objectName() == window1->objectName()) { + windows.removeAt(i); + break; + } + } + QVERIFY(windows.size() == 1); + QVERIFY(windows.at(0)->objectName() == "window2"); + + window1->show(); + window1->requestActivate(); + + QTRY_VERIFY(QGuiApplication::focusWindow() == window1); + QVERIFY(window1->isActive() == true); + + QQuickItem *item = QQuickVisualTestUtil::findItem<QQuickItem>(window1->contentItem(), "item1"); + QVERIFY(item); + + //copied from src/qmltest/quicktestevent.cpp + QPoint pos = item->mapToScene(QPointF(item->width()/2, item->height()/2)).toPoint(); + + QMouseEvent me(QEvent::MouseButtonPress, pos, window1->mapToGlobal(pos), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); + QSpontaneKeyEvent::setSpontaneous(&me); + if (!qApp->notify(window1, &me)) { + QString warning = QString::fromLatin1("Mouse event MousePress not accepted by receiving window"); + QWARN(warning.toLatin1().data()); + } + me = QMouseEvent(QEvent::MouseButtonPress, pos, window1->mapToGlobal(pos), Qt::LeftButton, 0, Qt::NoModifier); + QSpontaneKeyEvent::setSpontaneous(&me); + if (!qApp->notify(window1, &me)) { + QString warning = QString::fromLatin1("Mouse event MouseRelease not accepted by receiving window"); + QWARN(warning.toLatin1().data()); + } + + QTRY_VERIFY(QGuiApplication::focusWindow() == windows.at(0)); + QVERIFY(windows.at(0)->isActive()); +} + +void tst_qquickwindow::blockClosing() +{ + QQmlEngine engine; + QQmlComponent component(&engine); + component.loadUrl(testFileUrl("ucantclosethis.qml")); + QQuickWindow* window = qobject_cast<QQuickWindow *>(component.create()); + QVERIFY(window); + window->show(); + QTest::qWaitForWindowExposed(window); + QVERIFY(window->isVisible()); + QWindowSystemInterface::handleCloseEvent(window); + QVERIFY(window->isVisible()); + QWindowSystemInterface::handleCloseEvent(window); + QVERIFY(window->isVisible()); + window->setProperty("canCloseThis", true); + QWindowSystemInterface::handleCloseEvent(window); + QTRY_VERIFY(!window->isVisible()); +} + QTEST_MAIN(tst_qquickwindow) #include "tst_qquickwindow.moc" |