diff options
Diffstat (limited to 'src/widgets/kernel/qdesktopwidget.cpp')
-rw-r--r-- | src/widgets/kernel/qdesktopwidget.cpp | 130 |
1 files changed, 93 insertions, 37 deletions
diff --git a/src/widgets/kernel/qdesktopwidget.cpp b/src/widgets/kernel/qdesktopwidget.cpp index 1e6fbfd239..5fb7882932 100644 --- a/src/widgets/kernel/qdesktopwidget.cpp +++ b/src/widgets/kernel/qdesktopwidget.cpp @@ -50,7 +50,7 @@ QT_BEGIN_NAMESPACE QDesktopScreenWidget::QDesktopScreenWidget(QScreen *screen, const QRect &geometry) - : QWidget(Q_NULLPTR, Qt::Desktop), m_screen(screen) + : QWidget(nullptr, Qt::Desktop), m_screen(screen) { setVisible(false); if (QWindow *winHandle = windowHandle()) @@ -73,6 +73,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 " "to get the screen geometry of a null widget"); @@ -86,6 +91,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 " "to get the available geometry of a null widget"); @@ -104,7 +114,7 @@ QDesktopScreenWidget *QDesktopWidgetPrivate::widgetForScreen(QScreen *qScreen) c if (widget->screen() == qScreen) return widget; } - return Q_NULLPTR; + return nullptr; } void QDesktopWidgetPrivate::_q_updateScreens() @@ -166,17 +176,26 @@ void QDesktopWidgetPrivate::_q_updateScreens() // Notice that we trigger screenCountChanged even if a screen was removed and another one added, // in which case the total number of screens did not change. This is the only way for applications // to notice that a screen was swapped out against another one. +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED emit q->screenCountChanged(targetLength); +QT_WARNING_POP } foreach (int changedScreen, changedScreens) +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED emit q->resized(changedScreen); +QT_WARNING_POP } void QDesktopWidgetPrivate::_q_availableGeometryChanged() { Q_Q(QDesktopWidget); if (QScreen *screen = qobject_cast<QScreen *>(q->sender())) +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED emit q->workAreaResized(QGuiApplication::screens().indexOf(screen)); +QT_WARNING_POP } QDesktopWidget::QDesktopWidget() @@ -195,16 +214,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); } @@ -218,28 +272,33 @@ QWidget *QDesktopWidget::screen(int screen) const QRect QDesktopWidget::availableGeometry(int screenNo) const { - QList<QScreen *> screens = QGuiApplication::screens(); - if (screenNo == -1) - screenNo = 0; - if (screenNo < 0 || screenNo >= screens.size()) - return QRect(); - else - return screens.at(screenNo)->availableGeometry(); + return QDesktopWidgetPrivate::availableGeometry(screenNo); +} + +const QRect QDesktopWidgetPrivate::availableGeometry(int screenNo) +{ + const QScreen *screen = QDesktopWidgetPrivate::screen(screenNo); + return screen ? screen->availableGeometry() : QRect(); } const QRect QDesktopWidget::screenGeometry(int screenNo) const { - QList<QScreen *> screens = QGuiApplication::screens(); - if (screenNo == -1) - screenNo = 0; - if (screenNo < 0 || screenNo >= screens.size()) - return QRect(); - else - return screens.at(screenNo)->geometry(); + return QDesktopWidgetPrivate::screenGeometry(screenNo); +} + +const QRect QDesktopWidgetPrivate::screenGeometry(int screenNo) +{ + const QScreen *screen = QDesktopWidgetPrivate::screen(screenNo); + return screen ? screen->geometry() : QRect(); } int QDesktopWidget::screenNumber(const QWidget *w) const { + return QDesktopWidgetPrivate::screenNumber(w); +} + +int QDesktopWidgetPrivate::screenNumber(const QWidget *w) +{ if (!w) return primaryScreen(); @@ -270,7 +329,7 @@ int QDesktopWidget::screenNumber(const QWidget *w) const if (!w->isWindow()) frame.moveTopLeft(w->mapToGlobal(QPoint(0, 0))); - QScreen *widgetScreen = Q_NULLPTR; + QScreen *widgetScreen = nullptr; int largestArea = 0; foreach (QScreen *screen, screens) { const QRect deviceIndependentScreenGeometry = @@ -287,26 +346,23 @@ int QDesktopWidget::screenNumber(const QWidget *w) const int QDesktopWidget::screenNumber(const QPoint &p) const { - const QList<QScreen *> screens = QGuiApplication::screens(); - if (!screens.isEmpty()) { - const QList<QScreen *> primaryScreens = screens.first()->virtualSiblings(); - // Find the screen index on the primary virtual desktop first - foreach (QScreen *screen, primaryScreens) { - if (screen->geometry().contains(p)) - return screens.indexOf(screen); - } - // If the screen index is not found on primary virtual desktop, find - // the screen index on all screens except the first which was for - // sure in the previous loop. Some other screens may repeat. Find - // only when there is more than one virtual desktop. - if (screens.count() != primaryScreens.count()) { - for (int i = 1; i < screens.size(); ++i) { - if (screens[i]->geometry().contains(p)) - return i; - } - } - } - return primaryScreen(); //even better would be closest screen + return QDesktopWidgetPrivate::screenNumber(p); +} + +int QDesktopWidgetPrivate::screenNumber(const QPoint &p) +{ + QScreen *screen = QGuiApplication::screenAt(p); + return screen ? QGuiApplication::screens().indexOf(screen) : primaryScreen(); +} + +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); } void QDesktopWidget::resizeEvent(QResizeEvent *) |