Module: wine Branch: master Commit: 72316326356c6eeb724708b0d375572295781a1c URL: https://source.winehq.org/git/wine.git/?a=commit;h=72316326356c6eeb724708b0d...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Mar 9 15:21:51 2022 +0100
win32u: Move GetWindowDpiAwarenessContext from user32.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/user32/win.c | 25 +------------------------ dlls/win32u/win32u_private.h | 2 +- dlls/win32u/window.c | 33 ++++++++++++++++++++++++++++++++- dlls/win32u/wrappers.c | 2 +- include/ntuser.h | 3 ++- 5 files changed, 37 insertions(+), 28 deletions(-)
diff --git a/dlls/user32/win.c b/dlls/user32/win.c index a81e112ee0d..48541c19a66 100644 --- a/dlls/user32/win.c +++ b/dlls/user32/win.c @@ -2090,30 +2090,7 @@ BOOL WINAPI IsWindowUnicode( HWND hwnd ) */ DPI_AWARENESS_CONTEXT WINAPI GetWindowDpiAwarenessContext( HWND hwnd ) { - WND *win; - DPI_AWARENESS_CONTEXT ret = 0; - - if (!(win = WIN_GetPtr( hwnd ))) - { - SetLastError( ERROR_INVALID_WINDOW_HANDLE ); - return 0; - } - if (win == WND_DESKTOP) return DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE; - if (win != WND_OTHER_PROCESS) - { - ret = ULongToHandle( win->dpi_awareness | 0x10 ); - WIN_ReleasePtr( win ); - } - else - { - SERVER_START_REQ( get_window_info ) - { - req->handle = wine_server_user_handle( hwnd ); - if (!wine_server_call_err( req )) ret = ULongToHandle( reply->awareness | 0x10 ); - } - SERVER_END_REQ; - } - return ret; + return (DPI_AWARENESS_CONTEXT)NtUserCallHwnd( hwnd, NtUserGetWindowDpiAwarenessContext ); }
diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h index f987f0099da..131e177a397 100644 --- a/dlls/win32u/win32u_private.h +++ b/dlls/win32u/win32u_private.h @@ -184,7 +184,7 @@ struct unix_funcs BOOL (WINAPI *pNtGdiUpdateColors)( HDC hdc ); BOOL (WINAPI *pNtGdiWidenPath)( HDC hdc ); HKL (WINAPI *pNtUserActivateKeyboardLayout)( HKL layout, UINT flags ); - DWORD (WINAPI *pNtUserCallHwnd)( HWND hwnd, DWORD code ); + ULONG_PTR (WINAPI *pNtUserCallHwnd)( HWND hwnd, DWORD code ); ULONG_PTR (WINAPI *pNtUserCallHwndParam)( HWND hwnd, DWORD_PTR param, DWORD code ); LRESULT (WINAPI *pNtUserCallNextHookEx)( HHOOK hhook, INT code, WPARAM wparam, LPARAM lparam ); ULONG_PTR (WINAPI *pNtUserCallNoParam)( ULONG code ); diff --git a/dlls/win32u/window.c b/dlls/win32u/window.c index 90e96e17842..ce03df84994 100644 --- a/dlls/win32u/window.c +++ b/dlls/win32u/window.c @@ -679,6 +679,35 @@ static BOOL is_window_unicode( HWND hwnd ) return ret; }
+/* see GetWindowDpiAwarenessContext */ +static DPI_AWARENESS_CONTEXT get_window_dpi_awareness_context( HWND hwnd ) +{ + DPI_AWARENESS_CONTEXT ret = 0; + WND *win; + + if (!(win = get_win_ptr( hwnd ))) + { + SetLastError( ERROR_INVALID_WINDOW_HANDLE ); + return 0; + } + if (win == WND_DESKTOP) return DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE; + if (win != WND_OTHER_PROCESS) + { + ret = ULongToHandle( win->dpi_awareness | 0x10 ); + release_win_ptr( win ); + } + else + { + SERVER_START_REQ( get_window_info ) + { + req->handle = wine_server_user_handle( hwnd ); + if (!wine_server_call_err( req )) ret = ULongToHandle( reply->awareness | 0x10 ); + } + SERVER_END_REQ; + } + return ret; +} + static LONG_PTR get_win_data( const void *ptr, UINT size ) { if (size == sizeof(WORD)) @@ -1082,12 +1111,14 @@ BOOL WINAPI NtUserFlashWindowEx( FLASHWINFO *info ) /***************************************************************************** * NtUserCallHwnd (win32u.@) */ -DWORD WINAPI NtUserCallHwnd( HWND hwnd, DWORD code ) +ULONG_PTR WINAPI NtUserCallHwnd( HWND hwnd, DWORD code ) { switch (code) { case NtUserGetParent: return HandleToUlong( get_parent( hwnd )); + case NtUserGetWindowDpiAwarenessContext: + return (ULONG_PTR)get_window_dpi_awareness_context( hwnd ); case NtUserGetWindowTextLength: return get_server_window_text( hwnd, NULL, 0 ); case NtUserIsWindow: diff --git a/dlls/win32u/wrappers.c b/dlls/win32u/wrappers.c index 02ec62e741b..74150e11db1 100644 --- a/dlls/win32u/wrappers.c +++ b/dlls/win32u/wrappers.c @@ -725,7 +725,7 @@ ULONG_PTR WINAPI NtUserCallTwoParam( ULONG_PTR arg1, ULONG_PTR arg2, ULONG code return unix_funcs->pNtUserCallTwoParam( arg1, arg2, code ); }
-DWORD WINAPI NtUserCallHwnd( HWND hwnd, DWORD code ) +ULONG_PTR WINAPI NtUserCallHwnd( HWND hwnd, DWORD code ) { if (!unix_funcs) return 0; return unix_funcs->pNtUserCallHwnd( hwnd, code ); diff --git a/include/ntuser.h b/include/ntuser.h index 1587e1db2f7..f45d0e8641c 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -142,6 +142,7 @@ enum enum { NtUserGetParent, + NtUserGetWindowDpiAwarenessContext, NtUserGetWindowTextLength, NtUserIsWindow, NtUserIsWindowUnicode, @@ -254,7 +255,7 @@ BOOL WINAPI NtUserAddClipboardFormatListener( HWND hwnd ); BOOL WINAPI NtUserAttachThreadInput( DWORD from, DWORD to, BOOL attach ); NTSTATUS WINAPI NtUserBuildHwndList( HDESK desktop, ULONG unk2, ULONG unk3, ULONG unk4, ULONG thread_id, ULONG count, HWND *buffer, ULONG *size ); -DWORD WINAPI NtUserCallHwnd( HWND hwnd, DWORD code ); +ULONG_PTR WINAPI NtUserCallHwnd( HWND hwnd, DWORD code ); ULONG_PTR WINAPI NtUserCallHwndParam( HWND hwnd, DWORD_PTR param, DWORD code ); LRESULT WINAPI NtUserCallNextHookEx( HHOOK hhook, INT code, WPARAM wparam, LPARAM lparam ); ULONG_PTR WINAPI NtUserCallNoParam( ULONG code );