diff options
-rw-r--r-- | src/gui/kernel/qguiapplication.cpp | 2 | ||||
-rw-r--r-- | src/widgets/kernel/qdesktopwidget_qpa_p.h | 3 | ||||
-rw-r--r-- | tests/auto/widgets/kernel/qdesktopwidget/tst_qdesktopwidget.cpp | 17 |
3 files changed, 19 insertions, 3 deletions
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index a00eeaa5e9..7d95a75f84 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -666,7 +666,7 @@ QWindowList QGuiApplication::topLevelWindows() const QWindowList &list = QGuiApplicationPrivate::window_list; QWindowList topLevelWindows; for (int i = 0; i < list.size(); i++) { - if (!list.at(i)->parent()) { + if (!list.at(i)->parent() && list.at(i)->type() != Qt::Desktop) { // Top windows of embedded QAxServers do not have QWindow parents, // but they are not true top level windows, so do not include them. const bool embedded = list.at(i)->handle() && list.at(i)->handle()->isEmbedded(0); diff --git a/src/widgets/kernel/qdesktopwidget_qpa_p.h b/src/widgets/kernel/qdesktopwidget_qpa_p.h index 9f0089616b..3e42f98937 100644 --- a/src/widgets/kernel/qdesktopwidget_qpa_p.h +++ b/src/widgets/kernel/qdesktopwidget_qpa_p.h @@ -61,9 +61,8 @@ QT_BEGIN_NAMESPACE class QDesktopScreenWidget : public QWidget { Q_OBJECT public: - QDesktopScreenWidget(int screenNumber = -1) + QDesktopScreenWidget(int screenNumber = -1) : QWidget(0, Qt::Desktop) { - setWindowFlags(Qt::Desktop); setVisible(false); QTLWExtra *topData = d_func()->topData(); topData->screenIndex = screenNumber; diff --git a/tests/auto/widgets/kernel/qdesktopwidget/tst_qdesktopwidget.cpp b/tests/auto/widgets/kernel/qdesktopwidget/tst_qdesktopwidget.cpp index 63ffc13c68..4efe8c4273 100644 --- a/tests/auto/widgets/kernel/qdesktopwidget/tst_qdesktopwidget.cpp +++ b/tests/auto/widgets/kernel/qdesktopwidget/tst_qdesktopwidget.cpp @@ -42,6 +42,7 @@ #include <QtTest/QtTest> #include <QtWidgets/QDesktopWidget> +#include <QtGui/QWindow> #include <QDebug> class tst_QDesktopWidget : public QObject @@ -63,6 +64,7 @@ private slots: void screenNumberForQPoint(); void availableGeometry(); void screenGeometry(); + void topLevels(); }; tst_QDesktopWidget::tst_QDesktopWidget() @@ -177,6 +179,21 @@ void tst_QDesktopWidget::screenGeometry() } } +void tst_QDesktopWidget::topLevels() +{ + // Desktop widgets/windows should not be listed as top-levels. + int topLevelDesktopWidgets = 0; + int topLevelDesktopWindows = 0; + foreach (const QWidget *w, QApplication::topLevelWidgets()) + if (w->windowType() == Qt::Desktop) + topLevelDesktopWidgets++; + foreach (const QWindow *w, QGuiApplication::topLevelWindows()) + if (w->type() == Qt::Desktop) + topLevelDesktopWindows++; + QCOMPARE(topLevelDesktopWidgets, 0); + QCOMPARE(topLevelDesktopWindows, 0); +} + QTEST_MAIN(tst_QDesktopWidget) #include "tst_qdesktopwidget.moc" |