aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/qquickwindow
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/quick/qquickwindow')
-rw-r--r--tests/auto/quick/qquickwindow/data/active.qml29
-rw-r--r--tests/auto/quick/qquickwindow/data/ucantclosethis.qml32
-rw-r--r--tests/auto/quick/qquickwindow/qquickwindow.pro1
-rw-r--r--tests/auto/quick/qquickwindow/tst_qquickwindow.cpp91
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"