diff options
author | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2020-07-07 22:36:57 +0200 |
---|---|---|
committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2020-07-13 22:57:14 +0200 |
commit | 7b6beed7434545ab937e7c8dddd672e25812ed0e (patch) | |
tree | 4730c95e847fadb85168034f621d92684398aef7 /src/widgets | |
parent | ed3ac187b562159f58c9e35fd96a24ddb702083d (diff) |
Remove support for users to create their own Qt::Desktop type widgets
[ChangeLog][QtWidgets][QWidget] Creating QWidget instances with the
Qt::Desktop window type set is no longer supported.
Change-Id: I712861d7104c4ae5cbdd5d54cd0134bf69eb144e
Task-number: QTBUG-62094
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Diffstat (limited to 'src/widgets')
-rw-r--r-- | src/widgets/kernel/qwidget.cpp | 35 |
1 files changed, 15 insertions, 20 deletions
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 7c20657a85..dcebc5e5df 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -132,7 +132,6 @@ static inline bool qRectIntersects(const QRect &r1, const QRect &r2) } extern bool qt_sendSpontaneousEvent(QObject*, QEvent*); // qapplication.cpp -extern QDesktopWidget *qt_desktopWidget; // qapplication.cpp QWidgetPrivate::QWidgetPrivate(int version) : QObjectPrivate(version) @@ -1560,20 +1559,14 @@ int QWidgetPrivate::maxInstances = 0; // Maximum number of widget instances void QWidgetPrivate::setWinId(WId id) // set widget identifier { Q_Q(QWidget); - // the user might create a widget with Qt::Desktop window - // attribute (or create another QDesktopWidget instance), which - // will have the same windowid (the root window id) as the - // qt_desktopWidget. We should not add the second desktop widget - // to the mapper. - bool userDesktopWidget = qt_desktopWidget != nullptr && qt_desktopWidget != q && q->windowType() == Qt::Desktop; - if (mapper && data.winid && !userDesktopWidget) { + if (mapper && data.winid) { mapper->remove(data.winid); } const WId oldWinId = data.winid; data.winid = id; - if (mapper && id && !userDesktopWidget) { + if (mapper && id) { mapper->insert(data.winid, q); } @@ -3487,12 +3480,8 @@ QPoint QWidget::pos() const See the \l{Window Geometry} documentation for an overview of geometry issues with windows. - \note Do not use this function to find the height of a screen - on a \l{QDesktopWidget}{multiple screen desktop}. Read - \l{QDesktopWidget#Screen Geometry}{this note} for details. - By default, this property contains a value that depends on the user's - platform and screen geometry. + platform and \l{screen geometry}{QScreen::geometry}. \sa geometry, width, size */ @@ -7135,7 +7124,7 @@ QByteArray QWidget::saveGeometry() const // - Qt 5.12 - today : Version 3.0, save QWidget::geometry() quint16 majorVersion = 3; quint16 minorVersion = 0; - const int screenNumber = QDesktopWidgetPrivate::screenNumber(this); + const int screenNumber = QGuiApplication::screens().indexOf(screen()); stream << magicNumber << majorVersion << minorVersion @@ -7144,7 +7133,7 @@ QByteArray QWidget::saveGeometry() const << qint32(screenNumber) << quint8(windowState() & Qt::WindowMaximized) << quint8(windowState() & Qt::WindowFullScreen) - << qint32(QDesktopWidgetPrivate::screenGeometry(screenNumber).width()) // added in 2.0 + << qint32(screen()->geometry().width()) // added in 2.0 << geometry(); // added in 3.0 return array; } @@ -7229,7 +7218,8 @@ bool QWidget::restoreGeometry(const QByteArray &geometry) if (restoredScreenNumber >= qMax(QGuiApplication::screens().size(), 1)) restoredScreenNumber = 0; - const qreal screenWidthF = qreal(QDesktopWidgetPrivate::screenGeometry(restoredScreenNumber).width()); + const QScreen *restoredScreen = QGuiApplication::screens().value(restoredScreenNumber, nullptr); + const qreal screenWidthF = restoredScreen ? qreal(restoredScreen->geometry().width()) : 0; // Sanity check bailing out when large variations of screen sizes occur due to // high DPI scaling or different levels of DPI awareness. if (restoredScreenWidth) { @@ -7254,7 +7244,8 @@ bool QWidget::restoreGeometry(const QByteArray &geometry) .expandedTo(d_func()->adjustedSize())); } - const QRect availableGeometry = QDesktopWidgetPrivate::availableGeometry(restoredScreenNumber); + const QRect availableGeometry = restoredScreen ? restoredScreen->availableGeometry() + : QRect(); // Modify the restored geometry if we are about to restore to coordinates // that would make the window "lost". This happens if: @@ -7278,7 +7269,7 @@ bool QWidget::restoreGeometry(const QByteArray &geometry) // Setting a geometry on an already maximized window causes this to be // restored into a broken, half-maximized state, non-resizable state (QTBUG-4397). // Move the window in normal state if needed. - if (restoredScreenNumber != QDesktopWidgetPrivate::screenNumber(this)) { + if (restoredScreen != screen()) { setWindowState(Qt::WindowNoState); setGeometry(restoredNormalGeometry); } @@ -8368,7 +8359,11 @@ QSize QWidgetPrivate::adjustedSize() const if (exp & Qt::Vertical) s.setHeight(qMax(s.height(), 100)); - QRect screen = QDesktopWidgetPrivate::screenGeometry(q->pos()); + QRect screen; + if (const QScreen *screenAtPoint = QGuiApplication::screenAt(q->pos())) + screen = screenAtPoint->geometry(); + else + screen = QGuiApplication::primaryScreen()->geometry(); s.setWidth(qMin(s.width(), screen.width()*2/3)); s.setHeight(qMin(s.height(), screen.height()*2/3)); |