summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel/qguiapplication.cpp
diff options
context:
space:
mode:
authorMorten Johan Sørvig <morten.sorvig@theqtcompany.com>2015-10-02 15:56:04 +0200
committerMorten Johan Sørvig <morten.sorvig@theqtcompany.com>2015-10-26 09:25:38 +0000
commit45bb9c29e8b70cd15b01d8ab18d1df7f9707c215 (patch)
tree5f62523e2c9a6abbd37a85f27e32a7d646e94db0 /src/gui/kernel/qguiapplication.cpp
parenta681b90418aae8b6ffffc0c6ba79d4e1c257901b (diff)
Fix QHighDPiScaling initialization issues
Call QHighDpiScaling::updateHighDpiScaling() in init_plaform(), after the platform integration has been created and most platforms have populated the screen list. Keep the existing udpate call for the platforms that don't, but guard against calling it twice. Task-number: QTBUG-47947 Change-Id: Ib73bea7c4ab42e7acf6532f3a3100e1fc29acc2c Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com> Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
Diffstat (limited to 'src/gui/kernel/qguiapplication.cpp')
-rw-r--r--src/gui/kernel/qguiapplication.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp
index 2e0595152b..216537e51a 100644
--- a/src/gui/kernel/qguiapplication.cpp
+++ b/src/gui/kernel/qguiapplication.cpp
@@ -129,6 +129,8 @@ QWindow *QGuiApplicationPrivate::currentMouseWindow = 0;
Qt::ApplicationState QGuiApplicationPrivate::applicationState = Qt::ApplicationInactive;
+bool QGuiApplicationPrivate::highDpiScalingUpdated = false;
+
QPlatformIntegration *QGuiApplicationPrivate::platform_integration = 0;
QPlatformTheme *QGuiApplicationPrivate::platform_theme = 0;
@@ -1051,6 +1053,13 @@ static void init_platform(const QString &pluginArgument, const QString &platform
return;
}
+ // Many platforms have created QScreens at this point. Finish initializing
+ // QHighDpiScaling to be prepared for early calls to qt_defaultDpi().
+ if (QGuiApplication::primaryScreen()) {
+ QGuiApplicationPrivate::highDpiScalingUpdated = true;
+ QHighDpiScaling::updateHighDpiScaling();
+ }
+
// Create the platform theme:
// 1) Fetch the platform name from the environment if present.
@@ -1220,9 +1229,10 @@ void QGuiApplicationPrivate::eventDispatcherReady()
platform_integration->initialize();
- // Do this here in order to play nice with platforms that add screens only
- // in initialize().
- QHighDpiScaling::updateHighDpiScaling();
+ // All platforms should have added screens at this point. Finish
+ // QHighDpiScaling initialization if it has not been done so already.
+ if (!QGuiApplicationPrivate::highDpiScalingUpdated)
+ QHighDpiScaling::updateHighDpiScaling();
}
void QGuiApplicationPrivate::init()