Jacek Caban : win32u: Move get_icon_param and set_icon_param from user32.

Alexandre Julliard julliard at winehq.org
Thu Feb 24 15:33:40 CST 2022


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Feb 24 01:27:36 2022 +0100

win32u: Move get_icon_param and set_icon_param 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     | 23 ++-----------------
 dlls/win32u/cursoricon.c     | 53 ++++++++++++++++++++++++++++++++++++++++++++
 dlls/win32u/ntuser_private.h | 24 --------------------
 dlls/win32u/sysparams.c      |  4 ++++
 dlls/win32u/win32u_private.h |  2 ++
 include/ntuser.h             |  2 ++
 6 files changed, 63 insertions(+), 45 deletions(-)

diff --git a/dlls/user32/cursoricon.c b/dlls/user32/cursoricon.c
index d0aaceb14a0..cab9fbde32e 100644
--- a/dlls/user32/cursoricon.c
+++ b/dlls/user32/cursoricon.c
@@ -81,31 +81,12 @@ static void free_icon_frame( struct cursoricon_frame *frame )
 
 ULONG_PTR get_icon_param( HICON handle )
 {
-    ULONG_PTR ret = 0;
-    struct cursoricon_object *obj = get_user_handle_ptr( handle, NTUSER_OBJ_ICON );
-
-    if (obj == OBJ_OTHER_PROCESS) WARN( "icon handle %p from other process\n", handle );
-    else if (obj)
-    {
-        ret = obj->param;
-        release_user_handle_ptr( obj );
-    }
-    return ret;
+    return NtUserCallOneParam( HandleToUlong(handle), NtUserGetIconParam );
 }
 
 ULONG_PTR set_icon_param( HICON handle, ULONG_PTR param )
 {
-    ULONG_PTR ret = 0;
-    struct cursoricon_object *obj = get_user_handle_ptr( handle, NTUSER_OBJ_ICON );
-
-    if (obj == OBJ_OTHER_PROCESS) WARN( "icon handle %p from other process\n", handle );
-    else if (obj)
-    {
-        ret = obj->param;
-        obj->param = param;
-        release_user_handle_ptr( obj );
-    }
-    return ret;
+    return NtUserCallTwoParam( HandleToUlong(handle), param, NtUserSetIconParam );
 }
 
 
diff --git a/dlls/win32u/cursoricon.c b/dlls/win32u/cursoricon.c
index e2c121d6c1e..0249eb3da50 100644
--- a/dlls/win32u/cursoricon.c
+++ b/dlls/win32u/cursoricon.c
@@ -37,6 +37,30 @@
 WINE_DEFAULT_DEBUG_CHANNEL(cursor);
 WINE_DECLARE_DEBUG_CHANNEL(icon);
 
+struct cursoricon_object
+{
+    struct user_object      obj;        /* object header */
+    struct list             entry;      /* entry in shared icons list */
+    ULONG_PTR               param;      /* opaque param used by 16-bit code */
+    UNICODE_STRING          module;     /* module for icons loaded from resources */
+    WCHAR                  *resname;    /* resource name for icons loaded from resources */
+    HRSRC                   rsrc;       /* resource for shared icons */
+    BOOL                    is_shared;  /* whether this object is shared */
+    BOOL                    is_icon;    /* whether icon or cursor */
+    BOOL                    is_ani;     /* whether this object is a static cursor or an animated cursor */
+    UINT                    delay;      /* delay between this frame and the next (in jiffies) */
+    union
+    {
+        struct cursoricon_frame  frame; /* frame-specific icon data */
+        struct
+        {
+            UINT  num_frames;           /* number of frames in the icon/cursor */
+            UINT  num_steps;            /* number of sequence steps in the icon/cursor */
+            HICON *frames;              /* list of animated cursor frames */
+        } ani;
+    };
+};
+
 static struct list icon_cache = LIST_INIT( icon_cache );
 
 static struct cursoricon_object *get_icon_ptr( HICON handle )
@@ -733,3 +757,32 @@ failed:
     release_user_handle_ptr( obj );
     return result;
 }
+
+ULONG_PTR get_icon_param( HICON handle )
+{
+    ULONG_PTR ret = 0;
+    struct cursoricon_object *obj = get_user_handle_ptr( handle, NTUSER_OBJ_ICON );
+
+    if (obj == OBJ_OTHER_PROCESS) WARN( "icon handle %p from other process\n", handle );
+    else if (obj)
+    {
+        ret = obj->param;
+        release_user_handle_ptr( obj );
+    }
+    return ret;
+}
+
+ULONG_PTR set_icon_param( HICON handle, ULONG_PTR param )
+{
+    ULONG_PTR ret = 0;
+    struct cursoricon_object *obj = get_user_handle_ptr( handle, NTUSER_OBJ_ICON );
+
+    if (obj == OBJ_OTHER_PROCESS) WARN( "icon handle %p from other process\n", handle );
+    else if (obj)
+    {
+        ret = obj->param;
+        obj->param = param;
+        release_user_handle_ptr( obj );
+    }
+    return ret;
+}
diff --git a/dlls/win32u/ntuser_private.h b/dlls/win32u/ntuser_private.h
index db1a08ff102..f79930ba229 100644
--- a/dlls/win32u/ntuser_private.h
+++ b/dlls/win32u/ntuser_private.h
@@ -125,30 +125,6 @@ struct user_key_state_info
     BYTE  state[256];    /* State for each key */
 };
 
