summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gui/kernel/qguiapplication.cpp10
-rw-r--r--src/gui/kernel/qscreen.cpp24
-rw-r--r--src/gui/kernel/qscreen_p.h2
3 files changed, 25 insertions, 11 deletions
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp
index 8e50cbc469..356f9fb11a 100644
--- a/src/gui/kernel/qguiapplication.cpp
+++ b/src/gui/kernel/qguiapplication.cpp
@@ -3131,14 +3131,7 @@ void QGuiApplicationPrivate::processScreenGeometryChange(QWindowSystemInterfaceP
updateFilteredScreenOrientation(s);
}
- if (availableGeometryChanged)
- emit s->availableGeometryChanged(s->availableGeometry());
-
- if (geometryChanged || availableGeometryChanged) {
- const auto siblings = s->virtualSiblings();
- for (QScreen* sibling : siblings)
- emit sibling->virtualGeometryChanged(sibling->virtualGeometry());
- }
+ s->d_func()->emitGeometryChangeSignals(geometryChanged, availableGeometryChanged);
resetCachedDevicePixelRatio();
}
@@ -3156,6 +3149,7 @@ void QGuiApplicationPrivate::processScreenLogicalDotsPerInchChange(QWindowSystem
s->d_func()->logicalDpi = QDpi(e->dpiX, e->dpiY);
emit s->logicalDotsPerInchChanged(s->logicalDotsPerInch());
+ s->d_func()->updateGeometriesWithSignals();
resetCachedDevicePixelRatio();
}
diff --git a/src/gui/kernel/qscreen.cpp b/src/gui/kernel/qscreen.cpp
index d5a4b7c027..df628fcc73 100644
--- a/src/gui/kernel/qscreen.cpp
+++ b/src/gui/kernel/qscreen.cpp
@@ -77,15 +77,33 @@ QScreen::QScreen(QPlatformScreen *screen)
d->setPlatformScreen(screen);
}
+void QScreenPrivate::updateGeometriesWithSignals()
+{
+ const QRect oldGeometry = geometry;
+ const QRect oldAvailableGeometry = availableGeometry;
+ updateHighDpi();
+ emitGeometryChangeSignals(oldGeometry != geometry, oldAvailableGeometry != availableGeometry);
+}
+
+void QScreenPrivate::emitGeometryChangeSignals(bool geometryChanged, bool availableGeometryChanged)
+{
+ Q_Q(QScreen);
+ if (availableGeometryChanged)
+ emit q->availableGeometryChanged(availableGeometry);
+
+ if (geometryChanged || availableGeometryChanged) {
+ const auto siblings = q->virtualSiblings();
+ for (QScreen* sibling : siblings)
+ emit sibling->virtualGeometryChanged(sibling->virtualGeometry());
+ }
+}
+
void QScreenPrivate::setPlatformScreen(QPlatformScreen *screen)
{
Q_Q(QScreen);
platformScreen = screen;
platformScreen->d_func()->screen = q;
orientation = platformScreen->orientation();
- geometry = platformScreen->deviceIndependentGeometry();
- availableGeometry = QHighDpi::fromNative(platformScreen->availableGeometry(),
- QHighDpiScaling::factor(platformScreen), geometry.topLeft());
logicalDpi = QPlatformScreen::overrideDpi(platformScreen->logicalDpi());
diff --git a/src/gui/kernel/qscreen_p.h b/src/gui/kernel/qscreen_p.h
index e5988ff829..7da542c25e 100644
--- a/src/gui/kernel/qscreen_p.h
+++ b/src/gui/kernel/qscreen_p.h
@@ -72,6 +72,8 @@ public:
}
void updatePrimaryOrientation();
+ void updateGeometriesWithSignals();
+ void emitGeometryChangeSignals(bool geometryChanged, bool availableGeometryChanged);
QPlatformScreen *platformScreen = nullptr;