Module: wine Branch: master Commit: d78f7454228d99ef764cd5fbdf5fe29f22e7a6a3 URL: https://gitlab.winehq.org/wine/wine/-/commit/d78f7454228d99ef764cd5fbdf5fe29...
Author: Rémi Bernon rbernon@codeweavers.com Date: Mon May 20 13:20:57 2024 +0200
user32: Fix SetProcessDpiAwarenessContext.
---
dlls/user32/sysparams.c | 43 ++++++++++++++++--------------------------- dlls/user32/tests/sysparams.c | 1 - 2 files changed, 16 insertions(+), 28 deletions(-)
diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c index f5f6bf2eec9..149498e66d3 100644 --- a/dlls/user32/sysparams.c +++ b/dlls/user32/sysparams.c @@ -576,38 +576,27 @@ BOOL WINAPI EnumDisplaySettingsExW( const WCHAR *device, DWORD mode, return NtUserEnumDisplaySettings( &str, mode, dev_mode, flags ); }
-/********************************************************************** - * SetProcessDpiAwarenessContext (USER32.@) - */ -BOOL WINAPI SetProcessDpiAwarenessContext( DPI_AWARENESS_CONTEXT context ) +static UINT get_ntuser_dpi_context( DPI_AWARENESS_CONTEXT context ) { - ULONG awareness; - - switch (GetAwarenessFromDpiAwarenessContext( context )) + switch ((UINT_PTR)context) { - case DPI_AWARENESS_UNAWARE: - awareness = NTUSER_DPI_UNAWARE; - break; - case DPI_AWARENESS_SYSTEM_AWARE: - awareness = NTUSER_DPI_SYSTEM_AWARE; - break; - case DPI_AWARENESS_PER_MONITOR_AWARE: - awareness = context == DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 - ? NTUSER_DPI_PER_MONITOR_AWARE_V2 : NTUSER_DPI_PER_MONITOR_AWARE; - break; - default: - SetLastError( ERROR_INVALID_PARAMETER ); - return FALSE; + case (UINT_PTR)DPI_AWARENESS_CONTEXT_UNAWARE: return NTUSER_DPI_UNAWARE; + case (UINT_PTR)DPI_AWARENESS_CONTEXT_SYSTEM_AWARE: return NTUSER_DPI_SYSTEM_AWARE; + case (UINT_PTR)DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE: return NTUSER_DPI_PER_MONITOR_AWARE; + case (UINT_PTR)DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2: return NTUSER_DPI_PER_MONITOR_AWARE_V2; + case (UINT_PTR)DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED: return NTUSER_DPI_PER_UNAWARE_GDISCALED; }
- if (!NtUserSetProcessDpiAwarenessContext( awareness, 0 )) - { - SetLastError( ERROR_ACCESS_DENIED ); - return FALSE; - } + return (UINT_PTR)context; +}
- TRACE( "set to %p\n", context ); - return TRUE; +/********************************************************************** + * SetProcessDpiAwarenessContext (USER32.@) + */ +BOOL WINAPI SetProcessDpiAwarenessContext( DPI_AWARENESS_CONTEXT context ) +{ + UINT value = get_ntuser_dpi_context( context ); + return NtUserSetProcessDpiAwarenessContext( value, 0 ); }
/********************************************************************** diff --git a/dlls/user32/tests/sysparams.c b/dlls/user32/tests/sysparams.c index 596b4b60b7a..2393c8bd130 100644 --- a/dlls/user32/tests/sysparams.c +++ b/dlls/user32/tests/sysparams.c @@ -3936,7 +3936,6 @@ static void test_SetProcessDpiAwarenessContext( ULONG arg ) SetLastError( 0xdeadbeef ); ret = pSetProcessDpiAwarenessContext( contexts[i] ); ok( !ret, "SetProcessDpiAwarenessContext succeeded\n" ); - todo_wine_if( i < 3 ) ok( GetLastError() == ERROR_ACCESS_DENIED, "got %#lx\n", GetLastError() ); ctx = pGetThreadDpiAwarenessContext(); todo_wine_if( arg != 0x12 && context != DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE )