summaryrefslogtreecommitdiffstats
path: root/src/widgets/kernel/qdesktopwidget_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/kernel/qdesktopwidget_p.h')
-rw-r--r--src/widgets/kernel/qdesktopwidget_p.h100
1 files changed, 70 insertions, 30 deletions
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