Alexandre Julliard : user32: Move DestroyIcon32 implementation to user16.c.

Alexandre Julliard julliard at winehq.org
Tue Dec 22 09:58:57 CST 2009


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Dec 22 13:48:19 2009 +0100

user32: Move DestroyIcon32 implementation to user16.c.

---

 dlls/user32/cursoricon.c |   57 +++++++++-------------------------------------
 dlls/user32/user16.c     |   40 +++++++++++++++++++++++++++++++-
 dlls/user32/user32.spec  |    5 ----
 3 files changed, 50 insertions(+), 52 deletions(-)

diff --git a/dlls/user32/cursoricon.c b/dlls/user32/cursoricon.c
index 118b8b6..1320523 100644
--- a/dlls/user32/cursoricon.c
+++ b/dlls/user32/cursoricon.c
@@ -84,10 +84,6 @@ typedef struct
 
 #include "poppack.h"
 
-#define CID_RESOURCE  0x0001
-#define CID_WIN32     0x0004
-#define CID_NONSHARED 0x0008
-
 static RECT CURSOR_ClipRect;       /* Cursor clipping rect */
 
 static HDC screen_dc;
@@ -1470,52 +1466,16 @@ HICON WINAPI CopyIcon( HICON hIcon )
 }
 
 
-/**********************************************************************
- *		DestroyIcon32 (USER.610)
- *
- * This routine is actually exported from Win95 USER under the name
- * DestroyIcon32 ...  The behaviour implemented here should mimic
- * the Win95 one exactly, especially the return values, which
- * depend on the setting of various flags.
- */
-WORD WINAPI DestroyIcon32( HGLOBAL16 handle, UINT16 flags )
-{
-    WORD retv;
-
-    TRACE_(icon)("(%04x, %04x)\n", handle, flags );
-
-    /* Check whether destroying active cursor */
-
-    if ( get_user_thread_info()->cursor == HICON_32(handle) )
-    {
-        WARN_(cursor)("Destroying active cursor!\n" );
-        return FALSE;
-    }
-
-    /* Try shared cursor/icon first */
-
-    if ( !(flags & CID_NONSHARED) )
-    {
-        INT count = CURSORICON_DelSharedIcon(HICON_32(handle));
-
-        if ( count != -1 )
-            return (flags & CID_WIN32)? TRUE : (count == 0);
-
-        /* FIXME: OEM cursors/icons should be recognized */
-    }
-
-    /* Now assume non-shared cursor/icon */
-
-    retv = GlobalFree16( handle );
-    return (flags & CID_RESOURCE)? retv : TRUE;
-}
-
 /***********************************************************************
  *		DestroyIcon (USER32.@)
  */
 BOOL WINAPI DestroyIcon( HICON hIcon )
 {
-    return DestroyIcon32(HICON_16(hIcon), CID_WIN32);
+    TRACE_(icon)("%p\n", hIcon );
+
+    if (CURSORICON_DelSharedIcon( hIcon ) == -1)
+        GlobalFree16( HICON_16(hIcon) );
+    return TRUE;
 }
 
 
@@ -1524,7 +1484,12 @@ BOOL WINAPI DestroyIcon( HICON hIcon )
  */
 BOOL WINAPI DestroyCursor( HCURSOR hCursor )
 {
-    return DestroyIcon32(HCURSOR_16(hCursor), CID_WIN32);
+    if (get_user_thread_info()->cursor == hCursor)
+    {
+        WARN_(cursor)("Destroying active cursor!\n" );
+        return FALSE;
+    }
+    return DestroyIcon( hCursor );
 }
 
 /***********************************************************************
diff --git a/dlls/user32/user16.c b/dlls/user32/user16.c
index 4daaafd..6305945 100644
--- a/dlls/user32/user16.c
+++ b/dlls/user32/user16.c
@@ -55,7 +55,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(user);
 #define USUD_LOCALHEAP         0x0004
 #define USUD_FIRSTCLASS        0x0005
 
-WORD WINAPI DestroyIcon32(HGLOBAL16, UINT16);
+#define CID_RESOURCE  0x0001
+#define CID_WIN32     0x0004
+#define CID_NONSHARED 0x0008
 
 WORD USER_HeapSel = 0;  /* USER heap selector */
 
@@ -2854,6 +2856,42 @@ DWORD WINAPI FormatMessage16(
 #undef ADD_TO_T
 
 
+/**********************************************************************
+ *		DestroyIcon32 (USER.610)
+ *
+ * This routine is actually exported from Win95 USER under the name
+ * DestroyIcon32 ...  The behaviour implemented here should mimic
+ * the Win95 one exactly, especially the return values, which
+ * depend on the setting of various flags.
+ */
+WORD WINAPI DestroyIcon32( HGLOBAL16 handle, UINT16 flags )
+{
+    WORD retv;
+
+    /* Check whether destroying active cursor */
+
+    if (GetCursor16() == handle)
+    {
+        WARN("Destroying active cursor!\n" );
+        return FALSE;
+    }
+
+    /* Try shared cursor/icon first */
+
+    if (!(flags & CID_NONSHARED))
+    {
+        INT count = release_shared_icon( handle );
+        if (count != -1)
+            return (flags & CID_WIN32) ? TRUE : (count == 0);
+    }
+
+    /* Now assume non-shared cursor/icon */
+
+    retv = GlobalFree16( handle );
+    return (flags & CID_RESOURCE)? retv : TRUE;
+}
+
+
 /***********************************************************************
  *		ChangeDisplaySettings (USER.620)
  */
diff --git a/dlls/user32/user32.spec b/dlls/user32/user32.spec
index 4492e58..7f87a20 100644
--- a/dlls/user32/user32.spec
+++ b/dlls/user32/user32.spec
@@ -772,11 +772,6 @@
 @ stdcall wvsprintfW(ptr wstr ptr)
 
 ################################################################
-# Wine extensions: Win16 functions that are needed by other dlls
-#
-@ stdcall DestroyIcon32(long long)
-
-################################################################
 # Wine dll separation hacks, these will go away, don't use them
 #
 @ cdecl HOOK_CallHooks(long long long long long)




More information about the wine-cvs mailing list