From 3975ca99206de668ddc946bc31222e3caa01c2db Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Thu, 18 Apr 2013 09:36:28 +0200 Subject: [PATCH] Added doc and test for active and requestActivate in QQuickWindow Autotest is included. Change-Id: I0f8614b502f1e51cab5612fee283c929e078108b Reviewed-by: Gunnar Sletta Reviewed-by: Liang Qi --- src/quick/items/qquickwindow.cpp | 16 +++++++ tests/auto/quick/qquickwindow/data/active.qml | 29 ++++++++++++ tests/auto/quick/qquickwindow/qquickwindow.pro | 1 + tests/auto/quick/qquickwindow/tst_qquickwindow.cpp | 52 ++++++++++++++++++++++ 4 files changed, 98 insertions(+) create mode 100644 tests/auto/quick/qquickwindow/data/active.qml diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index a4dff96..2640e66 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -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 index 0000000..af0b7ed --- /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/qquickwindow.pro b/tests/auto/quick/qquickwindow/qquickwindow.pro index b1fc5cd..917e3a5 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 v8-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 dbf0086..c3308bf 100644 --- a/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp +++ b/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp @@ -48,6 +48,7 @@ #include #include #include "../../shared/util.h" +#include "../shared/visualtestutil.h" #include #include #include @@ -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(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(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" -- 2.7.4