Jacek Caban : win32u: Move GetWindowDpiAwarenessContext from user32.

Alexandre Julliard julliard at winehq.org
Wed Mar 9 16:08:44 CST 2022


Module: wine
Branch: master
Commit: 72316326356c6eeb724708b0d375572295781a1c
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=72316326356c6eeb724708b0d375572295781a1c

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Mar  9 15:21:51 2022 +0100

win32u: Move GetWindowDpiAwarenessContext from user32.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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 );




More information about the wine-cvs mailing list