Do not list desktop widgets and desktop screen widgets as top-levels.

Change-Id: Iea4905d802213848594d2ad0266696e5edb884f8
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
Reviewed-by: Oliver Wolff <oliver.wolff@digia.com>
bb10
Friedemann Kleint 2013-03-12 09:50:11 +01:00 committed by The Qt Project
parent 79d4f5b628
commit b047f48612
3 changed files with 19 additions and 3 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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"