diff options
-rw-r--r-- | src/gui/kernel/qguiapplication.cpp | 29 | ||||
-rw-r--r-- | src/gui/kernel/qguiapplication.h | 1 | ||||
-rw-r--r-- | tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp | 36 |
3 files changed, 65 insertions, 1 deletions
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index cc6ef36963..ea562c75b8 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -214,11 +214,38 @@ QObject *QGuiApplication::focusObject() return 0; } -QWindowList QGuiApplication::topLevelWindows() +/*! + \fn QGuiApplication::allWindows() + + Returns a list of all the windows in the application. + + The list is empty if there are no windows. + + \sa topLevelWindows() + */ +QWindowList QGuiApplication::allWindows() { return QGuiApplicationPrivate::window_list; } +/*! + \fn QGuiApplication::topLevelWindows() + + Returns a list of the top-level windows in the application. + + \sa allWindows() + */ +QWindowList QGuiApplication::topLevelWindows() +{ + const QWindowList &list = QGuiApplicationPrivate::window_list; + QWindowList topLevelWindows; + for (int i = 0; i < list.size(); i++) { + if (!list.at(i)->parent()) + topLevelWindows.prepend(list.at(i)); + } + return topLevelWindows; +} + QScreen *QGuiApplication::primaryScreen() { if (QGuiApplicationPrivate::screen_list.isEmpty()) diff --git a/src/gui/kernel/qguiapplication.h b/src/gui/kernel/qguiapplication.h index 90061ed338..9bf6a69c45 100644 --- a/src/gui/kernel/qguiapplication.h +++ b/src/gui/kernel/qguiapplication.h @@ -81,6 +81,7 @@ public: QGuiApplication(int &argc, char **argv, int = ApplicationFlags); virtual ~QGuiApplication(); + static QWindowList allWindows(); static QWindowList topLevelWindows(); static QWindow *topLevelAt(const QPoint &pos); diff --git a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp index 4ea415b826..2fd875b7f4 100644 --- a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp +++ b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp @@ -42,6 +42,7 @@ #include <QtTest/QtTest> #include <QtGui/QGuiApplication> +#include <QtGui/QWindow> #include <QDebug> class tst_QGuiApplication: public QObject @@ -50,6 +51,8 @@ class tst_QGuiApplication: public QObject private slots: void focusObject(); + void allWindows(); + void topLevelWindows(); }; class DummyWindow : public QWindow @@ -115,6 +118,39 @@ void tst_QGuiApplication::focusObject() QCOMPARE(app.focusObject(), &obj3); } +void tst_QGuiApplication::allWindows() +{ + int argc = 0; + QGuiApplication app(argc, 0); + QWindow *window1 = new QWindow; + QWindow *window2 = new QWindow(window1); + QVERIFY(app.allWindows().contains(window1)); + QVERIFY(app.allWindows().contains(window2)); + QCOMPARE(app.allWindows().count(), 2); + delete window1; + window1 = 0; + window2 = 0; + QVERIFY(!app.allWindows().contains(window2)); + QVERIFY(!app.allWindows().contains(window1)); + QCOMPARE(app.allWindows().count(), 0); +} + +void tst_QGuiApplication::topLevelWindows() +{ + int argc = 0; + QGuiApplication app(argc, 0); + QWindow *window1 = new QWindow; + QWindow *window2 = new QWindow(window1); + QVERIFY(app.topLevelWindows().contains(window1)); + QVERIFY(!app.topLevelWindows().contains(window2)); + QCOMPARE(app.topLevelWindows().count(), 1); + delete window1; + window1 = 0; + window2 = 0; + QVERIFY(!app.topLevelWindows().contains(window2)); + QVERIFY(!app.topLevelWindows().contains(window1)); + QCOMPARE(app.topLevelWindows().count(), 0); +} QTEST_APPLESS_MAIN(tst_QGuiApplication) #include "tst_qguiapplication.moc" |