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