Added doc and test for active and requestActivate in QQuickWindow
authorLiang Qi <liang.qi@digia.com>
Thu, 18 Apr 2013 07:36:28 +0000 (09:36 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Tue, 30 Apr 2013 13:15:30 +0000 (15:15 +0200)
Autotest is included.

Change-Id: I0f8614b502f1e51cab5612fee283c929e078108b
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
Reviewed-by: Liang Qi <liang.qi@digia.com>
src/quick/items/qquickwindow.cpp
tests/auto/quick/qquickwindow/data/active.qml [new file with mode: 0644]
tests/auto/quick/qquickwindow/qquickwindow.pro
tests/auto/quick/qquickwindow/tst_qquickwindow.cpp

index a4dff96..2640e66 100644 (file)
@@ -3082,6 +3082,22 @@ QColor QQuickWindow::color() const
     no item with active focus.
  */
 
+/*!
+    \qmlproperty QtQuick.Window2::Window::active
+    \since Qt 5.1
+
+    The active status of the window.
+
+    \sa requestActivate()
+ */
+
+/*!
+    \qmlmethod QtQuick2::Window::requestActivate()
+    \since QtQuick 2.1
+
+    Requests the window to be activated, i.e. receive keyboard focus.
+ */
+
 #include "moc_qquickwindow.cpp"
 
 QT_END_NAMESPACE
diff --git a/tests/auto/quick/qquickwindow/data/active.qml b/tests/auto/quick/qquickwindow/data/active.qml
new file mode 100644 (file)
index 0000000..af0b7ed
--- /dev/null
@@ -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;
+        }
+    }
+}
index b1fc5cd..917e3a5 100644 (file)
@@ -11,6 +11,7 @@ QT += core-private gui-private qml-private quick-private v8-private testlib
 TESTDATA = data/*
 
 OTHER_FILES += \
+    data/active.qml \
     data/AnimationsWhileHidden.qml \
     data/Headless.qml \
     data/showHideAnimate.qml
index dbf0086..c3308bf 100644 (file)
@@ -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>
@@ -323,6 +324,8 @@ private slots:
 
     void testExpose();
 
+    void requestActivate();
+
 #ifndef QT_NO_CURSOR
     void cursor();
 #endif
@@ -1414,6 +1417,55 @@ 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());
+}
+
 QTEST_MAIN(tst_qquickwindow)
 
 #include "tst_qquickwindow.moc"