diff options
-rw-r--r-- | src/plugins/platforms/windows/qwindowscontext.cpp | 18 | ||||
-rw-r--r-- | src/plugins/platforms/windows/qwindowscontext.h | 2 | ||||
-rw-r--r-- | src/plugins/platforms/windows/qwindowsintegration.cpp | 20 |
3 files changed, 21 insertions, 19 deletions
diff --git a/src/plugins/platforms/windows/qwindowscontext.cpp b/src/plugins/platforms/windows/qwindowscontext.cpp index ae4128d073..6dece1a518 100644 --- a/src/plugins/platforms/windows/qwindowscontext.cpp +++ b/src/plugins/platforms/windows/qwindowscontext.cpp @@ -382,21 +382,19 @@ void QWindowsContext::setProcessDpiAwareness(QtWindows::ProcessDpiAwareness dpiA } } -void QWindowsContext::setProcessDpiV2Awareness() +bool QWindowsContext::setProcessDpiV2Awareness() { qCDebug(lcQpaWindows) << __FUNCTION__; const BOOL ok = SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2); - if (ok) { - QWindowsContextPrivate::m_v2DpiAware = true; - } else { + if (!ok) { const HRESULT errorCode = GetLastError(); - // ERROR_ACCESS_DENIED means set externally (MSVC manifest or external app loading Qt plugin). - // Silence warning in that case unless debug is enabled. - if (errorCode != ERROR_ACCESS_DENIED || lcQpaWindows().isDebugEnabled()) { - qWarning().noquote().nospace() << "setProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2) failed: " - << QWindowsContext::comErrorString(errorCode); - } + qCWarning(lcQpaWindows).noquote().nospace() << "setProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2) failed: " + << QWindowsContext::comErrorString(errorCode); + return false; } + + QWindowsContextPrivate::m_v2DpiAware = true; + return true; } bool QWindowsContext::isDarkMode() diff --git a/src/plugins/platforms/windows/qwindowscontext.h b/src/plugins/platforms/windows/qwindowscontext.h index ac65f745e7..4cc47a3ba4 100644 --- a/src/plugins/platforms/windows/qwindowscontext.h +++ b/src/plugins/platforms/windows/qwindowscontext.h @@ -121,7 +121,7 @@ public: static void setTabletAbsoluteRange(int a); void setProcessDpiAwareness(QtWindows::ProcessDpiAwareness dpiAwareness); static int processDpiAwareness(); - void setProcessDpiV2Awareness(); + bool setProcessDpiV2Awareness(); static bool isDarkMode(); diff --git a/src/plugins/platforms/windows/qwindowsintegration.cpp b/src/plugins/platforms/windows/qwindowsintegration.cpp index a281172651..8e94722565 100644 --- a/src/plugins/platforms/windows/qwindowsintegration.cpp +++ b/src/plugins/platforms/windows/qwindowsintegration.cpp @@ -223,16 +223,20 @@ void QWindowsIntegrationPrivate::parseOptions(QWindowsIntegration *q, const QStr if (!dpiAwarenessSet) { // Set only once in case of repeated instantiations of QGuiApplication. if (!QCoreApplication::testAttribute(Qt::AA_PluginApplication)) { - - // DpiAwareV2 requires using new API if (dpiAwareness == QtWindows::ProcessPerMonitorV2DpiAware) { - m_context.setProcessDpiV2Awareness(); - qCDebug(lcQpaWindows) - << __FUNCTION__ << "DpiAwareness: DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2"; - } else { + // DpiAwareV2 requires using new API + if (m_context.setProcessDpiV2Awareness()) { + qCDebug(lcQpaWindows, "DpiAwareness: DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2"); + dpiAwarenessSet = true; + } else { + // fallback to old API + dpiAwareness = QtWindows::ProcessPerMonitorDpiAware; + } + } + + if (!dpiAwarenessSet) { m_context.setProcessDpiAwareness(dpiAwareness); - qCDebug(lcQpaWindows) - << __FUNCTION__ << "DpiAwareness=" << dpiAwareness + qCDebug(lcQpaWindows) << "DpiAwareness=" << dpiAwareness << "effective process DPI awareness=" << QWindowsContext::processDpiAwareness(); } } |