summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/opengl/hellogl2/main.cpp1
-rw-r--r--examples/opengl/hellogl2/window.cpp1
-rw-r--r--examples/widgets/painting/deform/pathdeform.cpp1
-rw-r--r--examples/widgets/widgets/charactermap/mainwindow.cpp1
-rw-r--r--src/gui/kernel/qplatformscreen.cpp2
-rw-r--r--src/plugins/platforms/android/qandroidplatformintegration.h1
-rw-r--r--src/plugins/platforms/windows/qwindowsscreen.cpp2
-rw-r--r--src/tools/uic/qclass_lib_map.h1
-rw-r--r--src/widgets/.prev_CMakeLists.txt2
-rw-r--r--src/widgets/CMakeLists.txt2
-rw-r--r--src/widgets/dialogs/qcolordialog.cpp3
-rw-r--r--src/widgets/dialogs/qdialog.cpp1
-rw-r--r--src/widgets/dialogs/qmessagebox.cpp1
-rw-r--r--src/widgets/dialogs/qwizard.cpp1
-rw-r--r--src/widgets/dialogs/qwizard_win.cpp1
-rw-r--r--src/widgets/graphicsview/qgraphicsscene.cpp1
-rw-r--r--src/widgets/graphicsview/qgraphicsview.cpp2
-rw-r--r--src/widgets/kernel/kernel.pri1
-rw-r--r--src/widgets/kernel/qapplication.cpp22
-rw-r--r--src/widgets/kernel/qapplication.h3
-rw-r--r--src/widgets/kernel/qdesktopwidget.cpp182
-rw-r--r--src/widgets/kernel/qdesktopwidget.h72
-rw-r--r--src/widgets/kernel/qdesktopwidget_p.h100
-rw-r--r--src/widgets/kernel/qtooltip.cpp32
-rw-r--r--src/widgets/kernel/qwhatsthis.cpp1
-rw-r--r--src/widgets/kernel/qwidget.cpp45
-rw-r--r--src/widgets/kernel/qwidget_p.h36
-rw-r--r--src/widgets/util/qcompleter.cpp3
-rw-r--r--src/widgets/util/qscroller.cpp1
-rw-r--r--src/widgets/util/qsystemtrayicon.cpp5
-rw-r--r--src/widgets/widgets/qcombobox.cpp10
-rw-r--r--src/widgets/widgets/qcombobox_p.h2
-rw-r--r--src/widgets/widgets/qdatetimeedit.cpp1
-rw-r--r--src/widgets/widgets/qdockarealayout.cpp3
-rw-r--r--src/widgets/widgets/qdockwidget.cpp1
-rw-r--r--src/widgets/widgets/qeffects.cpp14
-rw-r--r--src/widgets/widgets/qfontcombobox.cpp3
-rw-r--r--src/widgets/widgets/qmdiarea.cpp3
-rw-r--r--src/widgets/widgets/qmenu.cpp14
-rw-r--r--src/widgets/widgets/qmenu_p.h2
-rw-r--r--src/widgets/widgets/qmenubar.cpp3
-rw-r--r--src/widgets/widgets/qpushbutton.cpp3
-rw-r--r--src/widgets/widgets/qsizegrip.cpp3
-rw-r--r--src/widgets/widgets/qsplashscreen.cpp14
-rw-r--r--src/widgets/widgets/qtabwidget.cpp1
-rw-r--r--src/widgets/widgets/qtextbrowser.cpp1
-rw-r--r--src/widgets/widgets/qtoolbutton.cpp1
-rw-r--r--src/widgets/widgets/qwidgetresizehandler.cpp3
-rw-r--r--src/widgets/widgets/qwidgettextcontrol.cpp6
-rw-r--r--tests/auto/gui/image/qpixmap/tst_qpixmap.cpp1
-rw-r--r--tests/auto/other/languagechange/tst_languagechange.cpp1
-rw-r--r--tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp1
-rw-r--r--tests/auto/widgets/effects/qgraphicseffect/tst_qgraphicseffect.cpp1
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp1
-rw-r--r--tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp1
-rw-r--r--tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp1
-rw-r--r--tests/auto/widgets/kernel/qdesktopwidget/.gitignore1
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp3
-rw-r--r--tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp1
-rw-r--r--tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp1
-rw-r--r--tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp5
-rw-r--r--tests/benchmarks/gui/painting/qtbench/benchmarktests.h1
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp3
-rw-r--r--tests/manual/diaglib/qwidgetdump.cpp2
-rw-r--r--tests/manual/dialogs/printdialogpanel.cpp1
-rw-r--r--tests/manual/foreignwindows/main.cpp1
-rw-r--r--tests/manual/qcursor/qcursorhighdpi/main.cpp10
-rw-r--r--tests/manual/qdesktopwidget/CMakeLists.txt17
-rw-r--r--tests/manual/qdesktopwidget/main.cpp212
-rw-r--r--tests/manual/qdesktopwidget/qdesktopwidget.pro3
-rw-r--r--tests/manual/qscreen/main.cpp14
-rw-r--r--tests/manual/qtabbar/main.cpp1
72 files changed, 219 insertions, 679 deletions
diff --git a/examples/opengl/hellogl2/main.cpp b/examples/opengl/hellogl2/main.cpp
index b52a5a37d3..e0cffaf4c2 100644
--- a/examples/opengl/hellogl2/main.cpp
+++ b/examples/opengl/hellogl2/main.cpp
@@ -49,7 +49,6 @@
****************************************************************************/
#include <QApplication>
-#include <QDesktopWidget>
#include <QSurfaceFormat>
#include <QCommandLineParser>
#include <QCommandLineOption>
diff --git a/examples/opengl/hellogl2/window.cpp b/examples/opengl/hellogl2/window.cpp
index 5534f2edea..169f5e59c5 100644
--- a/examples/opengl/hellogl2/window.cpp
+++ b/examples/opengl/hellogl2/window.cpp
@@ -56,7 +56,6 @@
#include <QHBoxLayout>
#include <QKeyEvent>
#include <QPushButton>
-#include <QDesktopWidget>
#include <QApplication>
#include <QMessageBox>
diff --git a/examples/widgets/painting/deform/pathdeform.cpp b/examples/widgets/painting/deform/pathdeform.cpp
index 9ddc6ea12b..acf0191260 100644
--- a/examples/widgets/painting/deform/pathdeform.cpp
+++ b/examples/widgets/painting/deform/pathdeform.cpp
@@ -60,7 +60,6 @@
#include <QPainter>
#include <QSlider>
#include <QLabel>
-#include <QDesktopWidget>
#include <qmath.h>
PathDeformControls::PathDeformControls(QWidget *parent,
diff --git a/examples/widgets/widgets/charactermap/mainwindow.cpp b/examples/widgets/widgets/charactermap/mainwindow.cpp
index 47f7001a34..1bab0d6082 100644
--- a/examples/widgets/widgets/charactermap/mainwindow.cpp
+++ b/examples/widgets/widgets/charactermap/mainwindow.cpp
@@ -55,7 +55,6 @@
#include <QBoxLayout>
#include <QCheckBox>
#include <QClipboard>
-#include <QDesktopWidget>
#include <QDialog>
#include <QDialogButtonBox>
#include <QFontComboBox>
diff --git a/src/gui/kernel/qplatformscreen.cpp b/src/gui/kernel/qplatformscreen.cpp
index 25d2be4b51..e2890eda1e 100644
--- a/src/gui/kernel/qplatformscreen.cpp
+++ b/src/gui/kernel/qplatformscreen.cpp
@@ -344,8 +344,6 @@ QString QPlatformScreen::serialNumber() const
physicalSize() function, since this is the function it uses to calculate the dpi to use when
converting point sizes to pixels sizes. However, this is unfortunate on some systems, as the
native system fakes its dpi size.
-
- QPlatformScreen is also used by the public api QDesktopWidget for information about the desktop.
*/
/*! \fn QRect QPlatformScreen::geometry() const = 0
diff --git a/src/plugins/platforms/android/qandroidplatformintegration.h b/src/plugins/platforms/android/qandroidplatformintegration.h
index 67d9d37e5b..fab2083338 100644
--- a/src/plugins/platforms/android/qandroidplatformintegration.h
+++ b/src/plugins/platforms/android/qandroidplatformintegration.h
@@ -56,7 +56,6 @@
QT_BEGIN_NAMESPACE
-class QDesktopWidget;
class QAndroidPlatformServices;
class QAndroidSystemLocale;
class QPlatformAccessibility;
diff --git a/src/plugins/platforms/windows/qwindowsscreen.cpp b/src/plugins/platforms/windows/qwindowsscreen.cpp
index 689624ff2a..0ccadfa343 100644
--- a/src/plugins/platforms/windows/qwindowsscreen.cpp
+++ b/src/plugins/platforms/windows/qwindowsscreen.cpp
@@ -120,7 +120,7 @@ static bool monitorData(HMONITOR hMonitor, QWindowsScreenData *data)
return true;
}
-// from QDesktopWidget, taking WindowsScreenDataList as LPARAM
+// from monitorData, taking WindowsScreenDataList as LPARAM
BOOL QT_WIN_CALLBACK monitorEnumCallback(HMONITOR hMonitor, HDC, LPRECT, LPARAM p)
{
QWindowsScreenData data;
diff --git a/src/tools/uic/qclass_lib_map.h b/src/tools/uic/qclass_lib_map.h
index 1c0e1a098a..cafb255a48 100644
--- a/src/tools/uic/qclass_lib_map.h
+++ b/src/tools/uic/qclass_lib_map.h
@@ -662,7 +662,6 @@ QT_CLASS_LIB(QClipboard, QtGui, qclipboard.h)
QT_CLASS_LIB(QCursor, QtGui, qcursor.h)
QT_CLASS_LIB(QCursor, QtGui, qcursor.h)
QT_CLASS_LIB(QCursorShape, QtWidgets, qcursor.h)
-QT_CLASS_LIB(QDesktopWidget, QtWidgets, qdesktopwidget.h)
QT_CLASS_LIB(QDrag, QtWidgets, qdrag.h)
QT_CLASS_LIB(QtEvents, QtGui, qevent.h)
QT_CLASS_LIB(QInputEvent, QtGui, qevent.h)
diff --git a/src/widgets/.prev_CMakeLists.txt b/src/widgets/.prev_CMakeLists.txt
index 0e7aaaf793..971791c363 100644
--- a/src/widgets/.prev_CMakeLists.txt
+++ b/src/widgets/.prev_CMakeLists.txt
@@ -12,7 +12,7 @@ qt_add_module(Widgets
itemviews/qfileiconprovider.cpp itemviews/qfileiconprovider.h itemviews/qfileiconprovider_p.h
kernel/qapplication.cpp kernel/qapplication.h kernel/qapplication_p.h
kernel/qboxlayout.cpp kernel/qboxlayout.h
- kernel/qdesktopwidget.cpp kernel/qdesktopwidget.h kernel/qdesktopwidget_p.h
+ kernel/qdesktopwidget.cpp kernel/qdesktopwidget_p.h
kernel/qgesture.cpp kernel/qgesture.h kernel/qgesture_p.h
kernel/qgesturemanager.cpp kernel/qgesturemanager_p.h
kernel/qgesturerecognizer.cpp kernel/qgesturerecognizer.h
diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt
index 400df76d70..84ed6f7fa9 100644
--- a/src/widgets/CMakeLists.txt
+++ b/src/widgets/CMakeLists.txt
@@ -12,7 +12,7 @@ qt_add_module(Widgets
itemviews/qfileiconprovider.cpp itemviews/qfileiconprovider.h itemviews/qfileiconprovider_p.h
kernel/qapplication.cpp kernel/qapplication.h kernel/qapplication_p.h
kernel/qboxlayout.cpp kernel/qboxlayout.h
- kernel/qdesktopwidget.cpp kernel/qdesktopwidget.h kernel/qdesktopwidget_p.h
+ kernel/qdesktopwidget.cpp kernel/qdesktopwidget_p.h
kernel/qgesture.cpp kernel/qgesture.h kernel/qgesture_p.h
kernel/qgesturemanager.cpp kernel/qgesturemanager_p.h
kernel/qgesturerecognizer.cpp kernel/qgesturerecognizer.h
diff --git a/src/widgets/dialogs/qcolordialog.cpp b/src/widgets/dialogs/qcolordialog.cpp
index a605c35b05..8e5895f48b 100644
--- a/src/widgets/dialogs/qcolordialog.cpp
+++ b/src/widgets/dialogs/qcolordialog.cpp
@@ -40,7 +40,6 @@
#include "qcolordialog.h"
#include "qapplication.h"
-#include "qdesktopwidget.h"
#include <private/qdesktopwidget_p.h>
#include "qdrawutil.h"
#include "qevent.h"
@@ -1565,7 +1564,7 @@ bool QColorDialogPrivate::selectColor(const QColor &col)
QColor QColorDialogPrivate::grabScreenColor(const QPoint &p)
{
- const QDesktopWidget *desktop = QApplication::desktop();
+ const QWidget *desktop = QApplication::desktop();
const QPixmap pixmap = QGuiApplication::primaryScreen()->grabWindow(desktop->winId(), p.x(), p.y(), 1, 1);
QImage i = pixmap.toImage();
return i.pixel(0, 0);
diff --git a/src/widgets/dialogs/qdialog.cpp b/src/widgets/dialogs/qdialog.cpp
index 14cfe6800c..0f0e213e71 100644
--- a/src/widgets/dialogs/qdialog.cpp
+++ b/src/widgets/dialogs/qdialog.cpp
@@ -49,7 +49,6 @@
#endif
#include "qevent.h"
-#include "qdesktopwidget.h"
#include <private/qdesktopwidget_p.h>
#include "qapplication.h"
#include "qlayout.h"
diff --git a/src/widgets/dialogs/qmessagebox.cpp b/src/widgets/dialogs/qmessagebox.cpp
index c65d91cf9e..e0edc2f755 100644
--- a/src/widgets/dialogs/qmessagebox.cpp
+++ b/src/widgets/dialogs/qmessagebox.cpp
@@ -47,7 +47,6 @@
#include <QtWidgets/qstyle.h>
#include <QtWidgets/qstyleoption.h>
#include <QtWidgets/qgridlayout.h>
-#include <QtWidgets/qdesktopwidget.h>
#include <QtWidgets/qpushbutton.h>
#include <QtWidgets/qcheckbox.h>
#include <QtGui/qaccessible.h>
diff --git a/src/widgets/dialogs/qwizard.cpp b/src/widgets/dialogs/qwizard.cpp
index c7aac8b9da..ff2f202bb4 100644
--- a/src/widgets/dialogs/qwizard.cpp
+++ b/src/widgets/dialogs/qwizard.cpp
@@ -47,7 +47,6 @@
#include "qapplication.h"
#include "qboxlayout.h"
#include "qlayoutitem.h"
-#include "qdesktopwidget.h"
#include <private/qdesktopwidget_p.h>
#include "qevent.h"
#include "qframe.h"
diff --git a/src/widgets/dialogs/qwizard_win.cpp b/src/widgets/dialogs/qwizard_win.cpp
index e87d117a3c..1ec8fe8d91 100644
--- a/src/widgets/dialogs/qwizard_win.cpp
+++ b/src/widgets/dialogs/qwizard_win.cpp
@@ -52,7 +52,6 @@
#include <QtCore/QDebug>
#include <QtGui/QMouseEvent>
#include <QtGui/QWindow>
-#include <QtWidgets/QDesktopWidget>
#include <uxtheme.h>
#include <vssym32.h>
diff --git a/src/widgets/graphicsview/qgraphicsscene.cpp b/src/widgets/graphicsview/qgraphicsscene.cpp
index f093dc1644..e64f7cda9d 100644
--- a/src/widgets/graphicsview/qgraphicsscene.cpp
+++ b/src/widgets/graphicsview/qgraphicsscene.cpp
@@ -226,7 +226,6 @@
#include <QtCore/qvarlengtharray.h>
#include <QtCore/QMetaMethod>
#include <QtWidgets/qapplication.h>
-#include <QtWidgets/qdesktopwidget.h>
#include <QtGui/qevent.h>
#include <QtWidgets/qgraphicslayout.h>
#include <QtWidgets/qgraphicsproxywidget.h>
diff --git a/src/widgets/graphicsview/qgraphicsview.cpp b/src/widgets/graphicsview/qgraphicsview.cpp
index 43ee163591..be097447e5 100644
--- a/src/widgets/graphicsview/qgraphicsview.cpp
+++ b/src/widgets/graphicsview/qgraphicsview.cpp
@@ -285,8 +285,6 @@ static const int QGRAPHICSVIEW_PREALLOC_STYLE_OPTIONS = 503; // largest prime <
#include <QtCore/qmath.h>
#include <QtCore/qscopedvaluerollback.h>
#include <QtWidgets/qapplication.h>
-#include <QtWidgets/qdesktopwidget.h>
-#include <private/qdesktopwidget_p.h>
#include <QtGui/qevent.h>
#include <QtWidgets/qlayout.h>
#include <QtGui/qtransform.h>
diff --git a/src/widgets/kernel/kernel.pri b/src/widgets/kernel/kernel.pri
index b9dfdef5ee..462897b886 100644
--- a/src/widgets/kernel/kernel.pri
+++ b/src/widgets/kernel/kernel.pri
@@ -11,7 +11,6 @@ HEADERS += \
kernel/qapplication_p.h \
kernel/qwidgetrepaintmanager_p.h \
kernel/qboxlayout.h \
- kernel/qdesktopwidget.h \
kernel/qgridlayout.h \
kernel/qlayout.h \
kernel/qlayout_p.h \
diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp
index 0e96e8bc69..1af94efdf9 100644
--- a/src/widgets/kernel/qapplication.cpp
+++ b/src/widgets/kernel/qapplication.cpp
@@ -42,7 +42,7 @@
#include "qapplication.h"
#include "qclipboard.h"
#include "qcursor.h"
-#include "qdesktopwidget.h"
+#include "qdesktopwidget_p.h"
#include "qdir.h"
#include "qevent.h"
#include "qfile.h"
@@ -2521,22 +2521,30 @@ void QApplicationPrivate::sendSyntheticEnterLeave(QWidget *widget)
/*!
\internal
- Returns the desktop widget (also called the root window).
+ Returns the desktop widget (also called the root window) for \a screen.
+
+ If \a screen is nullptr, then the widget that represents the entire virtual
+ desktop is returned, and its geometry will be the union of all screens.
+
+ Use the desktop widget for a specific screen as the parent of a new toplevel
+ widget to position the widget on a specific screen.
The desktop may be composed of multiple screens, so it would be incorrect,
for example, to attempt to \e center some widget in the desktop's geometry.
- QDesktopWidget has various functions for obtaining useful geometries upon
- the desktop, such as QDesktopWidget::screenGeometry() and
- QDesktopWidget::availableGeometry().
+ Use QScreen::geometry() and QScreen::availableGeometry() to get the dimensions
+ of a specific screen instead.
*/
-QDesktopWidget *QApplication::desktop()
+QWidget *QApplication::desktop(QScreen *screen)
{
CHECK_QAPP_INSTANCE(nullptr)
if (!qt_desktopWidget || // not created yet
!(qt_desktopWidget->windowType() == Qt::Desktop)) { // reparented away
qt_desktopWidget = new QDesktopWidget();
}
- return qt_desktopWidget;
+ if (!screen)
+ return qt_desktopWidget;
+ QDesktopWidgetPrivate *dwp = static_cast<QDesktopWidgetPrivate*>(qt_widget_private(qt_desktopWidget));
+ return dwp->widgetForScreen(screen);
}
/*
diff --git a/src/widgets/kernel/qapplication.h b/src/widgets/kernel/qapplication.h
index 1903aa48dc..36a7576c2d 100644
--- a/src/widgets/kernel/qapplication.h
+++ b/src/widgets/kernel/qapplication.h
@@ -51,7 +51,6 @@
QT_BEGIN_NAMESPACE
-class QDesktopWidget;
class QStyle;
class QEventLoop;
class QIcon;
@@ -106,7 +105,7 @@ public:
static QWidgetList allWidgets();
static QWidgetList topLevelWidgets();
- static QDesktopWidget *desktop();
+ static QWidget *desktop(QScreen *screen = nullptr);
static QWidget *activePopupWidget();
static QWidget *activeModalWidget();
diff --git a/src/widgets/kernel/qdesktopwidget.cpp b/src/widgets/kernel/qdesktopwidget.cpp
index dd74fbf53e..797980c7c5 100644
--- a/src/widgets/kernel/qdesktopwidget.cpp
+++ b/src/widgets/kernel/qdesktopwidget.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtWidgets module of the Qt Toolkit.
@@ -38,7 +38,6 @@
****************************************************************************/
#include "qglobal.h"
-#include "qdesktopwidget.h"
#include "qdesktopwidget_p.h"
#include "qscreen.h"
#include "qwidget_p.h"
@@ -50,109 +49,66 @@
QT_BEGIN_NAMESPACE
QDesktopScreenWidget::QDesktopScreenWidget(QScreen *screen, const QRect &geometry)
- : QWidget(nullptr, Qt::Desktop), m_screen(screen)
+ : QWidget(nullptr, Qt::Desktop)
{
setVisible(false);
if (QWindow *winHandle = windowHandle())
winHandle->setScreen(screen);
- setScreenGeometry(geometry);
-}
-
-void QDesktopScreenWidget::setScreenGeometry(const QRect &geometry)
-{
- m_geometry = geometry;
setGeometry(geometry);
}
-int QDesktopScreenWidget::screenNumber() const
+QScreen *QDesktopScreenWidget::screen() const
{
const QDesktopWidgetPrivate *desktopWidgetP
= static_cast<const QDesktopWidgetPrivate *>(qt_widget_private(QApplication::desktop()));
- return desktopWidgetP->screens.indexOf(const_cast<QDesktopScreenWidget *>(this));
-}
-
-const QRect QDesktopWidgetPrivate::screenGeometry(const QWidget *widget)
-{
- if (Q_UNLIKELY(!widget)) {
- qWarning("QDesktopWidget::screenGeometry(): Attempt "
- "to get the screen geometry of a null widget");
- return QRect();
+ for (auto it : qAsConst(desktopWidgetP->screenWidgets)) {
+ if (it.second == this)
+ return it.first;
}
- QRect rect = QWidgetPrivate::screenGeometry(widget);
- if (rect.isNull())
- return screenGeometry(screenNumber(widget));
- else return rect;
+ return nullptr;
}
-const QRect QDesktopWidgetPrivate::availableGeometry(const QWidget *widget)
+QDesktopWidgetPrivate::~QDesktopWidgetPrivate()
{
- if (Q_UNLIKELY(!widget)) {
- qWarning("QDesktopWidget::availableGeometry(): Attempt "
- "to get the available geometry of a null widget");
- return QRect();
- }
- QRect rect = QWidgetPrivate::screenGeometry(widget);
- if (rect.isNull())
- return availableGeometry(screenNumber(widget));
- else
- return rect;
+ qDeleteAll(screenWidgets.values());
}
-QDesktopScreenWidget *QDesktopWidgetPrivate::widgetForScreen(QScreen *qScreen) const
-{
- foreach (QDesktopScreenWidget *widget, screens) {
- if (widget->assignedScreen() == qScreen)
- return widget;
- }
- return nullptr;
-}
-
-void QDesktopWidgetPrivate::_q_updateScreens()
+void QDesktopWidgetPrivate::updateScreens()
{
Q_Q(QDesktopWidget);
const QList<QScreen *> screenList = QGuiApplication::screens();
- const int targetLength = screenList.length();
// Re-build our screens list. This is the easiest way to later compute which signals to emit.
- // Create new screen widgets as necessary. While iterating, keep the old list in place so
- // that widgetForScreen works.
+ // Create new screen widgets as necessary.
// Furthermore, we note which screens have changed, and compute the overall virtual geometry.
- QList<QDesktopScreenWidget *> newScreens;
- QList<int> changedScreens;
+ QFlatMap<QScreen*, QDesktopScreenWidget*> newScreenWidgets;
QRegion virtualGeometry;
- for (int i = 0; i < targetLength; ++i) {
- QScreen *qScreen = screenList.at(i);
- const QRect screenGeometry = qScreen->geometry();
- QDesktopScreenWidget *screenWidget = widgetForScreen(qScreen);
- if (screenWidget) {
- // an old screen. update geometry and remember the index in the *new* list
- if (screenGeometry != screenWidget->screenGeometry()) {
- screenWidget->setScreenGeometry(screenGeometry);
- changedScreens.push_back(i);
- }
- } else {
+ for (QScreen *screen : screenList) {
+ const QRect screenGeometry = screen->geometry();
+ QDesktopScreenWidget *screenWidget = screenWidgets.value(screen);
+ if (!screenWidget) {
// a new screen, create a widget and connect the signals.
- screenWidget = new QDesktopScreenWidget(qScreen, screenGeometry);
- QObject::connect(qScreen, SIGNAL(geometryChanged(QRect)),
- q, SLOT(_q_updateScreens()), Qt::QueuedConnection);
- QObject::connect(qScreen, SIGNAL(destroyed()),
- q, SLOT(_q_updateScreens()), Qt::QueuedConnection);
+ screenWidget = new QDesktopScreenWidget(screen, screenGeometry);
+ QObjectPrivate::connect(screen, &QScreen::geometryChanged,
+ this, &QDesktopWidgetPrivate::updateScreens, Qt::QueuedConnection);
+ QObjectPrivate::connect(screen, &QObject::destroyed,
+ this, &QDesktopWidgetPrivate::updateScreens, Qt::QueuedConnection);
}
// record all the screens and the overall geometry.
- newScreens.push_back(screenWidget);
+ newScreenWidgets.insert(screen, screenWidget);
virtualGeometry += screenGeometry;
}
// Now we apply the accumulated updates.
- screens.swap(newScreens); // now [newScreens] is the old screen list
- Q_ASSERT(screens.size() == targetLength);
+ qSwap(screenWidgets, newScreenWidgets); // now [newScreenWidgets] is the old screen list
+ Q_ASSERT(screenWidgets.size() == screenList.length());
q->setGeometry(virtualGeometry.boundingRect());
// Delete the QDesktopScreenWidget that are not used any more.
- foreach (QDesktopScreenWidget *screen, newScreens) {
- if (!screens.contains(screen))
- delete screen;
+ for (auto it : qAsConst(newScreenWidgets)) {
+ if (!screenWidgets.contains(it.first))
+ delete it.second;
}
}
@@ -161,90 +117,12 @@ QDesktopWidget::QDesktopWidget()
{
Q_D(QDesktopWidget);
setObjectName(QLatin1String("desktop"));
- d->_q_updateScreens();
- connect(qApp, SIGNAL(screenAdded(QScreen*)), this, SLOT(_q_updateScreens()));
-}
-
-QDesktopWidget::~QDesktopWidget()
-{
+ d->updateScreens();
+ QObjectPrivate::connect(qApp, &QApplication::screenAdded, d, &QDesktopWidgetPrivate::updateScreens);
}
-QWidget *QDesktopWidget::screen(int screen)
-{
- Q_D(QDesktopWidget);
- if (screen < 0 || screen >= d->screens.length())
- return d->screens.at(0);
- return d->screens.at(screen);
-}
-
-const QRect QDesktopWidgetPrivate::availableGeometry(int screenNo)
-{
- const QScreen *screen = QDesktopWidgetPrivate::screen(screenNo);
- return screen ? screen->availableGeometry() : QRect();
-}
-
-const QRect QDesktopWidgetPrivate::screenGeometry(int screenNo)
-{
- const QScreen *screen = QDesktopWidgetPrivate::screen(screenNo);
- return screen ? screen->geometry() : QRect();
-}
-
-int QDesktopWidgetPrivate::screenNumber(const QWidget *w)
-{
- if (!w)
- return 0;
-
- const QList<QScreen *> allScreens = QGuiApplication::screens();
- QList<QScreen *> screens = allScreens;
- if (screens.isEmpty()) // This should never happen
- return 0;
-
- // If there is more than one virtual desktop
- if (screens.count() != screens.constFirst()->virtualSiblings().count()) {
- // Find the root widget, get a QScreen from it and use the
- // virtual siblings for checking the window position.
- if (const QScreen *winScreen = qt_widget_private(const_cast<QWidget *>(w))->associatedScreen())
- screens = winScreen->virtualSiblings();
- }
-
- // Get the screen number from window position using screen geometry
- // and proper screens.
- QRect frame = w->frameGeometry();
- if (!w->isWindow())
- frame.moveTopLeft(w->mapToGlobal(QPoint(0, 0)));
-
- QScreen *widgetScreen = nullptr;
- int largestArea = 0;
- foreach (QScreen *screen, screens) {
- const QRect deviceIndependentScreenGeometry =
- QHighDpi::fromNativePixels(screen->handle()->geometry(), screen);
- const QRect intersected = deviceIndependentScreenGeometry.intersected(frame);
- int area = intersected.width() * intersected.height();
- if (largestArea < area) {
- widgetScreen = screen;
- largestArea = area;
- }
- }
- return allScreens.indexOf(widgetScreen);
-}
-
-int QDesktopWidgetPrivate::screenNumber(const QPoint &p)
-{
- QScreen *screen = QGuiApplication::screenAt(p);
- return screen ? QGuiApplication::screens().indexOf(screen) : 0;
-}
-
-QScreen *QDesktopWidgetPrivate::screen(int screenNo)
-{
- QList<QScreen *> screens = QGuiApplication::screens();
- if (screenNo == -1)
- screenNo = 0;
- if (screenNo < 0 || screenNo >= screens.size())
- return nullptr;
- return screens.at(screenNo);
-}
+QDesktopWidget::~QDesktopWidget() = default;
QT_END_NAMESPACE
-#include "moc_qdesktopwidget.cpp"
#include "moc_qdesktopwidget_p.cpp"
diff --git a/src/widgets/kernel/qdesktopwidget.h b/src/widgets/kernel/qdesktopwidget.h
deleted file mode 100644
index 265f320b1f..0000000000
--- a/src/widgets/kernel/qdesktopwidget.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtWidgets module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDESKTOPWIDGET_H
-#define QDESKTOPWIDGET_H
-
-#include <QtWidgets/qtwidgetsglobal.h>
-#include <QtWidgets/qwidget.h>
-
-QT_BEGIN_NAMESPACE
-
-
-class QApplication;
-class QDesktopWidgetPrivate;
-
-class Q_WIDGETS_EXPORT QDesktopWidget : public QWidget
-{
- Q_OBJECT
-public:
- QDesktopWidget();
- ~QDesktopWidget();
-
- QT_DEPRECATED_X("Use QScreen") QWidget *screen(int screen = -1);
-
-private:
- Q_DISABLE_COPY(QDesktopWidget)
- Q_DECLARE_PRIVATE(QDesktopWidget)
- Q_PRIVATE_SLOT(d_func(), void _q_updateScreens())
-
- friend class QApplication;
- friend class QApplicationPrivate;
-};
-
-QT_END_NAMESPACE
-
-#endif // QDESKTOPWIDGET_H
diff --git a/src/widgets/kernel/qdesktopwidget_p.h b/src/widgets/kernel/qdesktopwidget_p.h
index b0ac13808d..d2845af17c 100644
--- a/src/widgets/kernel/qdesktopwidget_p.h
+++ b/src/widgets/kernel/qdesktopwidget_p.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtWidgets module of the Qt Toolkit.
@@ -52,56 +52,96 @@
#define QDESKTOPWIDGET_P_H
#include <QtWidgets/private/qtwidgetsglobal_p.h>
-#include "QDesktopWidget"
#include "private/qwidget_p.h"
-#include <QtCore/qalgorithms.h>
#include <QtGui/qscreen.h>
+#include <QtCore/private/qflatmap_p.h>
QT_BEGIN_NAMESPACE
-class QDesktopScreenWidget : public QWidget {
+class QDesktopWidgetPrivate;
+
+class Q_WIDGETS_EXPORT QDesktopWidget : public QWidget
+{
Q_OBJECT
public:
- explicit QDesktopScreenWidget(QScreen *screen, const QRect &geometry);
+ QDesktopWidget();
+ ~QDesktopWidget();
- int screenNumber() const;
- void setScreenGeometry(const QRect &geometry);
-
- QScreen *assignedScreen() const { return m_screen.data(); }
- QRect screenGeometry() const { return m_geometry; }
private:
- // The widget updates its screen and geometry automatically. We need to save them separately
- // to detect changes, and trigger the appropriate signals.
- const QPointer<QScreen> m_screen;
- QRect m_geometry;
-};
+ Q_DISABLE_COPY(QDesktopWidget)
+ Q_DECLARE_PRIVATE(QDesktopWidget)
-class QDesktopWidgetPrivate : public QWidgetPrivate {
- Q_DECLARE_PUBLIC(QDesktopWidget)
+ friend class QApplication;
+ friend class QApplicationPrivate;
+};
+class QDesktopScreenWidget : public QWidget {
+ Q_OBJECT
public:
- ~QDesktopWidgetPrivate() { qDeleteAll(screens); }
- void _q_updateScreens();
- QDesktopScreenWidget *widgetForScreen(QScreen *qScreen) const;
+ explicit QDesktopScreenWidget(QScreen *, const QRect &geometry);
- static int screenNumber(const QWidget *widget = nullptr);
- static int screenNumber(const QPoint &);
+ QScreen *screen() const;
+};
- static QScreen *screen(int screenNo = -1);
+class QDesktopWidgetPrivate : public QWidgetPrivate {
+ Q_DECLARE_PUBLIC(QDesktopWidget)
- static const QRect screenGeometry(int screen = -1);
- static const QRect screenGeometry(const QWidget *widget);
- static const QRect screenGeometry(const QPoint &point)
+public:
+ ~QDesktopWidgetPrivate();
+ void updateScreens();
+ QDesktopScreenWidget *widgetForScreen(QScreen *qScreen) const
+ {
+ return screenWidgets.value(qScreen);
+ }
+
+ static inline int screenNumber(const QWidget *widget = nullptr)
+ {
+ if (!widget)
+ return 0;
+ return QGuiApplication::screens().indexOf(widget->screen());
+ }
+
+ static inline int screenNumber(const QPoint &point)
+ {
+ int screenNo = 0;
+ if (QScreen *screen = QGuiApplication::screenAt(point))
+ screenNo = QGuiApplication::screens().indexOf(screen);
+ return screenNo;
+ }
+
+ static inline QScreen *screen(int screenNo = -1)
+ {
+ const QList<QScreen *> screens = QGuiApplication::screens();
+ if (screenNo == -1)
+ screenNo = 0;
+ if (screenNo < 0 || screenNo >= screens.size())
+ return nullptr;
+ return screens.at(screenNo);
+ }
+
+ static inline QRect screenGeometry(int screenNo = -1)
+ {
+ QRect rect;
+ if (const QScreen *s = screen(screenNo))
+ rect = s->geometry();
+ return rect;
+ }
+ static inline QRect screenGeometry(const QPoint &point)
{ return screenGeometry(screenNumber(point)); }
- static const QRect availableGeometry(int screen = -1);
- static const QRect availableGeometry(const QWidget *widget);
- static const QRect availableGeometry(const QPoint &point)
+ static inline QRect availableGeometry(int screenNo = -1)
+ {
+ QRect rect;
+ if (const QScreen *s = screen(screenNo))
+ rect = s->availableGeometry();
+ return rect;
+ }
+ static inline QRect availableGeometry(const QPoint &point)
{ return availableGeometry(screenNumber(point)); }
- QList<QDesktopScreenWidget *> screens;
+ QFlatMap<QScreen*, QDesktopScreenWidget*> screenWidgets;
};
QT_END_NAMESPACE
diff --git a/src/widgets/kernel/qtooltip.cpp b/src/widgets/kernel/qtooltip.cpp
index 80a87bb3cd..8aca4db58a 100644
--- a/src/widgets/kernel/qtooltip.cpp
+++ b/src/widgets/kernel/qtooltip.cpp
@@ -40,7 +40,6 @@
#include <QtWidgets/private/qtwidgetsglobal_p.h>
#include <qapplication.h>
-#include <qdesktopwidget.h>
#include <private/qdesktopwidget_p.h>
#include <qevent.h>
#include <qpointer.h>
@@ -139,7 +138,7 @@ public:
bool tipChanged(const QPoint &pos, const QString &text, QObject *o);
void placeTip(const QPoint &pos, QWidget *w);
- static int getTipScreen(const QPoint &pos, QWidget *w);
+ static QScreen *getTipScreen(const QPoint &pos, QWidget *w);
protected:
void timerEvent(QTimerEvent *e) override;
void paintEvent(QPaintEvent *e) override;
@@ -366,12 +365,12 @@ bool QTipLabel::eventFilter(QObject *o, QEvent *e)
return false;
}
-int QTipLabel::getTipScreen(const QPoint &pos, QWidget *w)
+QScreen *QTipLabel::getTipScreen(const QPoint &pos, QWidget *w)
{
- if (QGuiApplication::primaryScreen()->virtualSiblings().size() > 1)
- return QDesktopWidgetPrivate::screenNumber(pos);
- else
- return QDesktopWidgetPrivate::screenNumber(w);
+ int screenNo = QGuiApplication::primaryScreen()->virtualSiblings().size() > 1
+ ? QDesktopWidgetPrivate::screenNumber(pos)
+ : QDesktopWidgetPrivate::screenNumber(w);
+ return QDesktopWidgetPrivate::screen(screenNo);
}
void QTipLabel::placeTip(const QPoint &pos, QWidget *w)
@@ -396,8 +395,7 @@ void QTipLabel::placeTip(const QPoint &pos, QWidget *w)
#endif //QT_NO_STYLE_STYLESHEET
QPoint p = pos;
- const QScreen *screen = QGuiApplication::screens().value(getTipScreen(pos, w),
- QGuiApplication::primaryScreen());
+ const QScreen *screen = getTipScreen(pos, w);
// a QScreen's handle *should* never be null, so this is a bit paranoid
if (const QPlatformScreen *platformScreen = screen ? screen->handle() : nullptr) {
const QSize cursorSize = QHighDpi::fromNativePixels(platformScreen->cursor()->size(),
@@ -494,16 +492,18 @@ void QToolTip::showText(const QPoint &pos, const QString &text, QWidget *w, cons
}
if (!text.isEmpty()){ // no tip can be reused, create new tip:
+ QWidget *tipLabelParent = [pos, w]() -> QWidget* {
#ifdef Q_OS_WIN32
- // On windows, we can't use the widget as parent otherwise the window will be
- // raised when the tooltip will be shown
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
- new QTipLabel(text, pos, QApplication::desktop()->screen(QTipLabel::getTipScreen(pos, w)), msecDisplayTime);
-QT_WARNING_POP
+ // On windows, we can't use the widget as parent otherwise the window will be
+ // raised when the tooltip will be shown
+ QScreen *screen = QTipLabel::getTipScreen(pos, w);
+ return QApplication::desktop(screen);
#else
- new QTipLabel(text, pos, w, msecDisplayTime); // sets QTipLabel::instance to itself
+ Q_UNUSED(pos);
+ return w;
#endif
+ }();
+ new QTipLabel(text, pos, tipLabelParent, msecDisplayTime); // sets QTipLabel::instance to itself
QTipLabel::instance->setTipRect(w, rect);
QTipLabel::instance->placeTip(pos, w);
QTipLabel::instance->setObjectName(QLatin1String("qtooltip_label"));
diff --git a/src/widgets/kernel/qwhatsthis.cpp b/src/widgets/kernel/qwhatsthis.cpp
index fdf90acccc..c5a9989837 100644
--- a/src/widgets/kernel/qwhatsthis.cpp
+++ b/src/widgets/kernel/qwhatsthis.cpp
@@ -41,7 +41,6 @@
#include "qpointer.h"
#include "qapplication.h"
#include <private/qguiapplication_p.h>
-#include "qdesktopwidget.h"
#include <private/qdesktopwidget_p.h>
#include "qevent.h"
#include "qpixmap.h"
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp
index 56e558eca0..c7303dde66 100644
--- a/src/widgets/kernel/qwidget.cpp
+++ b/src/widgets/kernel/qwidget.cpp
@@ -990,10 +990,10 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f)
if (allWidgets)
allWidgets->insert(q);
- int targetScreen = -1;
+ QScreen *targetScreen = nullptr;
if (parentWidget && parentWidget->windowType() == Qt::Desktop) {
const QDesktopScreenWidget *sw = qobject_cast<const QDesktopScreenWidget *>(parentWidget);
- targetScreen = sw ? sw->screenNumber() : 0;
+ targetScreen = sw ? sw->screen() : nullptr;
parentWidget = nullptr;
}
@@ -1006,10 +1006,10 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f)
}
#endif
- if (targetScreen >= 0) {
- topData()->initialScreenIndex = targetScreen;
+ if (targetScreen) {
+ topData()->initialScreen = targetScreen;
if (QWindow *window = q->windowHandle())
- window->setScreen(QGuiApplication::screens().value(targetScreen, nullptr));
+ window->setScreen(targetScreen);
}
data.fstrut_dirty = true;
@@ -1293,13 +1293,13 @@ void QWidgetPrivate::create()
else
win->resize(q->size());
if (win->isTopLevel()) {
- int screenNumber = topData()->initialScreenIndex;
- topData()->initialScreenIndex = -1;
- if (screenNumber < 0) {
- screenNumber = q->windowType() != Qt::Desktop
- ? QDesktopWidgetPrivate::screenNumber(q) : 0;
+ QScreen *targetScreen = topData()->initialScreen;
+ topData()->initialScreen = nullptr;
+ if (!targetScreen) {
+ targetScreen = q->windowType() != Qt::Desktop
+ ? q->screen() : nullptr;
}
- win->setScreen(QGuiApplication::screens().value(screenNumber, nullptr));
+ win->setScreen(targetScreen);
}
QSurfaceFormat format = win->requestedFormat();
@@ -1602,7 +1602,7 @@ void QWidgetPrivate::createTLExtra()
x->sizeAdjusted = false;
x->embedded = 0;
x->window = nullptr;
- x->initialScreenIndex = -1;
+ x->initialScreen = nullptr;
#ifdef QWIDGET_EXTRA_DEBUG
static int count = 0;
@@ -2507,8 +2507,8 @@ QScreen *QWidget::screen() const
return associatedScreen;
if (auto topLevel = window()) {
if (auto topData = qt_widget_private(topLevel)->topData()) {
- if (auto initialScreen = QGuiApplicationPrivate::screen_list.value(topData->initialScreenIndex))
- return initialScreen;
+ if (topData->initialScreen)
+ return topData->initialScreen;
}
if (auto screenByPos = QGuiApplication::screenAt(topLevel->geometry().center()))
return screenByPos;
@@ -3472,8 +3472,7 @@ QPoint QWidget::pos() const
issues with windows.
\note Do not use this function to find the width of a screen on
- a \l{QDesktopWidget}{multiple screen desktop}. Read
- \l{QDesktopWidget#Screen Geometry}{this note} for details.
+ a multi-screen desktop. See QScreen for details.
By default, this property contains a value that depends on the user's
platform and screen geometry.
@@ -10487,13 +10486,13 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f)
Qt::WindowFlags oldFlags = data.window_flags;
bool wasCreated = q->testAttribute(Qt::WA_WState_Created);
- int targetScreen = -1;
+ QScreen *targetScreen = nullptr;
// Handle a request to move the widget to a particular screen
if (newparent && newparent->windowType() == Qt::Desktop) {
// make sure the widget is created on the same screen as the
// programmer specified desktop widget
const QDesktopScreenWidget *sw = qobject_cast<const QDesktopScreenWidget *>(newparent);
- targetScreen = sw ? sw->screenNumber() : 0;
+ targetScreen = sw ? sw->screen() : nullptr;
newparent = nullptr;
}
@@ -10523,9 +10522,9 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f)
if (!newparent) {
f |= Qt::Window;
- if (targetScreen == -1) {
+ if (!targetScreen) {
if (parent)
- targetScreen = QDesktopWidgetPrivate::screenNumber(q->parentWidget()->window());
+ targetScreen = q->parentWidget()->window()->screen();
}
}
@@ -10568,12 +10567,12 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f)
q->setAttribute(Qt::WA_WState_ExplicitShowHide, explicitlyHidden);
// move the window to the selected screen
- if (!newparent && targetScreen != -1) {
+ if (!newparent && targetScreen) {
// only if it is already created
if (q->testAttribute(Qt::WA_WState_Created))
- q->windowHandle()->setScreen(QGuiApplication::screens().value(targetScreen, 0));
+ q->windowHandle()->setScreen(targetScreen);
else
- topData()->initialScreenIndex = targetScreen;
+ topData()->initialScreen = targetScreen;
}
}
diff --git a/src/widgets/kernel/qwidget_p.h b/src/widgets/kernel/qwidget_p.h
index 3e52a6ad2f..08954cc778 100644
--- a/src/widgets/kernel/qwidget_p.h
+++ b/src/widgets/kernel/qwidget_p.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtWidgets module of the Qt Toolkit.
@@ -61,6 +61,7 @@
#include "QtGui/qinputmethod.h"
#include "QtGui/qopengl.h"
#include "QtGui/qsurfaceformat.h"
+#include "QtGui/qscreen.h"
#include "QtWidgets/qsizepolicy.h"
#include "QtWidgets/qstyle.h"
#include "QtWidgets/qapplication.h"
@@ -144,8 +145,7 @@ struct QTLWExtra {
QRect frameStrut;
QRect normalGeometry; // used by showMin/maximized/FullScreen
Qt::WindowFlags savedFlags; // Save widget flags while showing fullscreen
- // ### TODO replace initialScreenIndex with QScreen *, in case the screens change at runtime
- int initialScreenIndex; // Screen number when passing a QDesktop[Screen]Widget as parent.
+ QScreen *initialScreen; // Screen when passing a QDesktop[Screen]Widget as parent.
#ifndef QT_NO_OPENGL
std::vector<std::unique_ptr<QPlatformTextureList>> widgetTextures;
@@ -476,13 +476,11 @@ public:
void setModal_sys();
- // This is an helper function that return the available geometry for
- // a widget and takes care is this one is in QGraphicsView.
- // If the widget is not embed in a scene then the geometry available is
- // null, we let QDesktopWidget decide for us.
- static QRect screenGeometry(const QWidget *widget)
+ // These helper functions return the (available) geometry for the screen
+ // the widget is on, and takes care if this one is embedded in a QGraphicsView.
+ static QRect graphicsViewParentRect(const QWidget *widget)
{
- QRect screen;
+ QRect rect;
#if QT_CONFIG(graphicsview)
QGraphicsProxyWidget *ancestorProxy = widget->d_func()->nearestGraphicsProxyWidget(widget);
//It's embedded if it has an ancestor
@@ -491,16 +489,30 @@ public:
// One view, let be smart and return the viewport rect then the popup is aligned
if (ancestorProxy->scene()->views().size() == 1) {
QGraphicsView *view = ancestorProxy->scene()->views().at(0);
- screen = view->mapToScene(view->viewport()->rect()).boundingRect().toRect();
+ rect = view->mapToScene(view->viewport()->rect()).boundingRect().toRect();
} else {
- screen = ancestorProxy->scene()->sceneRect().toRect();
+ rect = ancestorProxy->scene()->sceneRect().toRect();
}
}
}
#else
Q_UNUSED(widget);
#endif
- return screen;
+ return rect;
+ }
+ static QRect screenGeometry(const QWidget *widget)
+ {
+ QRect rect = graphicsViewParentRect(widget);
+ if (rect.isNull())
+ rect = widget->screen()->geometry();
+ return rect;
+ }
+ static QRect availableScreenGeometry(const QWidget *widget)
+ {
+ QRect rect = graphicsViewParentRect(widget);
+ if (rect.isNull())
+ rect = widget->screen()->availableGeometry();
+ return rect;
}
inline void setRedirected(QPaintDevice *replacement, const QPoint &offset)
diff --git a/src/widgets/util/qcompleter.cpp b/src/widgets/util/qcompleter.cpp
index 926eee26f3..72084ebd8f 100644
--- a/src/widgets/util/qcompleter.cpp
+++ b/src/widgets/util/qcompleter.cpp
@@ -157,7 +157,6 @@
#endif
#include "QtWidgets/qapplication.h"
#include "QtGui/qevent.h"
-#include "QtWidgets/qdesktopwidget.h"
#include <private/qapplication_p.h>
#include <private/qdesktopwidget_p.h>
#if QT_CONFIG(lineedit)
@@ -921,7 +920,7 @@ void QCompleterPrivate::_q_autoResizePopup()
void QCompleterPrivate::showPopup(const QRect& rect)
{
- const QRect screen = QDesktopWidgetPrivate::availableGeometry(widget);
+ const QRect screen = QWidgetPrivate::availableScreenGeometry(widget);
Qt::LayoutDirection dir = widget->layoutDirection();
QPoint pos;
int rh, w;
diff --git a/src/widgets/util/qscroller.cpp b/src/widgets/util/qscroller.cpp
index fec373d45c..003f27de56 100644
--- a/src/widgets/util/qscroller.cpp
+++ b/src/widgets/util/qscroller.cpp
@@ -57,7 +57,6 @@
#include <QGraphicsScene>
#include <QGraphicsView>
#endif
-#include <QDesktopWidget>
#include <private/qdesktopwidget_p.h>
#include <QVector2D>
#include <QtCore/qmath.h>
diff --git a/src/widgets/util/qsystemtrayicon.cpp b/src/widgets/util/qsystemtrayicon.cpp
index e4ee5770f1..170eba7514 100644
--- a/src/widgets/util/qsystemtrayicon.cpp
+++ b/src/widgets/util/qsystemtrayicon.cpp
@@ -60,7 +60,6 @@
#include "qstyle.h"
#include "qgridlayout.h"
#include "qapplication.h"
-#include "qdesktopwidget.h"
#include <private/qdesktopwidget_p.h>
#include "qbitmap.h"
@@ -132,7 +131,7 @@ static QIcon messageIcon2qIcon(QSystemTrayIcon::MessageIcon icon)
of type QEvent::ToolTip. Additionally, the QSystemTrayIcon receives wheel events of
type QEvent::Wheel. These are not supported on any other platform.
- \sa QDesktopServices, QDesktopWidget, {Desktop Integration}, {System Tray Icon Example}
+ \sa QDesktopServices, {Desktop Integration}, {System Tray Icon Example}
*/
/*!
@@ -533,7 +532,7 @@ QBalloonTip::QBalloonTip(const QIcon &icon, const QString &title,
msgLabel->setAlignment(Qt::AlignTop | Qt::AlignLeft);
// smart size for the message label
- int limit = QDesktopWidgetPrivate::availableGeometry(msgLabel).size().width() / 3;
+ int limit = QWidgetPrivate::availableScreenGeometry(msgLabel).width() / 3;
if (msgLabel->sizeHint().width() > limit) {
msgLabel->setWordWrap(true);
if (msgLabel->sizeHint().width() > limit) {
diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp
index 3125e001d9..042e702987 100644
--- a/src/widgets/widgets/qcombobox.cpp
+++ b/src/widgets/widgets/qcombobox.cpp
@@ -44,7 +44,6 @@
#include <qpa/qplatformmenu.h>
#include <qlineedit.h>
#include <qapplication.h>
-#include <qdesktopwidget.h>
#include <private/qdesktopwidget_p.h>
#include <qlistview.h>
#if QT_CONFIG(tableview)
@@ -321,11 +320,12 @@ void QComboBoxPrivate::trySetValidIndex()
setCurrentIndex(QModelIndex());
}
-QRect QComboBoxPrivate::popupGeometry(int screen) const
+QRect QComboBoxPrivate::popupGeometry() const
{
+ Q_Q(const QComboBox);
return QStylePrivate::useFullScreenForPopup()
- ? QDesktopWidgetPrivate::screenGeometry(screen)
- : QDesktopWidgetPrivate::availableGeometry(screen);
+ ? QWidgetPrivate::screenGeometry(q)
+ : QWidgetPrivate::availableScreenGeometry(q);
}
bool QComboBoxPrivate::updateHoverControl(const QPoint &pos)
@@ -2613,7 +2613,7 @@ void QComboBox::showPopup()
QComboBoxPrivateContainer* container = d->viewContainer();
QRect listRect(style->subControlRect(QStyle::CC_ComboBox, &opt,
QStyle::SC_ComboBoxListBoxPopup, this));
- QRect screen = d->popupGeometry(QDesktopWidgetPrivate::screenNumber(this));
+ QRect screen = d->popupGeometry();
QPoint below = mapToGlobal(listRect.bottomLeft());
int belowHeight = screen.bottom() - below.y();
diff --git a/src/widgets/widgets/qcombobox_p.h b/src/widgets/widgets/qcombobox_p.h
index c1771a8958..4bcc741615 100644
--- a/src/widgets/widgets/qcombobox_p.h
+++ b/src/widgets/widgets/qcombobox_p.h
@@ -372,7 +372,7 @@ public:
void updateArrow(QStyle::StateFlag state);
bool updateHoverControl(const QPoint &pos);
void trySetValidIndex();
- QRect popupGeometry(int screen = -1) const;
+ QRect popupGeometry() const;
QStyle::SubControl newHoverControl(const QPoint &pos);
int computeWidthHint() const;
QSize recomputeSizeHint(QSize &sh) const;
diff --git a/src/widgets/widgets/qdatetimeedit.cpp b/src/widgets/widgets/qdatetimeedit.cpp
index a438555183..60ed4b4798 100644
--- a/src/widgets/widgets/qdatetimeedit.cpp
+++ b/src/widgets/widgets/qdatetimeedit.cpp
@@ -42,7 +42,6 @@
#include <qabstractspinbox.h>
#include <qapplication.h>
#include <qdatetimeedit.h>
-#include <qdesktopwidget.h>
#include <private/qdesktopwidget_p.h>
#include <qdebug.h>
#include <qevent.h>
diff --git a/src/widgets/widgets/qdockarealayout.cpp b/src/widgets/widgets/qdockarealayout.cpp
index 3d2396c4a6..eedd0725cd 100644
--- a/src/widgets/widgets/qdockarealayout.cpp
+++ b/src/widgets/widgets/qdockarealayout.cpp
@@ -44,7 +44,6 @@
#include "QtWidgets/qtabbar.h"
#endif
#include "QtWidgets/qstyle.h"
-#include "QtWidgets/qdesktopwidget.h"
#include <private/qdesktopwidget_p.h>
#include "QtWidgets/qapplication.h"
#include "QtCore/qvariant.h"
@@ -3024,7 +3023,7 @@ QRect QDockAreaLayout::constrainedRect(QRect rect, QWidget* widget)
if (QGuiApplication::primaryScreen()->virtualSiblings().size() > 1)
desktop = QDesktopWidgetPrivate::screenGeometry(rect.topLeft());
else
- desktop = QDesktopWidgetPrivate::screenGeometry(widget);
+ desktop = QWidgetPrivate::screenGeometry(widget);
if (desktop.isValid()) {
rect.setWidth(qMin(rect.width(), desktop.width()));
diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp
index 8ffb0a3b9e..2dbc35457a 100644
--- a/src/widgets/widgets/qdockwidget.cpp
+++ b/src/widgets/widgets/qdockwidget.cpp
@@ -41,7 +41,6 @@
#include <qaction.h>
#include <qapplication.h>
-#include <qdesktopwidget.h>
#include <qdrawutil.h>
#include <qevent.h>
#include <qfontmetrics.h>
diff --git a/src/widgets/widgets/qeffects.cpp b/src/widgets/widgets/qeffects.cpp
index 1f2d3517e8..cdfad40760 100644
--- a/src/widgets/widgets/qeffects.cpp
+++ b/src/widgets/widgets/qeffects.cpp
@@ -38,7 +38,6 @@
****************************************************************************/
#include "qapplication.h"
-#include "qdesktopwidget.h"
#include "qeffects_p.h"
#include "qevent.h"
#include "qimage.h"
@@ -54,15 +53,6 @@
QT_BEGIN_NAMESPACE
-static QWidget *effectParent(const QWidget* w)
-{
- const int screenNumber = w ? QGuiApplication::screens().indexOf(w->screen()) : 0;
- QT_WARNING_PUSH // ### Qt 6: Find a replacement for QDesktopWidget::screen()
- QT_WARNING_DISABLE_DEPRECATED
- return QApplication::desktop()->screen(screenNumber);
- QT_WARNING_POP
-}
-
/*
Internal class QAlphaWidget.
@@ -108,7 +98,7 @@ static QAlphaWidget* q_blend = nullptr;
Constructs a QAlphaWidget.
*/
QAlphaWidget::QAlphaWidget(QWidget* w, Qt::WindowFlags f)
- : QWidget(effectParent(w), f)
+ : QWidget(QApplication::desktop(w ? w->screen() : nullptr), f)
{
#ifndef Q_OS_WIN
setEnabled(false);
@@ -389,7 +379,7 @@ static QRollEffect* q_roll = nullptr;
Construct a QRollEffect widget.
*/
QRollEffect::QRollEffect(QWidget* w, Qt::WindowFlags f, DirFlags orient)
- : QWidget(effectParent(w), f), orientation(orient)
+ : QWidget(QApplication::desktop(w ? w->screen() : nullptr), f), orientation(orient)
{
#ifndef Q_OS_WIN
setEnabled(false);
diff --git a/src/widgets/widgets/qfontcombobox.cpp b/src/widgets/widgets/qfontcombobox.cpp
index cb665de889..a4ac34b51a 100644
--- a/src/widgets/widgets/qfontcombobox.cpp
+++ b/src/widgets/widgets/qfontcombobox.cpp
@@ -46,7 +46,6 @@
#include <qevent.h>
#include <qapplication.h>
#include <private/qcombobox_p.h>
-#include <QDesktopWidget>
#include <private/qdesktopwidget_p.h>
#include <qdebug.h>
@@ -545,7 +544,7 @@ bool QFontComboBox::event(QEvent *e)
QListView *lview = qobject_cast<QListView*>(view());
if (lview) {
lview->window()->setFixedWidth(qMin(width() * 5 / 3,
- QDesktopWidgetPrivate::availableGeometry(lview).width()));
+ QWidgetPrivate::availableScreenGeometry(lview).width()));
}
}
return QComboBox::event(e);
diff --git a/src/widgets/widgets/qmdiarea.cpp b/src/widgets/widgets/qmdiarea.cpp
index dc65317de8..953d25088e 100644
--- a/src/widgets/widgets/qmdiarea.cpp
+++ b/src/widgets/widgets/qmdiarea.cpp
@@ -165,7 +165,6 @@
#include <QPainter>
#include <QFontMetrics>
#include <QStyleOption>
-#include <QDesktopWidget>
#include <private/qdesktopwidget_p.h>
#include <QDebug>
#include <qmath.h>
@@ -1733,7 +1732,7 @@ QMdiArea::~QMdiArea()
*/
QSize QMdiArea::sizeHint() const
{
- // Calculate a proper scale factor for QDesktopWidget::size().
+ // Calculate a proper scale factor for the desktop's size.
// This also takes into account that we can have nested workspaces.
int nestedCount = 0;
QWidget *widget = this->parentWidget();
diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp
index fdfa9b327f..b578f476e9 100644
--- a/src/widgets/widgets/qmenu.cpp
+++ b/src/widgets/widgets/qmenu.cpp
@@ -54,7 +54,6 @@
#include "qmacnativewidget_mac.h"
#endif
#include "qapplication.h"
-#include "qdesktopwidget.h"
#ifndef QT_NO_ACCESSIBILITY
# include "qaccessible.h"
#endif
@@ -324,8 +323,8 @@ QRect QMenuPrivate::popupGeometry() const
{
Q_Q(const QMenu);
return useFullScreenForPopup()
- ? QDesktopWidgetPrivate::screenGeometry(q)
- : QDesktopWidgetPrivate::availableGeometry(q);
+ ? QWidgetPrivate::screenGeometry(q)
+ : QWidgetPrivate::availableScreenGeometry(q);
}
QRect QMenuPrivate::popupGeometry(int screen) const
@@ -2385,15 +2384,12 @@ void QMenuPrivate::popup(const QPoint &p, QAction *atAction, PositionFunction po
// Ensure that we get correct sizeHints by placing this window on the correct screen.
// However if the QMenu was constructed with a QDesktopScreenWidget as its parent,
// then initialScreenIndex was set, so we should respect that for the lifetime of this menu.
- // Use d->popupScreen to remember, because initialScreenIndex will be reset after the first showing.
// However if eventLoop exists, then exec() already did this by calling createWinId(); so leave it alone. (QTBUG-76162)
if (!eventLoop) {
bool screenSet = false;
- const int screenIndex = topData()->initialScreenIndex;
- if (screenIndex >= 0)
- popupScreen = screenIndex;
- if (auto s = QGuiApplication::screens().value(popupScreen)) {
- if (setScreen(s))
+ QScreen *screen = topData()->initialScreen;
+ if (screen) {
+ if (setScreen(screen))
itemsDirty = true;
screenSet = true;
} else if (QMenu *parentMenu = qobject_cast<QMenu *>(parent)) {
diff --git a/src/widgets/widgets/qmenu_p.h b/src/widgets/widgets/qmenu_p.h
index e735052507..3e49f0780d 100644
--- a/src/widgets/widgets/qmenu_p.h
+++ b/src/widgets/widgets/qmenu_p.h
@@ -522,8 +522,6 @@ public:
bool tearoffHighlighted : 1;
//menu fading/scrolling effects
bool doChildEffects : 1;
-
- int popupScreen = -1;
};
QT_END_NAMESPACE
diff --git a/src/widgets/widgets/qmenubar.cpp b/src/widgets/widgets/qmenubar.cpp
index b7c071bfcd..b0731df50a 100644
--- a/src/widgets/widgets/qmenubar.cpp
+++ b/src/widgets/widgets/qmenubar.cpp
@@ -42,7 +42,6 @@
#include <qstyle.h>
#include <qlayout.h>
#include <qapplication.h>
-#include <qdesktopwidget.h>
#ifndef QT_NO_ACCESSIBILITY
# include <qaccessible.h>
#endif
@@ -355,7 +354,7 @@ void QMenuBarPrivate::popupAction(QAction *action, bool activateFirst)
if(!defaultPopDown || (fitUp && !fitDown))
pos.setY(qMax(screenRect.y(), q->mapToGlobal(QPoint(0, adjustedActionRect.top()-popup_size.height())).y()));
- QMenuPrivate::get(activeMenu)->topData()->initialScreenIndex = QGuiApplication::screens().indexOf(popupScreen);
+ QMenuPrivate::get(activeMenu)->topData()->initialScreen = popupScreen;
activeMenu->popup(pos);
if(activateFirst)
activeMenu->d_func()->setFirstActionActive();
diff --git a/src/widgets/widgets/qpushbutton.cpp b/src/widgets/widgets/qpushbutton.cpp
index bb2848aa43..8657eb4174 100644
--- a/src/widgets/widgets/qpushbutton.cpp
+++ b/src/widgets/widgets/qpushbutton.cpp
@@ -39,7 +39,6 @@
#include "qapplication.h"
#include "qbitmap.h"
-#include "qdesktopwidget.h"
#include <private/qdesktopwidget_p.h>
#if QT_CONFIG(dialog)
#include <private/qdialog_p.h>
@@ -622,7 +621,7 @@ QPoint QPushButtonPrivate::adjustedMenuPosition()
QPoint globalPos = q->mapToGlobal(rect.topLeft());
int x = globalPos.x();
int y = globalPos.y();
- const QRect availableGeometry = QDesktopWidgetPrivate::availableGeometry(q);
+ const QRect availableGeometry = QWidgetPrivate::availableScreenGeometry(q);
if (horizontal) {
if (globalPos.y() + rect.height() + menuSize.height() <= availableGeometry.bottom()) {
y += rect.height();
diff --git a/src/widgets/widgets/qsizegrip.cpp b/src/widgets/widgets/qsizegrip.cpp
index 396503566c..baebd009e4 100644
--- a/src/widgets/widgets/qsizegrip.cpp
+++ b/src/widgets/widgets/qsizegrip.cpp
@@ -48,7 +48,6 @@
#include "qstyleoption.h"
#include "qlayout.h"
#include "qdebug.h"
-#include <QDesktopWidget>
#include <private/qwidget_p.h>
#include <private/qdesktopwidget_p.h>
@@ -304,7 +303,7 @@ void QSizeGrip::mousePressEvent(QMouseEvent * e)
bool hasVerticalSizeConstraint = true;
bool hasHorizontalSizeConstraint = true;
if (tlw->isWindow())
- availableGeometry = QDesktopWidgetPrivate::availableGeometry(tlw);
+ availableGeometry = QWidgetPrivate::availableScreenGeometry(tlw);
else {
const QWidget *tlwParent = tlw->parentWidget();
// Check if tlw is inside QAbstractScrollArea/QScrollArea.
diff --git a/src/widgets/widgets/qsplashscreen.cpp b/src/widgets/widgets/qsplashscreen.cpp
index b6fa97eaed..1f1c71dcb8 100644
--- a/src/widgets/widgets/qsplashscreen.cpp
+++ b/src/widgets/widgets/qsplashscreen.cpp
@@ -40,7 +40,6 @@
#include "qsplashscreen.h"
#include "qapplication.h"
-#include "qdesktopwidget.h"
#include <private/qdesktopwidget_p.h>
#include "qpainter.h"
#include "qpixmap.h"
@@ -294,25 +293,14 @@ void QSplashScreen::setPixmap(const QPixmap &pixmap)
// 3) If a widget with associated QWindow is found, use that
// 4) When nothing can be found, try to center it over the cursor
-#if QT_DEPRECATED_SINCE(5, 15)
-static inline int screenNumberOf(const QDesktopScreenWidget *dsw)
-{
- auto desktopWidgetPrivate =
- static_cast<QDesktopWidgetPrivate *>(qt_widget_private(QApplication::desktop()));
- return desktopWidgetPrivate->screens.indexOf(const_cast<QDesktopScreenWidget *>(dsw));
-}
-#endif
-
const QScreen *QSplashScreenPrivate::screenFor(const QWidget *w)
{
if (w && w->screen())
return w->screen();
for (const QWidget *p = w; p !=nullptr ; p = p->parentWidget()) {
-#if QT_DEPRECATED_SINCE(5, 15)
if (auto dsw = qobject_cast<const QDesktopScreenWidget *>(p))
- return QGuiApplication::screens().value(screenNumberOf(dsw));
-#endif
+ return dsw->screen();
if (QWindow *window = p->windowHandle())
return window->screen();
}
diff --git a/src/widgets/widgets/qtabwidget.cpp b/src/widgets/widgets/qtabwidget.cpp
index 6f9e51cf4a..e054156995 100644
--- a/src/widgets/widgets/qtabwidget.cpp
+++ b/src/widgets/widgets/qtabwidget.cpp
@@ -44,7 +44,6 @@
#include "private/qtabbar_p.h"
#include "qapplication.h"
#include "qbitmap.h"
-#include "qdesktopwidget.h"
#include <private/qdesktopwidget_p.h>
#include "qevent.h"
#include "qlayout.h"
diff --git a/src/widgets/widgets/qtextbrowser.cpp b/src/widgets/widgets/qtextbrowser.cpp
index c9c5c3f190..a7fe0ad2d5 100644
--- a/src/widgets/widgets/qtextbrowser.cpp
+++ b/src/widgets/widgets/qtextbrowser.cpp
@@ -44,7 +44,6 @@
#include <qapplication.h>
#include <private/qapplication_p.h>
#include <qevent.h>
-#include <qdesktopwidget.h>
#include <qdebug.h>
#include <qabstracttextdocumentlayout.h>
#include "private/qtextdocumentlayout_p.h"
diff --git a/src/widgets/widgets/qtoolbutton.cpp b/src/widgets/widgets/qtoolbutton.cpp
index d350e1731e..edd4788806 100644
--- a/src/widgets/widgets/qtoolbutton.cpp
+++ b/src/widgets/widgets/qtoolbutton.cpp
@@ -40,7 +40,6 @@
#include "qtoolbutton.h"
#include <qapplication.h>
-#include <qdesktopwidget.h>
#include <private/qdesktopwidget_p.h>
#include <qdrawutil.h>
#include <qevent.h>
diff --git a/src/widgets/widgets/qwidgetresizehandler.cpp b/src/widgets/widgets/qwidgetresizehandler.cpp
index 1c850741bb..4f6541f509 100644
--- a/src/widgets/widgets/qwidgetresizehandler.cpp
+++ b/src/widgets/widgets/qwidgetresizehandler.cpp
@@ -41,7 +41,6 @@
#include "qframe.h"
#include "qapplication.h"
-#include "qdesktopwidget.h"
#include <private/qdesktopwidget_p.h>
#include "qcursor.h"
#if QT_CONFIG(sizegrip)
@@ -221,7 +220,7 @@ void QWidgetResizeHandler::mouseMoveEvent(QMouseEvent *e)
// Workaround for window managers which refuse to move a tool window partially offscreen.
if (QGuiApplication::platformName() == QLatin1String("xcb")) {
- const QRect desktop = QDesktopWidgetPrivate::availableGeometry(widget);
+ const QRect desktop = QWidgetPrivate::availableScreenGeometry(widget);
pp.rx() = qMax(pp.x(), desktop.left());
pp.ry() = qMax(pp.y(), desktop.top());
p.rx() = qMin(p.x(), desktop.right());
diff --git a/src/widgets/widgets/qwidgettextcontrol.cpp b/src/widgets/widgets/qwidgettextcontrol.cpp
index ff82b1d37c..a4823ca8dd 100644
--- a/src/widgets/widgets/qwidgettextcontrol.cpp
+++ b/src/widgets/widgets/qwidgettextcontrol.cpp
@@ -1943,10 +1943,8 @@ void QWidgetTextControlPrivate::contextMenuEvent(const QPoint &screenPos, const
if (!menu)
return;
menu->setAttribute(Qt::WA_DeleteOnClose);
- if (auto *window = static_cast<QWidget *>(parent)->window()->windowHandle()) {
- QMenuPrivate::get(menu)->topData()->initialScreenIndex =
- QGuiApplication::screens().indexOf(window->screen());
- }
+ if (auto *window = static_cast<QWidget *>(parent)->window()->windowHandle())
+ QMenuPrivate::get(menu)->topData()->initialScreen = window->screen();
menu->popup(screenPos);
#endif
}
diff --git a/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp b/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp
index 87d513bacb..24f10e559c 100644
--- a/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp
+++ b/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp
@@ -33,7 +33,6 @@
#include <qimage.h>
#include <qimagereader.h>
#ifndef QT_NO_WIDGETS
-#include <qdesktopwidget.h>
#include <qsplashscreen.h>
#endif
#include <qpaintengine.h>
diff --git a/tests/auto/other/languagechange/tst_languagechange.cpp b/tests/auto/other/languagechange/tst_languagechange.cpp
index fc3d0f1c06..632039ec5a 100644
--- a/tests/auto/other/languagechange/tst_languagechange.cpp
+++ b/tests/auto/other/languagechange/tst_languagechange.cpp
@@ -41,7 +41,6 @@
#include <QtWidgets/QColorDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QFileDialog>
-#include <QtWidgets/QDesktopWidget>
class tst_languageChange : public QObject
{
diff --git a/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp b/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp
index d469b0f9bd..91d0c07efd 100644
--- a/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp
+++ b/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp
@@ -37,7 +37,6 @@
#include <qstyle.h>
#include <QVBoxLayout>
#include <QSizeGrip>
-#include <QDesktopWidget>
#include <QGraphicsProxyWidget>
#include <QGraphicsView>
#include <QWindow>
diff --git a/tests/auto/widgets/effects/qgraphicseffect/tst_qgraphicseffect.cpp b/tests/auto/widgets/effects/qgraphicseffect/tst_qgraphicseffect.cpp
index 19288d07a7..38181c8af0 100644
--- a/tests/auto/widgets/effects/qgraphicseffect/tst_qgraphicseffect.cpp
+++ b/tests/auto/widgets/effects/qgraphicseffect/tst_qgraphicseffect.cpp
@@ -28,7 +28,6 @@
#include <QtTest/QtTestWidgets>
-#include <QtWidgets/qdesktopwidget.h>
#include <QtWidgets/qgraphicseffect.h>
#include <QtWidgets/qgraphicsview.h>
#include <QtWidgets/qgraphicsscene.h>
diff --git a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
index e7a79d017b..9ae127dbe0 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
@@ -38,7 +38,6 @@
#include <QAbstractTextDocumentLayout>
#include <QBitmap>
#include <QCursor>
-#include <QDesktopWidget>
#include <QScreen>
#include <QLabel>
#include <QDial>
diff --git a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp
index 1553b6e982..afb1b18af0 100644
--- a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp
+++ b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp
@@ -27,7 +27,6 @@
**
****************************************************************************/
-#include <QDesktopWidget>
#include <QHeaderView>
#include <QProxyStyle>
#include <QSignalSpy>
diff --git a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp
index f85b885b34..531d1e823a 100644
--- a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp
+++ b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp
@@ -28,7 +28,6 @@
#include "../../../../shared/fakedirmodel.h"
-#include <QDesktopWidget>
#include <QHeaderView>
#include <QLabel>
#include <QLineEdit>
diff --git a/tests/auto/widgets/kernel/qdesktopwidget/.gitignore b/tests/auto/widgets/kernel/qdesktopwidget/.gitignore
deleted file mode 100644
index d6f7cc7ca9..0000000000
--- a/tests/auto/widgets/kernel/qdesktopwidget/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-tst_qdesktopwidget
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index 873d0460ff..b05d6cd96e 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
@@ -44,7 +44,6 @@
#include <qstyle.h>
#include <qwidget.h>
#include <qstylefactory.h>
-#include <qdesktopwidget.h>
#include <private/qwidget_p.h>
#include <private/qwidgetrepaintmanager_p.h>
#include <private/qapplication_p.h>
@@ -9170,7 +9169,7 @@ void tst_QWidget::translucentWidget()
QPixmap widgetSnapshot;
#ifdef Q_OS_WIN
- QWidget *desktopWidget = QApplication::desktop()->screen(0);
+ QWidget *desktopWidget = QApplication::desktop();
widgetSnapshot = grabWindow(desktopWidget->windowHandle(), labelPos.x(), labelPos.y(), label.width(), label.height());
#else
widgetSnapshot = label.grab(QRect(QPoint(0, 0), label.size()));
diff --git a/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp b/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp
index f8a91e6ec6..7899f1f523 100644
--- a/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp
+++ b/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp
@@ -40,7 +40,6 @@
#include <QStyleOption>
#include <QVBoxLayout>
#include <QLineEdit>
-#include <QDesktopWidget>
#include <QDockWidget>
#include <QScrollBar>
#include <QTextEdit>
diff --git a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
index 8ce0ea2184..783476cf67 100644
--- a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
+++ b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
@@ -38,7 +38,6 @@
#include <QStatusBar>
#include <QListWidget>
#include <QWidgetAction>
-#include <QDesktopWidget>
#include <QScreen>
#include <QSpinBox>
#include <qdialog.h>
diff --git a/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp b/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp
index cb4fc201f6..ccd8d0ec05 100644
--- a/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp
+++ b/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp
@@ -31,7 +31,6 @@
#include <QtGui/QPainter>
#include <QtGui/QScreen>
#include <QtGui/QStaticText>
-#include <QtWidgets/QDesktopWidget>
#include <QtWidgets/QGraphicsView>
#include <QtWidgets/QGraphicsScene>
#include <QtWidgets/QGraphicsRectItem>
@@ -504,8 +503,8 @@ static QPixmap grabWidgetWithoutRepaint(const QWidget *widget, QRect clipArea)
// because GDI functions can't grab OpenGL layer content.
// Instead the whole screen should be captured, with an adjusted clip area, which contains
// the final composited content.
- QDesktopWidget *desktopWidget = QApplication::desktop();
- const QWidget *mainScreenWidget = desktopWidget->screen();
+ QWidget *desktopWidget = QApplication::desktop(QGuiApplication::primaryScreen());
+ const QWidget *mainScreenWidget = desktopWidget;
targetWidget = mainScreenWidget;
clipArea = QRect(widget->mapToGlobal(clipArea.topLeft()),
widget->mapToGlobal(clipArea.bottomRight()));
diff --git a/tests/benchmarks/gui/painting/qtbench/benchmarktests.h b/tests/benchmarks/gui/painting/qtbench/benchmarktests.h
index 6d388fcaad..ed03182597 100644
--- a/tests/benchmarks/gui/painting/qtbench/benchmarktests.h
+++ b/tests/benchmarks/gui/painting/qtbench/benchmarktests.h
@@ -31,7 +31,6 @@
#include <QApplication>
#include <QTextDocument>
-#include <QDesktopWidget>
#include <QTextLayout>
#include <QFontMetrics>
#include <QDebug>
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp b/tests/benchmarks/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
index a9fba18f53..27f5a90bab 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
@@ -33,7 +33,6 @@
#include <QtWidgets/QGraphicsView>
#include <QtGui/QImage>
#include <QtGui/QPixmapCache>
-#include <QtWidgets/QDesktopWidget>
#include "chiptester/chiptester.h"
//#define CALLGRIND_DEBUG
@@ -69,7 +68,7 @@ public:
void tryResize(int width, int height)
{
- QDesktopWidget *desktop = QApplication::desktop();
+ QWidget *desktop = QApplication::desktop();
if (desktop->width() < width)
width = desktop->width();
if (desktop->height() < height)
diff --git a/tests/manual/diaglib/qwidgetdump.cpp b/tests/manual/diaglib/qwidgetdump.cpp
index 371f3e2311..21007e8df9 100644
--- a/tests/manual/diaglib/qwidgetdump.cpp
+++ b/tests/manual/diaglib/qwidgetdump.cpp
@@ -43,7 +43,7 @@ namespace QtDiag {
static const char *qtWidgetClasses[] = {
"QAbstractItemView", "QAbstractScrollArea", "QAbstractSlider", "QAbstractSpinBox",
"QCalendarWidget", "QCheckBox", "QColorDialog", "QColumnView", "QComboBox",
- "QCommandLinkButton", "QDateEdit", "QDateTimeEdit", "QDesktopWidget", "QDial",
+ "QCommandLinkButton", "QDateEdit", "QDateTimeEdit", "QDial",
"QDialog", "QDialogButtonBox", "QDockWidget", "QDoubleSpinBox", "QErrorMessage",
"QFileDialog", "QFontComboBox", "QFontDialog", "QFrame", "QGraphicsView",
"QGroupBox", "QHeaderView", "QInputDialog", "QLCDNumber", "QLabel", "QLineEdit",
diff --git a/tests/manual/dialogs/printdialogpanel.cpp b/tests/manual/dialogs/printdialogpanel.cpp
index dcd8b43bf3..7f834399e4 100644
--- a/tests/manual/dialogs/printdialogpanel.cpp
+++ b/tests/manual/dialogs/printdialogpanel.cpp
@@ -37,7 +37,6 @@
#include <QPrintPreviewDialog>
#include <QPageSetupDialog>
#include <QApplication>
-#include <QDesktopWidget>
#include <QGroupBox>
#include <QCheckBox>
#include <QLabel>
diff --git a/tests/manual/foreignwindows/main.cpp b/tests/manual/foreignwindows/main.cpp
index 843f4e39ef..436538df70 100644
--- a/tests/manual/foreignwindows/main.cpp
+++ b/tests/manual/foreignwindows/main.cpp
@@ -28,7 +28,6 @@
#include <QtGui/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QDesktopWidget>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenu>
#include <QtWidgets/QMenuBar>
diff --git a/tests/manual/qcursor/qcursorhighdpi/main.cpp b/tests/manual/qcursor/qcursorhighdpi/main.cpp
index e70be333fd..5a8bc542b9 100644
--- a/tests/manual/qcursor/qcursorhighdpi/main.cpp
+++ b/tests/manual/qcursor/qcursorhighdpi/main.cpp
@@ -28,7 +28,6 @@
#include <QAction>
#include <QApplication>
-#include <QDesktopWidget>
#include <QGridLayout>
#include <QLabel>
#include <QMainWindow>
@@ -83,8 +82,7 @@ static QString screenInfo(const QWidget *w)
{
QString result;
QTextStream str(&result);
-#if QT_VERSION > 0x050000
- QScreen *screen = Q_NULLPTR;
+ QScreen *screen = nullptr;
if (const QWindow *window = w->windowHandle())
screen = window->screen();
if (screen) {
@@ -98,12 +96,6 @@ static QString screenInfo(const QWidget *w)
} else {
str << "<null>";
}
-#else
- QDesktopWidget *desktop = QApplication::desktop();
- int screenNumber = desktop->screenNumber(w);
- str << "Screen #" <<screenNumber << ' ' << desktop->screenGeometry(screenNumber).width()
- << 'x' << desktop->screenGeometry(screenNumber).height() << " PD: " << w->logicalDpiX() << "DPI";
-#endif
#ifdef Q_OS_WIN
str << ", SM_C_CURSOR: " << GetSystemMetrics(SM_CXCURSOR) << 'x' << GetSystemMetrics(SM_CYCURSOR);
#endif
diff --git a/tests/manual/qdesktopwidget/CMakeLists.txt b/tests/manual/qdesktopwidget/CMakeLists.txt
deleted file mode 100644
index 2034e3c368..0000000000
--- a/tests/manual/qdesktopwidget/CMakeLists.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-# Generated from qdesktopwidget.pro.
-
-#####################################################################
-## qdesktopwidget Binary:
-#####################################################################
-
-add_qt_manual_test(qdesktopwidget
- GUI
- SOURCES
- main.cpp
- PUBLIC_LIBRARIES
- Qt::Gui
- Qt::Widgets
-)
-
-#### Keys ignored in scope 1:.:.:qdesktopwidget.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qdesktopwidget/main.cpp b/tests/manual/qdesktopwidget/main.cpp
deleted file mode 100644
index 978dc62b0e..0000000000
--- a/tests/manual/qdesktopwidget/main.cpp
+++ /dev/null
@@ -1,212 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QGraphicsView>
-#include <QGraphicsRectItem>
-#include <QDesktopWidget>
-#include <QApplication>
-#include <QDebug>
-
-class DesktopView : public QGraphicsView
-{
-#if QT_DEPRECATED_SINCE(5, 11)
- Q_OBJECT
-public:
- DesktopView()
- : that(0)
- {
- scene = new QGraphicsScene;
- setScene(scene);
-
- QDesktopWidget *desktop = QApplication::desktop();
- connect(desktop, SIGNAL(resized(int)), this, SLOT(updateScene()));
- connect(desktop, SIGNAL(resized(int)), this, SLOT(desktopResized(int)));
- connect(desktop, SIGNAL(workAreaResized(int)), this, SLOT(updateScene()));
- connect(desktop, SIGNAL(workAreaResized(int)), this, SLOT(desktopWorkAreaResized(int)));
- connect(desktop, SIGNAL(screenCountChanged(int)), this, SLOT(updateScene()));
- connect(desktop, SIGNAL(screenCountChanged(int)), this, SLOT(desktopScreenCountChanged(int)));
-
- updateScene();
-
- QTransform transform;
- transform.scale(0.25, 0.25);
- setTransform(transform);
-
- setBackgroundBrush(Qt::darkGray);
- desktopScreenCountChanged(-1);
- }
-
-protected:
- void moveEvent(QMoveEvent *e)
- {
- if (that) {
- that->setRect(appRect());
- scene->update();
- }
- QGraphicsView::moveEvent(e);
- }
- void resizeEvent(QResizeEvent *e)
- {
- if (that) {
- that->setRect(appRect());
- }
- QGraphicsView::resizeEvent(e);
- }
-
-private slots:
- void updateScene()
- {
- scene->clear();
-
- const QDesktopWidget *desktop = QApplication::desktop();
- const bool isVirtualDesktop = desktop->isVirtualDesktop();
- const int homeScreen = desktop->screenNumber(this);
-
- QRect sceneRect;
- int screenCount = desktop->screenCount();
- for (int s = 0; s < screenCount; ++s) {
- const bool isPrimary = desktop->primaryScreen() == s;
- const QRect screenRect = desktop->screenGeometry(s);
- const QRect workRect = desktop->availableGeometry(s);
- const QBrush fillBrush = palette().brush(isPrimary ? QPalette::Active : QPalette::Inactive, QPalette::Highlight);
- QGraphicsRectItem *screen = new QGraphicsRectItem(0, 0, screenRect.width(), screenRect.height());
-
- if (isVirtualDesktop) {
- thatRoot = QPoint();
- screen->setPos(screenRect.x(), screenRect.y());
- } else {
- // for non-virtual desktops we assume that screens are
- // simply next to each other
- if (s)
- screen->setPos(sceneRect.right(), 0);
- if (s == homeScreen)
- thatRoot = screen->pos().toPoint();
- }
-
- screen->setBrush(fillBrush);
- scene->addItem(screen);
- sceneRect.setLeft(qMin(sceneRect.left(), screenRect.left()));
- sceneRect.setRight(qMax(sceneRect.right(), screenRect.right()));
- sceneRect.setTop(qMin(sceneRect.top(), screenRect.top()));
- sceneRect.setBottom(qMax(sceneRect.bottom(), screenRect.bottom()));
-
- QGraphicsRectItem *workArea = new QGraphicsRectItem(screen);
- workArea->setRect(0, 0, workRect.width(), workRect.height());
- workArea->setPos(workRect.x() - screenRect.x(), workRect.y() - screenRect.y());
- workArea->setBrush(Qt::white);
-
- QGraphicsSimpleTextItem *screenNumber = new QGraphicsSimpleTextItem(workArea);
- screenNumber->setText(QString::number(s));
- screenNumber->setPen(QPen(Qt::black, 1));
- screenNumber->setBrush(fillBrush);
- screenNumber->setFont(QFont("Arial Black", 18));
- screenNumber->setTransform(QTransform().scale(10, 10));
- screenNumber->setTransformOriginPoint(screenNumber->boundingRect().center());
- QSizeF center = (workRect.size() - screenNumber->boundingRect().size()) / 2;
- screenNumber->setPos(center.width(), center.height());
-
- screen->show();
- screen->setZValue(1);
- }
-
- if (isVirtualDesktop) {
- QGraphicsRectItem *virtualDesktop = new QGraphicsRectItem;
- virtualDesktop->setRect(sceneRect);
- virtualDesktop->setPen(QPen(Qt::black));
- virtualDesktop->setBrush(Qt::DiagCrossPattern);
- scene->addItem(virtualDesktop);
- virtualDesktop->setZValue(-1);
- virtualDesktop->show();
- }
-
- that = new QGraphicsRectItem;
- that->setBrush(Qt::red);
- that->setOpacity(0.5);
- that->setZValue(2);
- that->setRect(appRect());
- that->show();
- scene->addItem(that);
-
- scene->setSceneRect(sceneRect);
- scene->update();
- }
-
- QRect appRect() const
- {
- QRect rect = frameGeometry();
- if (!QApplication::desktop()->isVirtualDesktop()) {
- rect.translate(thatRoot);
- }
- return rect;
- }
-
- void desktopResized(int screen)
- {
- qDebug() << "Screen was resized: " << screen
- << ", new size =" << QApplication::desktop()->screenGeometry(screen);
- }
- void desktopWorkAreaResized(int screen)
- {
- qDebug() << "Screen workarea was resized: " << screen
- << ", new size =" << QApplication::desktop()->availableGeometry(screen);
- }
- void desktopScreenCountChanged(int screenCount)
- {
- QDesktopWidget *desktop = QApplication::desktop();
- qDebug() << "";
- if (screenCount != -1) {
- qDebug() << "Screen count was changed to " << screenCount;
- } else {
- screenCount = desktop->screenCount();
- qDebug() << "Screen count: " << screenCount;
- }
- for (int i = 0; i < screenCount; ++i) {
- qDebug() << " #" << i << ": geometry =" << desktop->screenGeometry(i)
- << "; available geometry =" << desktop->availableGeometry(i);
- }
- qDebug() << "";
- }
-
-private:
- QGraphicsScene *scene;
- QGraphicsRectItem *that;
- QPoint thatRoot;
-#endif
-};
-
-#include "main.moc"
-
-int main(int argc, char **argv)
-{
- QApplication app(argc, argv);
-
- DesktopView view;
- view.show();
-
- return app.exec();
-}
diff --git a/tests/manual/qdesktopwidget/qdesktopwidget.pro b/tests/manual/qdesktopwidget/qdesktopwidget.pro
deleted file mode 100644
index 8979e7ef35..0000000000
--- a/tests/manual/qdesktopwidget/qdesktopwidget.pro
+++ /dev/null
@@ -1,3 +0,0 @@
-TEMPLATE = app
-QT += widgets
-SOURCES += main.cpp
diff --git a/tests/manual/qscreen/main.cpp b/tests/manual/qscreen/main.cpp
index d2c9842365..e6f0dc9fd7 100644
--- a/tests/manual/qscreen/main.cpp
+++ b/tests/manual/qscreen/main.cpp
@@ -39,7 +39,6 @@
#include <QAction>
#include <QStatusBar>
#include <QLineEdit>
-#include <QDesktopWidget>
#include <QPushButton>
#include <QLabel>
#include <QMouseEvent>
@@ -229,14 +228,11 @@ void screenAdded(QScreen* screen)
(screen->virtualSiblings().isEmpty() ? "none" : qPrintable(screen->virtualSiblings().first()->name())));
ScreenWatcherMainWindow *w = new ScreenWatcherMainWindow(screen);
- // Set the screen via QDesktopWidget. This corresponds to setScreen() for the underlying
- // QWindow. This is essential when having separate X screens since the the positioning below is
- // not sufficient to get the windows show up on the desired screen.
- QList<QScreen *> screens = QGuiApplication::screens();
- int screenNumber = screens.indexOf(screen);
- Q_ASSERT(screenNumber >= 0);
- // ### Qt 6: Find a replacement for QDesktopWidget::screen()
- w->setParent(qApp->desktop()->screen(screenNumber));
+ // Set the screen; this corresponds to setScreen() for the underlying
+ // QWindow. This is essential when having separate X screens since the
+ // positioning below is not sufficient to get the windows show up on the
+ // desired screen.
+ w->setParent(qApp->desktop(screen));
w->show();
diff --git a/tests/manual/qtabbar/main.cpp b/tests/manual/qtabbar/main.cpp
index 82bcd838e6..6af80958cd 100644
--- a/tests/manual/qtabbar/main.cpp
+++ b/tests/manual/qtabbar/main.cpp
@@ -54,7 +54,6 @@
#include <QTabBar>
#include <QLabel>
#include <QLayout>
-#include <QDesktopWidget>
#include <QTabWidget>
#include <QProxyStyle>
#include <qdebug.h>