Jacek Caban : win32u: Move GetClipCursor implementation from user32.

Alexandre Julliard julliard at winehq.org
Mon Feb 14 15:41:30 CST 2022


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Feb 14 14:07:34 2022 +0100

win32u: Move GetClipCursor implementation 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/cursoricon.c     | 27 +--------------------------
 dlls/win32u/cursoricon.c     | 28 ++++++++++++++++++++++++++++
 dlls/win32u/sysparams.c      |  2 ++
 dlls/win32u/win32u_private.h |  4 ++++
 include/ntuser.h             |  1 +
 5 files changed, 36 insertions(+), 26 deletions(-)

diff --git a/dlls/user32/cursoricon.c b/dlls/user32/cursoricon.c
index 32c04852bf9..59c50ae53d8 100644
--- a/dlls/user32/cursoricon.c
+++ b/dlls/user32/cursoricon.c
@@ -1947,32 +1947,7 @@ HCURSOR WINAPI DECLSPEC_HOTPATCH SetCursor( HCURSOR hCursor /* [in] Handle of cu
  */
 BOOL WINAPI DECLSPEC_HOTPATCH GetClipCursor( RECT *rect )
 {
-    DPI_AWARENESS_CONTEXT context;
-    UINT dpi;
-    BOOL ret;
-
-    if (!rect) return FALSE;
-
-    SERVER_START_REQ( set_cursor )
-    {
-        req->flags = 0;
-        if ((ret = !wine_server_call( req )))
-        {
-            rect->left   = reply->new_clip.left;
-            rect->top    = reply->new_clip.top;
-            rect->right  = reply->new_clip.right;
-            rect->bottom = reply->new_clip.bottom;
-        }
-    }
-    SERVER_END_REQ;
-
-    if (ret && (dpi = get_thread_dpi()))
-    {
-        context = SetThreadDpiAwarenessContext( DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE );
-        *rect = map_dpi_rect( *rect, get_monitor_dpi( MonitorFromRect( rect, MONITOR_DEFAULTTOPRIMARY )), dpi );
-        SetThreadDpiAwarenessContext( context );
-    }
-    return ret;
+    return NtUserCallOneParam( (UINT_PTR)rect, NtUserGetClipCursor );
 }
 
 
diff --git a/dlls/win32u/cursoricon.c b/dlls/win32u/cursoricon.c
index 7b23dfb7d0b..cafea198809 100644
--- a/dlls/win32u/cursoricon.c
+++ b/dlls/win32u/cursoricon.c
@@ -127,3 +127,31 @@ BOOL WINAPI NtUserClipCursor( const RECT *rect )
     if (ret) user_driver->pClipCursor( &new_rect );
     return ret;
 }
+
+BOOL get_clip_cursor( RECT *rect )
+{
+    UINT dpi;
+    BOOL ret;
+
+    if (!rect) return FALSE;
+
+    SERVER_START_REQ( set_cursor )
+    {
+        req->flags = 0;
+        if ((ret = !wine_server_call( req )))
+        {
+            rect->left   = reply->new_clip.left;
+            rect->top    = reply->new_clip.top;
+            rect->right  = reply->new_clip.right;
+            rect->bottom = reply->new_clip.bottom;
+        }
+    }
+    SERVER_END_REQ;
+
+    if (ret && (dpi = get_thread_dpi()))
+    {
+        HMONITOR monitor = monitor_from_rect( rect, MONITOR_DEFAULTTOPRIMARY, 0 );
+        *rect = map_dpi_rect( *rect, get_monitor_dpi( monitor ), dpi );
+    }
+    return ret;
+}
diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c
index d57203e330c..f409921785f 100644
--- a/dlls/win32u/sysparams.c
+++ b/dlls/win32u/sysparams.c
@@ -4462,6 +4462,8 @@ ULONG_PTR WINAPI NtUserCallOneParam( ULONG_PTR arg, ULONG code )
 {
     switch(code)
     {
+    case NtUserGetClipCursor:
+        return get_clip_cursor( (RECT *)arg );
     case NtUserGetSysColor:
         return get_sys_color( arg );
     case NtUserRealizePalette:
diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h
index ee26d4af52a..6594d7b10b7 100644
--- a/dlls/win32u/win32u_private.h
+++ b/dlls/win32u/win32u_private.h
@@ -241,6 +241,10 @@ struct unix_funcs
                                       struct window_surface *surface );
 };
 
+/* cursoricon.c */
+extern BOOL get_clip_cursor( RECT *rect ) DECLSPEC_HIDDEN;
+
+/* sysparams.c */
 extern RECT get_display_rect( const WCHAR *display ) DECLSPEC_HIDDEN;
 extern UINT get_monitor_dpi( HMONITOR monitor ) DECLSPEC_HIDDEN;
 extern UINT get_system_dpi(void) DECLSPEC_HIDDEN;
diff --git a/include/ntuser.h b/include/ntuser.h
index b2aa11f90fd..11bc0bbcb44 100644
--- a/include/ntuser.h
+++ b/include/ntuser.h
@@ -52,6 +52,7 @@ struct enum_display_monitor_params
 /* NtUserCallOneParam codes, not compatible with Windows */
 enum
 {
+    NtUserGetClipCursor,
     NtUserGetSysColor,
     NtUserGetSysColorBrush,
     NtUserGetSysColorPen,




More information about the wine-cvs mailing list