From 23697466cae8f1a49537fed1e60db8cea79207b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Sun, 13 Aug 2017 15:19:20 +0200 Subject: [PATCH] Reduce usage of QDesktopWidget to resolve screen properties in QtWidgets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removes the need to initialize QDesktopWidget, just to look up which screen a widget would map to, the geometry of a screen, number of screens, etc. Change-Id: Ieb153b9ff6d3fba645fc528d6e430e8392f990bf Reviewed-by: Gabriel de Dietrich Reviewed-by: Simon Hausmann Reviewed-by: Tor Arne Vestbø --- src/widgets/dialogs/qcolordialog.cpp | 5 +- src/widgets/dialogs/qdialog.cpp | 11 ++-- src/widgets/dialogs/qmessagebox.cpp | 3 +- src/widgets/dialogs/qwizard.cpp | 3 +- src/widgets/graphicsview/qgraphicsview.cpp | 3 +- src/widgets/kernel/qdesktopwidget.cpp | 65 ++++++++++++++++++++ src/widgets/kernel/qdesktopwidget_p.h | 23 +++++++ src/widgets/kernel/qtooltip.cpp | 13 ++-- src/widgets/kernel/qwhatsthis.cpp | 9 +-- src/widgets/kernel/qwidget.cpp | 25 ++++---- src/widgets/util/qcompleter.cpp | 3 +- src/widgets/util/qsystemtrayicon.cpp | 5 +- src/widgets/widgets/qcombobox.cpp | 7 ++- src/widgets/widgets/qdatetimeedit.cpp | 3 +- src/widgets/widgets/qdockarealayout.cpp | 8 +-- src/widgets/widgets/qeffects.cpp | 4 +- src/widgets/widgets/qfontcombobox.cpp | 3 +- src/widgets/widgets/qmdiarea.cpp | 3 +- src/widgets/widgets/qmenu.cpp | 15 ++--- src/widgets/widgets/qmenubar.cpp | 7 ++- src/widgets/widgets/qpushbutton.cpp | 3 +- src/widgets/widgets/qsizegrip.cpp | 3 +- src/widgets/widgets/qsplashscreen.cpp | 3 +- src/widgets/widgets/qtabwidget.cpp | 5 +- src/widgets/widgets/qtoolbutton.cpp | 3 +- src/widgets/widgets/qwidgetresizehandler.cpp | 11 ++-- 26 files changed, 178 insertions(+), 68 deletions(-) diff --git a/src/widgets/dialogs/qcolordialog.cpp b/src/widgets/dialogs/qcolordialog.cpp index f361770c3e..9465575b3b 100644 --- a/src/widgets/dialogs/qcolordialog.cpp +++ b/src/widgets/dialogs/qcolordialog.cpp @@ -41,6 +41,7 @@ #include "qapplication.h" #include "qdesktopwidget.h" +#include #include "qdrawutil.h" #include "qevent.h" #include "qimage.h" @@ -1698,7 +1699,7 @@ void QColorDialogPrivate::initWidgets() #else // small displays (e.g. PDAs) cannot fit the full color dialog, // so just use the color picker. - smallDisplay = (QApplication::desktop()->width() < 480 || QApplication::desktop()->height() < 350); + smallDisplay = (QDesktopWidgetPrivate::width() < 480 || QDesktopWidgetPrivate::height() < 350); const int lumSpace = topLay->spacing() / 2; #endif @@ -1744,7 +1745,7 @@ void QColorDialogPrivate::initWidgets() } else { // better color picker size for small displays #if defined(QT_SMALL_COLORDIALOG) - QSize screenSize = QApplication::desktop()->availableGeometry(QCursor::pos()).size(); + QSize screenSize = QDesktopWidgetPrivate::availableGeometry(QCursor::pos()).size(); pWidth = pHeight = qMin(screenSize.width(), screenSize.height()); pHeight -= 20; if(screenSize.height() > screenSize.width()) diff --git a/src/widgets/dialogs/qdialog.cpp b/src/widgets/dialogs/qdialog.cpp index 1cd587b78d..9e62f79a8e 100644 --- a/src/widgets/dialogs/qdialog.cpp +++ b/src/widgets/dialogs/qdialog.cpp @@ -50,6 +50,7 @@ #include "qevent.h" #include "qdesktopwidget.h" +#include #include "qapplication.h" #include "qlayout.h" #include "qsizegrip.h" @@ -811,13 +812,13 @@ void QDialog::adjustPosition(QWidget* w) w = w->window(); QRect desk; if (w) { - scrn = QApplication::desktop()->screenNumber(w); - } else if (QApplication::desktop()->isVirtualDesktop()) { - scrn = QApplication::desktop()->screenNumber(QCursor::pos()); + scrn = QDesktopWidgetPrivate::screenNumber(w); + } else if (QDesktopWidgetPrivate::isVirtualDesktop()) { + scrn = QDesktopWidgetPrivate::screenNumber(QCursor::pos()); } else { - scrn = QApplication::desktop()->screenNumber(this); + scrn = QDesktopWidgetPrivate::screenNumber(this); } - desk = QApplication::desktop()->availableGeometry(scrn); + desk = QDesktopWidgetPrivate::availableGeometry(scrn); QWidgetList list = QApplication::topLevelWidgets(); for (int i = 0; (extraw == 0 || extrah == 0) && i < list.size(); ++i) { diff --git a/src/widgets/dialogs/qmessagebox.cpp b/src/widgets/dialogs/qmessagebox.cpp index 6a55f62e53..0693f4bea8 100644 --- a/src/widgets/dialogs/qmessagebox.cpp +++ b/src/widgets/dialogs/qmessagebox.cpp @@ -60,6 +60,7 @@ #include #include #include +#include #ifdef Q_OS_WIN # include @@ -357,7 +358,7 @@ void QMessageBoxPrivate::updateSize() if (!q->isVisible()) return; - QSize screenSize = QApplication::desktop()->availableGeometry(QCursor::pos()).size(); + QSize screenSize = QDesktopWidgetPrivate::availableGeometry(QCursor::pos()).size(); int hardLimit = qMin(screenSize.width() - 480, 1000); // can never get bigger than this // on small screens allows the messagebox be the same size as the screen if (screenSize.width() <= 1024) diff --git a/src/widgets/dialogs/qwizard.cpp b/src/widgets/dialogs/qwizard.cpp index 431447734d..3d9b6a3d62 100644 --- a/src/widgets/dialogs/qwizard.cpp +++ b/src/widgets/dialogs/qwizard.cpp @@ -46,6 +46,7 @@ #include "qboxlayout.h" #include "qlayoutitem.h" #include "qdesktopwidget.h" +#include #include "qevent.h" #include "qframe.h" #include "qlabel.h" @@ -396,7 +397,7 @@ void QWizardHeader::setup(const QWizardLayoutInfo &info, const QString &title, /* There is no widthForHeight() function, so we simulate it with a loop. */ - int candidateSubTitleWidth = qMin(512, 2 * QApplication::desktop()->width() / 3); + int candidateSubTitleWidth = qMin(512, 2 * QDesktopWidgetPrivate::width() / 3); int delta = candidateSubTitleWidth >> 1; while (delta > 0) { if (subTitleLabel->heightForWidth(candidateSubTitleWidth - delta) diff --git a/src/widgets/graphicsview/qgraphicsview.cpp b/src/widgets/graphicsview/qgraphicsview.cpp index 4b7890e9ff..1cc8543fdd 100644 --- a/src/widgets/graphicsview/qgraphicsview.cpp +++ b/src/widgets/graphicsview/qgraphicsview.cpp @@ -284,6 +284,7 @@ static const int QGRAPHICSVIEW_PREALLOC_STYLE_OPTIONS = 503; // largest prime < #include #include #include +#include #include #include #include @@ -1248,7 +1249,7 @@ QSize QGraphicsView::sizeHint() const if (d->scene) { QSizeF baseSize = d->matrix.mapRect(sceneRect()).size(); baseSize += QSizeF(d->frameWidth * 2, d->frameWidth * 2); - return baseSize.boundedTo((3 * QApplication::desktop()->size()) / 4).toSize(); + return baseSize.boundedTo((3 * QDesktopWidgetPrivate::size()) / 4).toSize(); } return QAbstractScrollArea::sizeHint(); } diff --git a/src/widgets/kernel/qdesktopwidget.cpp b/src/widgets/kernel/qdesktopwidget.cpp index 1e6fbfd239..6077ac38db 100644 --- a/src/widgets/kernel/qdesktopwidget.cpp +++ b/src/widgets/kernel/qdesktopwidget.cpp @@ -72,6 +72,11 @@ int QDesktopScreenWidget::screenNumber() const } const QRect QDesktopWidget::screenGeometry(const QWidget *widget) const +{ + return QDesktopWidgetPrivate::screenGeometry(widget); +} + +const QRect QDesktopWidgetPrivate::screenGeometry(const QWidget *widget) { if (Q_UNLIKELY(!widget)) { qWarning("QDesktopWidget::screenGeometry(): Attempt " @@ -85,6 +90,11 @@ const QRect QDesktopWidget::screenGeometry(const QWidget *widget) const } const QRect QDesktopWidget::availableGeometry(const QWidget *widget) const +{ + return QDesktopWidgetPrivate::availableGeometry(widget); +} + +const QRect QDesktopWidgetPrivate::availableGeometry(const QWidget *widget) { if (Q_UNLIKELY(!widget)) { qWarning("QDesktopWidget::availableGeometry(): Attempt " @@ -194,16 +204,51 @@ QDesktopWidget::~QDesktopWidget() } bool QDesktopWidget::isVirtualDesktop() const +{ + return QDesktopWidgetPrivate::isVirtualDesktop(); +} + +bool QDesktopWidgetPrivate::isVirtualDesktop() { return QGuiApplication::primaryScreen()->virtualSiblings().size() > 1; } +QRect QDesktopWidgetPrivate::geometry() +{ + return QGuiApplication::primaryScreen()->virtualGeometry(); +} + +QSize QDesktopWidgetPrivate::size() +{ + return geometry().size(); +} + +int QDesktopWidgetPrivate::width() +{ + return geometry().width(); +} + +int QDesktopWidgetPrivate::height() +{ + return geometry().height(); +} + int QDesktopWidget::primaryScreen() const +{ + return QDesktopWidgetPrivate::primaryScreen(); +} + +int QDesktopWidgetPrivate::primaryScreen() { return 0; } int QDesktopWidget::numScreens() const +{ + return QDesktopWidgetPrivate::numScreens(); +} + +int QDesktopWidgetPrivate::numScreens() { return qMax(QGuiApplication::screens().size(), 1); } @@ -217,6 +262,11 @@ QWidget *QDesktopWidget::screen(int screen) } const QRect QDesktopWidget::availableGeometry(int screenNo) const +{ + return QDesktopWidgetPrivate::availableGeometry(screenNo); +} + +const QRect QDesktopWidgetPrivate::availableGeometry(int screenNo) { QList screens = QGuiApplication::screens(); if (screenNo == -1) @@ -228,6 +278,11 @@ const QRect QDesktopWidget::availableGeometry(int screenNo) const } const QRect QDesktopWidget::screenGeometry(int screenNo) const +{ + return QDesktopWidgetPrivate::screenGeometry(screenNo); +} + +const QRect QDesktopWidgetPrivate::screenGeometry(int screenNo) { QList screens = QGuiApplication::screens(); if (screenNo == -1) @@ -239,6 +294,11 @@ const QRect QDesktopWidget::screenGeometry(int screenNo) const } int QDesktopWidget::screenNumber(const QWidget *w) const +{ + return QDesktopWidgetPrivate::screenNumber(w); +} + +int QDesktopWidgetPrivate::screenNumber(const QWidget *w) { if (!w) return primaryScreen(); @@ -286,6 +346,11 @@ int QDesktopWidget::screenNumber(const QWidget *w) const } int QDesktopWidget::screenNumber(const QPoint &p) const +{ + return QDesktopWidgetPrivate::screenNumber(p); +} + +int QDesktopWidgetPrivate::screenNumber(const QPoint &p) { const QList screens = QGuiApplication::screens(); if (!screens.isEmpty()) { diff --git a/src/widgets/kernel/qdesktopwidget_p.h b/src/widgets/kernel/qdesktopwidget_p.h index dade4fe45e..7a66661771 100644 --- a/src/widgets/kernel/qdesktopwidget_p.h +++ b/src/widgets/kernel/qdesktopwidget_p.h @@ -87,6 +87,29 @@ public: void _q_availableGeometryChanged(); QDesktopScreenWidget *widgetForScreen(QScreen *qScreen) const; + static bool isVirtualDesktop(); + + static QRect geometry(); + static QSize size(); + static int width(); + static int height(); + + static int numScreens(); + static int primaryScreen(); + + static int screenNumber(const QWidget *widget = nullptr); + static int screenNumber(const QPoint &); + + static const QRect screenGeometry(int screen = -1); + static const QRect screenGeometry(const QWidget *widget); + static const 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) + { return availableGeometry(screenNumber(point)); } + QList screens; }; diff --git a/src/widgets/kernel/qtooltip.cpp b/src/widgets/kernel/qtooltip.cpp index 830a328948..813b64b2dd 100644 --- a/src/widgets/kernel/qtooltip.cpp +++ b/src/widgets/kernel/qtooltip.cpp @@ -42,6 +42,7 @@ #include #include +#include #include #include #include @@ -362,10 +363,10 @@ bool QTipLabel::eventFilter(QObject *o, QEvent *e) int QTipLabel::getTipScreen(const QPoint &pos, QWidget *w) { - if (QApplication::desktop()->isVirtualDesktop()) - return QApplication::desktop()->screenNumber(pos); + if (QDesktopWidgetPrivate::isVirtualDesktop()) + return QDesktopWidgetPrivate::screenNumber(pos); else - return QApplication::desktop()->screenNumber(w); + return QDesktopWidgetPrivate::screenNumber(w); } void QTipLabel::placeTip(const QPoint &pos, QWidget *w) @@ -395,11 +396,11 @@ void QTipLabel::placeTip(const QPoint &pos, QWidget *w) extern bool qt_mac_app_fullscreen; //qapplication_mac.mm QRect screen; if(qt_mac_app_fullscreen) - screen = QApplication::desktop()->screenGeometry(getTipScreen(pos, w)); + screen = QDesktopWidgetPrivate::screenGeometry(getTipScreen(pos, w)); else - screen = QApplication::desktop()->availableGeometry(getTipScreen(pos, w)); + screen = QDesktopWidgetPrivate::availableGeometry(getTipScreen(pos, w)); #else - QRect screen = QApplication::desktop()->screenGeometry(getTipScreen(pos, w)); + QRect screen = QDesktopWidgetPrivate::screenGeometry(getTipScreen(pos, w)); #endif QPoint p = pos; diff --git a/src/widgets/kernel/qwhatsthis.cpp b/src/widgets/kernel/qwhatsthis.cpp index e2cfebb8a1..91d2b503e0 100644 --- a/src/widgets/kernel/qwhatsthis.cpp +++ b/src/widgets/kernel/qwhatsthis.cpp @@ -42,6 +42,7 @@ #include "qapplication.h" #include #include "qdesktopwidget.h" +#include #include "qevent.h" #include "qpixmap.h" #include "qscreen.h" @@ -209,7 +210,7 @@ QWhatsThat::QWhatsThat(const QString& txt, QWidget* parent, QWidget *showTextFor } else { - int sw = QApplication::desktop()->width() / 3; + int sw = QDesktopWidgetPrivate::width() / 3; if (sw < 200) sw = 200; else if (sw > 300) @@ -582,14 +583,14 @@ void QWhatsThisPrivate::say(QWidget * widget, const QString &text, int x, int y) // okay, now to find a suitable location int scr = (widget ? - QApplication::desktop()->screenNumber(widget) : + QDesktopWidgetPrivate::screenNumber(widget) : #if 0 /* Used to be included in Qt4 for Q_WS_X11 */ && !defined(QT_NO_CURSOR) QCursor::x11Screen() #else - QApplication::desktop()->screenNumber(QPoint(x,y)) + QDesktopWidgetPrivate::screenNumber(QPoint(x,y)) #endif ); - QRect screen = QApplication::desktop()->screenGeometry(scr); + QRect screen = QDesktopWidgetPrivate::screenGeometry(scr); int w = whatsThat->width(); int h = whatsThat->height(); diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 2b4c70ed2b..4dcee2771b 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -1454,7 +1454,7 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO topData()->initialScreenIndex = -1; if (screenNumber < 0) { screenNumber = q->windowType() != Qt::Desktop - ? QApplication::desktop()->screenNumber(q) : 0; + ? QDesktopWidgetPrivate::screenNumber(q) : 0; } win->setScreen(QGuiApplication::screens().value(screenNumber, Q_NULLPTR)); } @@ -7162,7 +7162,7 @@ void QWidgetPrivate::fixPosIncludesFrame() if (q->testAttribute(Qt::WA_DontShowOnScreen)) { te->posIncludesFrame = 0; } else { - if (q->windowHandle()) { + if (q->windowHandle() && q->windowHandle()->handle()) { updateFrameStrut(); if (!q->data->fstrut_dirty) { data.crect.translate(te->frameStrut.x(), te->frameStrut.y()); @@ -7358,7 +7358,7 @@ QByteArray QWidget::saveGeometry() const // - Qt 4.8.6 - today, 5.4 - today: Version 2.0, save screen width in addition to check for high DPI scaling. quint16 majorVersion = 2; quint16 minorVersion = 0; - const int screenNumber = QApplication::desktop()->screenNumber(this); + const int screenNumber = QDesktopWidgetPrivate::screenNumber(this); stream << magicNumber << majorVersion << minorVersion @@ -7372,7 +7372,7 @@ QByteArray QWidget::saveGeometry() const << qint32(screenNumber) << quint8(windowState() & Qt::WindowMaximized) << quint8(windowState() & Qt::WindowFullScreen) - << qint32(QApplication::desktop()->screenGeometry(screenNumber).width()); // 1.1 onwards + << qint32(QDesktopWidgetPrivate::screenGeometry(screenNumber).width()); // 1.1 onwards return array; } @@ -7438,10 +7438,9 @@ bool QWidget::restoreGeometry(const QByteArray &geometry) if (majorVersion > 1) stream >> restoredScreenWidth; - const QDesktopWidget * const desktop = QApplication::desktop(); - if (restoredScreenNumber >= desktop->numScreens()) - restoredScreenNumber = desktop->primaryScreen(); - const qreal screenWidthF = qreal(desktop->screenGeometry(restoredScreenNumber).width()); + if (restoredScreenNumber >= QDesktopWidgetPrivate::numScreens()) + restoredScreenNumber = QDesktopWidgetPrivate::primaryScreen(); + const qreal screenWidthF = qreal(QDesktopWidgetPrivate::screenGeometry(restoredScreenNumber).width()); // Sanity check bailing out when large variations of screen sizes occur due to // high DPI scaling or different levels of DPI awareness. if (restoredScreenWidth) { @@ -7468,7 +7467,7 @@ bool QWidget::restoreGeometry(const QByteArray &geometry) .expandedTo(d_func()->adjustedSize())); } - const QRect availableGeometry = desktop->availableGeometry(restoredScreenNumber); + const QRect availableGeometry = QDesktopWidgetPrivate::availableGeometry(restoredScreenNumber); // Modify the restored geometry if we are about to restore to coordinates // that would make the window "lost". This happens if: @@ -7509,7 +7508,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 != desktop->screenNumber(this)) { + if (restoredScreenNumber != QDesktopWidgetPrivate::screenNumber(this)) { setWindowState(Qt::WindowNoState); setGeometry(restoredNormalGeometry); } @@ -8573,9 +8572,9 @@ QSize QWidgetPrivate::adjustedSize() const if (exp & Qt::Vertical) s.setHeight(qMax(s.height(), 100)); #if 0 // Used to be included in Qt4 for Q_WS_X11 - QRect screen = QApplication::desktop()->screenGeometry(q->x11Info().screen()); + QRect screen = QDesktopWidgetPrivate::screenGeometry(q->x11Info().screen()); #else // all others - QRect screen = QApplication::desktop()->screenGeometry(q->pos()); + QRect screen = QDesktopWidgetPrivate::screenGeometry(q->pos()); #endif s.setWidth(qMin(s.width(), screen.width()*2/3)); s.setHeight(qMin(s.height(), screen.height()*2/3)); @@ -10719,7 +10718,7 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) f |= Qt::Window; if (targetScreen == -1) { if (parent) - targetScreen = QApplication::desktop()->screenNumber(q->parentWidget()->window()); + targetScreen = QDesktopWidgetPrivate::screenNumber(q->parentWidget()->window()); } } diff --git a/src/widgets/util/qcompleter.cpp b/src/widgets/util/qcompleter.cpp index 3a1821240e..8b5aa3f2e4 100644 --- a/src/widgets/util/qcompleter.cpp +++ b/src/widgets/util/qcompleter.cpp @@ -160,6 +160,7 @@ #include "QtWidgets/qapplication.h" #include "QtGui/qevent.h" #include "QtWidgets/qdesktopwidget.h" +#include #include "QtWidgets/qlineedit.h" QT_BEGIN_NAMESPACE @@ -922,7 +923,7 @@ void QCompleterPrivate::_q_autoResizePopup() void QCompleterPrivate::showPopup(const QRect& rect) { - const QRect screen = QApplication::desktop()->availableGeometry(widget); + const QRect screen = QDesktopWidgetPrivate::availableGeometry(widget); Qt::LayoutDirection dir = widget->layoutDirection(); QPoint pos; int rh, w; diff --git a/src/widgets/util/qsystemtrayicon.cpp b/src/widgets/util/qsystemtrayicon.cpp index 19c22eca46..fb3782881c 100644 --- a/src/widgets/util/qsystemtrayicon.cpp +++ b/src/widgets/util/qsystemtrayicon.cpp @@ -59,6 +59,7 @@ #include "qgridlayout.h" #include "qapplication.h" #include "qdesktopwidget.h" +#include #include "qbitmap.h" #include @@ -535,7 +536,7 @@ QBalloonTip::QBalloonTip(const QIcon &icon, const QString &title, msgLabel->setAlignment(Qt::AlignTop | Qt::AlignLeft); // smart size for the message label - int limit = QApplication::desktop()->availableGeometry(msgLabel).size().width() / 3; + int limit = QDesktopWidgetPrivate::availableGeometry(msgLabel).size().width() / 3; if (msgLabel->sizeHint().width() > limit) { msgLabel->setWordWrap(true); if (msgLabel->sizeHint().width() > limit) { @@ -602,7 +603,7 @@ void QBalloonTip::resizeEvent(QResizeEvent *ev) void QBalloonTip::balloon(const QPoint& pos, int msecs, bool showArrow) { this->showArrow = showArrow; - QRect scr = QApplication::desktop()->screenGeometry(pos); + QRect scr = QDesktopWidgetPrivate::screenGeometry(pos); QSize sh = sizeHint(); const int border = 1; const int ah = 18, ao = 18, aw = 18, rc = 7; diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp index 4679ed95c5..9a375ae420 100644 --- a/src/widgets/widgets/qcombobox.cpp +++ b/src/widgets/widgets/qcombobox.cpp @@ -45,6 +45,7 @@ #include #include #include +#include #include #if QT_CONFIG(tableview) #include @@ -262,8 +263,8 @@ QRect QComboBoxPrivate::popupGeometry(int screen) const if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) useFullScreenForPopupMenu = theme->themeHint(QPlatformTheme::UseFullScreenForPopupMenu).toBool(); return useFullScreenForPopupMenu ? - QApplication::desktop()->screenGeometry(screen) : - QApplication::desktop()->availableGeometry(screen); + QDesktopWidgetPrivate::screenGeometry(screen) : + QDesktopWidgetPrivate::availableGeometry(screen); } bool QComboBoxPrivate::updateHoverControl(const QPoint &pos) @@ -2607,7 +2608,7 @@ void QComboBox::showPopup() QComboBoxPrivateContainer* container = d->viewContainer(); QRect listRect(style->subControlRect(QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxListBoxPopup, this)); - QRect screen = d->popupGeometry(QApplication::desktop()->screenNumber(this)); + QRect screen = d->popupGeometry(QDesktopWidgetPrivate::screenNumber(this)); QPoint below = mapToGlobal(listRect.bottomLeft()); int belowHeight = screen.bottom() - below.y(); diff --git a/src/widgets/widgets/qdatetimeedit.cpp b/src/widgets/widgets/qdatetimeedit.cpp index 6d1521c48b..b6ec6b4065 100644 --- a/src/widgets/widgets/qdatetimeedit.cpp +++ b/src/widgets/widgets/qdatetimeedit.cpp @@ -42,6 +42,7 @@ #include #include #include +#include #include #include #include @@ -2516,7 +2517,7 @@ void QDateTimeEditPrivate::positionCalendarPopup() pos = q->mapToGlobal(pos); pos2 = q->mapToGlobal(pos2); QSize size = monthCalendar->sizeHint(); - QRect screen = QApplication::desktop()->availableGeometry(pos); + QRect screen = QDesktopWidgetPrivate::availableGeometry(pos); //handle popup falling "off screen" if (q->layoutDirection() == Qt::RightToLeft) { pos.setX(pos.x()-size.width()); diff --git a/src/widgets/widgets/qdockarealayout.cpp b/src/widgets/widgets/qdockarealayout.cpp index 5edcbcf4ec..71726eaeee 100644 --- a/src/widgets/widgets/qdockarealayout.cpp +++ b/src/widgets/widgets/qdockarealayout.cpp @@ -45,6 +45,7 @@ #endif #include "QtWidgets/qstyle.h" #include "QtWidgets/qdesktopwidget.h" +#include #include "QtWidgets/qapplication.h" #include "QtCore/qvariant.h" #include "qdockarealayout_p.h" @@ -3043,11 +3044,10 @@ QSize QDockAreaLayout::minimumSize() const QRect QDockAreaLayout::constrainedRect(QRect rect, QWidget* widget) { QRect desktop; - QDesktopWidget *desktopW = QApplication::desktop(); - if (desktopW->isVirtualDesktop()) - desktop = desktopW->screenGeometry(rect.topLeft()); + if (QDesktopWidgetPrivate::isVirtualDesktop()) + desktop = QDesktopWidgetPrivate::screenGeometry(rect.topLeft()); else - desktop = desktopW->screenGeometry(widget); + desktop = QDesktopWidgetPrivate::screenGeometry(widget); if (desktop.isValid()) { rect.setWidth(qMin(rect.width(), desktop.width())); diff --git a/src/widgets/widgets/qeffects.cpp b/src/widgets/widgets/qeffects.cpp index 736f2599fe..4dc5939bfb 100644 --- a/src/widgets/widgets/qeffects.cpp +++ b/src/widgets/widgets/qeffects.cpp @@ -51,6 +51,8 @@ #include "qelapsedtimer.h" #include "qdebug.h" +#include + QT_BEGIN_NAMESPACE /* @@ -98,7 +100,7 @@ static QAlphaWidget* q_blend = 0; Constructs a QAlphaWidget. */ QAlphaWidget::QAlphaWidget(QWidget* w, Qt::WindowFlags f) - : QWidget(QApplication::desktop()->screen(QApplication::desktop()->screenNumber(w)), f) + : QWidget(QApplication::desktop()->screen(QDesktopWidgetPrivate::screenNumber(w)), f) { #ifndef Q_OS_WIN setEnabled(false); diff --git a/src/widgets/widgets/qfontcombobox.cpp b/src/widgets/widgets/qfontcombobox.cpp index f206d01999..1c56c19c8f 100644 --- a/src/widgets/widgets/qfontcombobox.cpp +++ b/src/widgets/widgets/qfontcombobox.cpp @@ -47,6 +47,7 @@ #include #include #include +#include #include QT_BEGIN_NAMESPACE @@ -540,7 +541,7 @@ bool QFontComboBox::event(QEvent *e) QListView *lview = qobject_cast(view()); if (lview) { lview->window()->setFixedWidth(qMin(width() * 5 / 3, - QApplication::desktop()->availableGeometry(lview).width())); + QDesktopWidgetPrivate::availableGeometry(lview).width())); } } return QComboBox::event(e); diff --git a/src/widgets/widgets/qmdiarea.cpp b/src/widgets/widgets/qmdiarea.cpp index 31d9ae21ae..43158fa1fd 100644 --- a/src/widgets/widgets/qmdiarea.cpp +++ b/src/widgets/widgets/qmdiarea.cpp @@ -168,6 +168,7 @@ #include #include #include +#include #include #include #include @@ -1746,7 +1747,7 @@ QSize QMdiArea::sizeHint() const } const int scaleFactor = 3 * (nestedCount + 1); - QSize desktopSize = QApplication::desktop()->size(); + QSize desktopSize = QDesktopWidgetPrivate::size(); QSize size(desktopSize.width() * 2 / scaleFactor, desktopSize.height() * 2 / scaleFactor); for (QMdiSubWindow *child : d_func()->childWindows) { if (!sanityCheck(child, "QMdiArea::sizeHint")) diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp index 4ee5b169e7..ab89b8a415 100644 --- a/src/widgets/widgets/qmenu.cpp +++ b/src/widgets/widgets/qmenu.cpp @@ -75,6 +75,7 @@ #include #include #include +#include QT_BEGIN_NAMESPACE @@ -100,7 +101,7 @@ class QTornOffMenu : public QMenu Q_Q(QTornOffMenu); QSize size = menuSize; const QPoint p = (!initialized) ? causedMenu->pos() : q->pos(); - QRect screen = popupGeometry(QApplication::desktop()->screenNumber(p)); + QRect screen = popupGeometry(QDesktopWidgetPrivate::screenNumber(p)); const int desktopFrame = q->style()->pixelMetric(QStyle::PM_MenuDesktopFrameWidth, 0, q); const int titleBarHeight = q->style()->pixelMetric(QStyle::PM_TitleBarHeight, 0, q); if (scroll && (size.height() > screen.height() - titleBarHeight || size.width() > screen.width())) { @@ -267,9 +268,9 @@ QRect QMenuPrivate::popupGeometry(const QWidget *widget) const { if (QGuiApplicationPrivate::platformTheme() && QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::UseFullScreenForPopupMenu).toBool()) { - return QApplication::desktop()->screenGeometry(widget); + return QDesktopWidgetPrivate::screenGeometry(widget); } else { - return QApplication::desktop()->availableGeometry(widget); + return QDesktopWidgetPrivate::availableGeometry(widget); } } @@ -278,9 +279,9 @@ QRect QMenuPrivate::popupGeometry(int screen) const { if (QGuiApplicationPrivate::platformTheme() && QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::UseFullScreenForPopupMenu).toBool()) { - return QApplication::desktop()->screenGeometry(screen); + return QDesktopWidgetPrivate::screenGeometry(screen); } else { - return QApplication::desktop()->availableGeometry(screen); + return QDesktopWidgetPrivate::availableGeometry(screen); } } @@ -2332,7 +2333,7 @@ void QMenu::popup(const QPoint &p, QAction *atAction) screen = d->popupGeometry(this); else #endif - screen = d->popupGeometry(QApplication::desktop()->screenNumber(p)); + screen = d->popupGeometry(QDesktopWidgetPrivate::screenNumber(p)); d->updateActionRects(screen); QPoint pos; @@ -3601,7 +3602,7 @@ void QMenu::internalDelayedPopup() screen = d->popupGeometry(this); else #endif - screen = d->popupGeometry(QApplication::desktop()->screenNumber(pos())); + screen = d->popupGeometry(QDesktopWidgetPrivate::screenNumber(pos())); int subMenuOffset = style()->pixelMetric(QStyle::PM_SubMenuOverlap, 0, this); const QRect actionRect(d->actionRect(d->currentAction)); diff --git a/src/widgets/widgets/qmenubar.cpp b/src/widgets/widgets/qmenubar.cpp index fd48058ec3..5284c16ab0 100644 --- a/src/widgets/widgets/qmenubar.cpp +++ b/src/widgets/widgets/qmenubar.cpp @@ -60,6 +60,7 @@ #include #include "private/qguiapplication_p.h" #include "qpa/qplatformintegration.h" +#include #ifndef QT_NO_MENUBAR @@ -322,7 +323,7 @@ void QMenuBarPrivate::popupAction(QAction *action, bool activateFirst) QSize popup_size = activeMenu->sizeHint(); //we put the popup menu on the screen containing the bottom-center of the action rect - QRect screenRect = QApplication::desktop()->screenGeometry(pos + QPoint(adjustedActionRect.width() / 2, 0)); + QRect screenRect = QDesktopWidgetPrivate::screenGeometry(pos + QPoint(adjustedActionRect.width() / 2, 0)); pos = QPoint(qMax(pos.x(), screenRect.x()), qMax(pos.y(), screenRect.y())); const bool fitUp = (q->mapToGlobal(adjustedActionRect.topLeft()).y() >= popup_size.height()); @@ -1566,7 +1567,7 @@ QSize QMenuBar::minimumSizeHint() const int fw = style()->pixelMetric(QStyle::PM_MenuBarPanelWidth, 0, this); int spaceBelowMenuBar = style()->styleHint(QStyle::SH_MainWindow_SpaceBelowMenuBar, 0, this); if(as_gui_menubar) { - int w = parentWidget() ? parentWidget()->width() : QApplication::desktop()->width(); + int w = parentWidget() ? parentWidget()->width() : QDesktopWidgetPrivate::width(); d->calcActionRects(w - (2 * fw), 0); for (int i = 0; ret.isNull() && i < d->actions.count(); ++i) ret = d->actionRects.at(i).size(); @@ -1618,7 +1619,7 @@ QSize QMenuBar::sizeHint() const int fw = style()->pixelMetric(QStyle::PM_MenuBarPanelWidth, 0, this); int spaceBelowMenuBar = style()->styleHint(QStyle::SH_MainWindow_SpaceBelowMenuBar, 0, this); if(as_gui_menubar) { - const int w = parentWidget() ? parentWidget()->width() : QApplication::desktop()->width(); + const int w = parentWidget() ? parentWidget()->width() : QDesktopWidgetPrivate::width(); d->calcActionRects(w - (2 * fw), 0); for (int i = 0; i < d->actionRects.count(); ++i) { const QRect &actionRect = d->actionRects.at(i); diff --git a/src/widgets/widgets/qpushbutton.cpp b/src/widgets/widgets/qpushbutton.cpp index e13ea83fd7..3dd6ee9b0a 100644 --- a/src/widgets/widgets/qpushbutton.cpp +++ b/src/widgets/widgets/qpushbutton.cpp @@ -40,6 +40,7 @@ #include "qapplication.h" #include "qbitmap.h" #include "qdesktopwidget.h" +#include #if QT_CONFIG(dialog) #include #endif @@ -607,7 +608,7 @@ QPoint QPushButtonPrivate::adjustedMenuPosition() QPoint globalPos = q->mapToGlobal(rect.topLeft()); int x = globalPos.x(); int y = globalPos.y(); - const QRect availableGeometry = QApplication::desktop()->availableGeometry(q); + const QRect availableGeometry = QDesktopWidgetPrivate::availableGeometry(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 f0ede5f2ff..85efd680ec 100644 --- a/src/widgets/widgets/qsizegrip.cpp +++ b/src/widgets/widgets/qsizegrip.cpp @@ -57,6 +57,7 @@ #endif #include +#include #include QT_BEGIN_NAMESPACE @@ -314,7 +315,7 @@ void QSizeGrip::mousePressEvent(QMouseEvent * e) bool hasVerticalSizeConstraint = true; bool hasHorizontalSizeConstraint = true; if (tlw->isWindow()) - availableGeometry = QApplication::desktop()->availableGeometry(tlw); + availableGeometry = QDesktopWidgetPrivate::availableGeometry(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 d1b59b5196..468fc272b5 100644 --- a/src/widgets/widgets/qsplashscreen.cpp +++ b/src/widgets/widgets/qsplashscreen.cpp @@ -41,6 +41,7 @@ #include "qapplication.h" #include "qdesktopwidget.h" +#include #include "qpainter.h" #include "qpixmap.h" #include "qtextdocument.h" @@ -282,7 +283,7 @@ void QSplashScreen::setPixmap(const QPixmap &pixmap) QRect r(QPoint(), d->pixmap.size() / d->pixmap.devicePixelRatio()); resize(r.size()); - move(QApplication::desktop()->screenGeometry().center() - r.center()); + move(QDesktopWidgetPrivate::screenGeometry().center() - r.center()); if (isVisible()) repaint(); } diff --git a/src/widgets/widgets/qtabwidget.cpp b/src/widgets/widgets/qtabwidget.cpp index c496d267b3..fd783da49a 100644 --- a/src/widgets/widgets/qtabwidget.cpp +++ b/src/widgets/widgets/qtabwidget.cpp @@ -44,6 +44,7 @@ #include "qapplication.h" #include "qbitmap.h" #include "qdesktopwidget.h" +#include #include "qevent.h" #include "qlayout.h" #include "qstackedwidget.h" @@ -829,7 +830,7 @@ QSize QTabWidget::sizeHint() const if(usesScrollButtons()) t = t.boundedTo(QSize(200,200)); else - t = t.boundedTo(QApplication::desktop()->size()); + t = t.boundedTo(QDesktopWidgetPrivate::size()); QSize sz = basicSize(d->pos == North || d->pos == South, lc, rc, s, t); @@ -897,7 +898,7 @@ int QTabWidget::heightForWidth(int width) const if(usesScrollButtons()) t = t.boundedTo(QSize(200,200)); else - t = t.boundedTo(QApplication::desktop()->size()); + t = t.boundedTo(QDesktopWidgetPrivate::size()); const bool tabIsHorizontal = (d->pos == North || d->pos == South); const int contentsWidth = width - padding.width(); diff --git a/src/widgets/widgets/qtoolbutton.cpp b/src/widgets/widgets/qtoolbutton.cpp index f2c5814203..60c9c43399 100644 --- a/src/widgets/widgets/qtoolbutton.cpp +++ b/src/widgets/widgets/qtoolbutton.cpp @@ -41,6 +41,7 @@ #include #include +#include #include #include #include @@ -745,7 +746,7 @@ void QToolButtonPrivate::popupTimerDone() #endif QPoint p; const QRect rect = q->rect(); // Find screen via point in case of QGraphicsProxyWidget. - QRect screen = QApplication::desktop()->availableGeometry(q->mapToGlobal(rect.center())); + QRect screen = QDesktopWidgetPrivate::availableGeometry(q->mapToGlobal(rect.center())); QSize sh = ((QToolButton*)(QMenu*)actualMenu)->receivers(SIGNAL(aboutToShow()))? QSize() : actualMenu->sizeHint(); if (horizontal) { if (q->isRightToLeft()) { diff --git a/src/widgets/widgets/qwidgetresizehandler.cpp b/src/widgets/widgets/qwidgetresizehandler.cpp index dc7353a6ca..79502cdd26 100644 --- a/src/widgets/widgets/qwidgetresizehandler.cpp +++ b/src/widgets/widgets/qwidgetresizehandler.cpp @@ -43,6 +43,7 @@ #include "qframe.h" #include "qapplication.h" #include "qdesktopwidget.h" +#include #include "qcursor.h" #include "qsizegrip.h" #include "qevent.h" @@ -258,7 +259,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 = QApplication::desktop()->availableGeometry(widget); + const QRect desktop = QDesktopWidgetPrivate::availableGeometry(widget); pp.rx() = qMax(pp.x(), desktop.left()); pp.ry() = qMax(pp.y(), desktop.top()); p.rx() = qMin(p.x(), desktop.right()); @@ -379,7 +380,7 @@ void QWidgetResizeHandler::keyPressEvent(QKeyEvent * e) switch (e->key()) { case Qt::Key_Left: pos.rx() -= delta; - if (pos.x() <= QApplication::desktop()->geometry().left()) { + if (pos.x() <= QDesktopWidgetPrivate::geometry().left()) { if (mode == TopLeft || mode == BottomLeft) { moveOffset.rx() += delta; invertedMoveOffset.rx() += delta; @@ -404,7 +405,7 @@ void QWidgetResizeHandler::keyPressEvent(QKeyEvent * e) break; case Qt::Key_Right: pos.rx() += delta; - if (pos.x() >= QApplication::desktop()->geometry().right()) { + if (pos.x() >= QDesktopWidgetPrivate::geometry().right()) { if (mode == TopRight || mode == BottomRight) { moveOffset.rx() += delta; invertedMoveOffset.rx() += delta; @@ -429,7 +430,7 @@ void QWidgetResizeHandler::keyPressEvent(QKeyEvent * e) break; case Qt::Key_Up: pos.ry() -= delta; - if (pos.y() <= QApplication::desktop()->geometry().top()) { + if (pos.y() <= QDesktopWidgetPrivate::geometry().top()) { if (mode == TopLeft || mode == TopRight) { moveOffset.ry() += delta; invertedMoveOffset.ry() += delta; @@ -454,7 +455,7 @@ void QWidgetResizeHandler::keyPressEvent(QKeyEvent * e) break; case Qt::Key_Down: pos.ry() += delta; - if (pos.y() >= QApplication::desktop()->geometry().bottom()) { + if (pos.y() >= QDesktopWidgetPrivate::geometry().bottom()) { if (mode == BottomLeft || mode == BottomRight) { moveOffset.ry() += delta; invertedMoveOffset.ry() += delta;