Windows QPA: suppress warning message when not needed

We have done the same thing when calling SetProcessDpiAwareness(),
but it's also needed for SetProcessDpiAwarenessContext(), otherwise
there will always be a warning message when the user uses a manifest
file to set the DPI awareness mode for the application (which is highly
recommended by Microsoft).

Change-Id: I31894d41c89581b6edd7826cb3dabad492f6c2a8
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
(cherry picked from commit 19857fda75d049e64e39ff353d7f5ed3bd342d61)
This commit is contained in:
Yuhang Zhao 2022-10-25 10:26:32 +08:00
parent 210e036488
commit 1327536264

View File

@ -381,8 +381,8 @@ void QWindowsContext::setProcessDpiAwareness(QtWindows::ProcessDpiAwareness dpiA
const HRESULT hr = SetProcessDpiAwareness(static_cast<PROCESS_DPI_AWARENESS>(dpiAwareness)); const HRESULT hr = SetProcessDpiAwareness(static_cast<PROCESS_DPI_AWARENESS>(dpiAwareness));
// E_ACCESSDENIED means set externally (MSVC manifest or external app loading Qt plugin). // E_ACCESSDENIED means set externally (MSVC manifest or external app loading Qt plugin).
// Silence warning in that case unless debug is enabled. // Silence warning in that case unless debug is enabled.
if (FAILED(hr) && (hr != E_ACCESSDENIED || lcQpaWindows().isDebugEnabled())) { if (FAILED(hr) && hr != E_ACCESSDENIED) {
qWarning().noquote().nospace() << "SetProcessDpiAwareness(" qCWarning(lcQpaWindows).noquote().nospace() << "SetProcessDpiAwareness("
<< dpiAwareness << ") failed: " << QWindowsContext::comErrorString(hr) << dpiAwareness << ") failed: " << QWindowsContext::comErrorString(hr)
<< ", using " << QWindowsContext::processDpiAwareness(); << ", using " << QWindowsContext::processDpiAwareness();
} }
@ -393,12 +393,16 @@ bool QWindowsContext::setProcessDpiV2Awareness()
qCDebug(lcQpaWindows) << __FUNCTION__; qCDebug(lcQpaWindows) << __FUNCTION__;
const BOOL ok = SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2); const BOOL ok = SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);
if (!ok) { if (!ok) {
const HRESULT errorCode = GetLastError(); const DWORD dwError = GetLastError();
qCWarning(lcQpaWindows).noquote().nospace() << "setProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2) failed: " // ERROR_ACCESS_DENIED means set externally (MSVC manifest or external app loading Qt plugin).
<< QWindowsContext::comErrorString(errorCode); // Silence warning in that case unless debug is enabled.
return false; if (dwError != ERROR_ACCESS_DENIED) {
qCWarning(lcQpaWindows).noquote().nospace()
<< "SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2) failed: "
<< QWindowsContext::comErrorString(HRESULT(dwError));
return false;
}
} }
QWindowsContextPrivate::m_v2DpiAware = true; QWindowsContextPrivate::m_v2DpiAware = true;
return true; return true;
} }