-struct cursoricon_object
-{
-    struct user_object      obj;        /* object header */
-    struct list             entry;      /* entry in shared icons list */
-    ULONG_PTR               param;      /* opaque param used by 16-bit code */
-    UNICODE_STRING          module;     /* module for icons loaded from resources */
-    LPWSTR                  resname;    /* resource name for icons loaded from resources */
-    HRSRC                   rsrc;       /* resource for shared icons */
-    BOOL                    is_shared;  /* whether this object is shared */
-    BOOL                    is_icon;    /* whether icon or cursor */
-    BOOL                    is_ani;     /* whether this object is a static cursor or an animated cursor */
-    UINT                    delay;      /* delay between this frame and the next (in jiffies) */
-    union
-    {
-        struct cursoricon_frame  frame; /* frame-specific icon data */
-        struct
-        {
-            UINT  num_frames;           /* number of frames in the icon/cursor */
-            UINT  num_steps;            /* number of sequence steps in the icon/cursor */
-            HICON *frames;              /* list of animated cursor frames */
-        } ani;
-    };
-};
-
 /* cursoricon.c */
 HICON alloc_cursoricon_handle( BOOL is_icon ) DECLSPEC_HIDDEN;
 
diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c
index 70d310646ef..4eaaceb2892 100644
--- a/dlls/win32u/sysparams.c
+++ b/dlls/win32u/sysparams.c
@@ -4558,6 +4558,8 @@ ULONG_PTR WINAPI NtUserCallOneParam( ULONG_PTR arg, ULONG code )
         return get_clip_cursor( (RECT *)arg );
     case NtUserGetCursorPos:
         return get_cursor_pos( (POINT *)arg );
+    case NtUserGetIconParam:
+        return get_icon_param( UlongToHandle(arg) );
     case NtUserGetSysColor:
         return get_sys_color( arg );
     case NtUserRealizePalette:
@@ -4616,6 +4618,8 @@ ULONG_PTR WINAPI NtUserCallTwoParam( ULONG_PTR arg1, ULONG_PTR arg2, ULONG code
         return mirror_window_region( UlongToHandle(arg1), UlongToHandle(arg2) );
     case NtUserMonitorFromRect:
         return HandleToUlong( monitor_from_rect( (const RECT *)arg1, arg2, get_thread_dpi() ));
+    case NtUserSetIconParam:
+        return set_icon_param( UlongToHandle(arg1), arg2 );
     case NtUserUnhookWindowsHook:
         return unhook_windows_hook( arg1, (HOOKPROC)arg2 );
     /* temporary exports */
diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h
index 9ff6d3143db..64712a66e12 100644
--- a/dlls/win32u/win32u_private.h
+++ b/dlls/win32u/win32u_private.h
@@ -247,6 +247,8 @@ struct unix_funcs
 /* cursoricon.c */
 extern HICON alloc_cursoricon_handle( BOOL is_icon ) DECLSPEC_HIDDEN;
 extern BOOL get_clip_cursor( RECT *rect ) DECLSPEC_HIDDEN;
+extern ULONG_PTR get_icon_param( HICON handle ) DECLSPEC_HIDDEN;
+extern ULONG_PTR set_icon_param( HICON handle, ULONG_PTR param ) DECLSPEC_HIDDEN;
 
 /* hook.c */
 extern BOOL unhook_windows_hook( INT id, HOOKPROC proc ) DECLSPEC_HIDDEN;
diff --git a/include/ntuser.h b/include/ntuser.h
index ecefd2d68cb..a4184c944d4 100644
--- a/include/ntuser.h
+++ b/include/ntuser.h
@@ -80,6 +80,7 @@ enum
     NtUserCreateCursorIcon,
     NtUserGetClipCursor,
     NtUserGetCursorPos,
+    NtUserGetIconParam,
     NtUserGetPrimaryMonitorRect,
     NtUserGetSysColor,
     NtUserGetSysColorBrush,
@@ -104,6 +105,7 @@ enum
     NtUserGetSystemMetricsForDpi,
     NtUserMirrorRgn,
     NtUserMonitorFromRect,
+    NtUserSetIconParam,
     NtUserUnhookWindowsHook,
     /* temporary exports */
     NtUserAllocHandle,




More information about the wine-cvs mailing list