summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/kernel/qguiapplication.cpp29
-rw-r--r--src/gui/kernel/qguiapplication.h1
-rw-r--r--tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp36
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"