Alexandre Julliard : user32: Move EnumProps16 to wnd16.c.

Alexandre Julliard julliard at winehq.org
Thu Dec 17 10:37:17 CST 2009


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu Dec 17 17:24:16 2009 +0100

user32: Move EnumProps16 to wnd16.c.

---

 dlls/user32/property.c |   45 +----------------------------------
 dlls/user32/wnd16.c    |   62 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 63 insertions(+), 44 deletions(-)

diff --git a/dlls/user32/property.c b/dlls/user32/property.c
index d5b1bfd..52f389e 100644
--- a/dlls/user32/property.c
+++ b/dlls/user32/property.c
@@ -26,9 +26,8 @@
 
 #include "windef.h"
 #include "winbase.h"
-#include "wownt32.h"
+#include "winuser.h"
 #include "wine/unicode.h"
-#include "wine/winuser16.h"
 #include "wine/server.h"
 
 /* size of buffer needed to store an atom string */
@@ -252,45 +251,3 @@ INT WINAPI EnumPropsExW(HWND hwnd, PROPENUMPROCEXW func, LPARAM lParam)
     }
     return ret;
 }
-
-
-/***********************************************************************
- *              EnumProps   (USER.27)
- */
-INT16 WINAPI EnumProps16( HWND16 hwnd, PROPENUMPROC16 func )
-{
-    int ret = -1, i, count;
-    property_data_t *list = get_properties( HWND_32(hwnd), &count );
-
-    if (list)
-    {
-        char string[ATOM_BUFFER_SIZE];
-        SEGPTR segptr = MapLS( string );
-        WORD args[4];
-        DWORD result;
-
-        for (i = 0; i < count; i++)
-        {
-            if (list[i].string)  /* it was a string originally */
-            {
-                if (!GlobalGetAtomNameA( list[i].atom, string, ATOM_BUFFER_SIZE )) continue;
-                args[3] = hwnd;
-                args[2] = SELECTOROF(segptr);
-                args[1] = OFFSETOF(segptr);
-                args[0] = LOWORD(list[i].data);
-            }
-            else
-            {
-                args[3] = hwnd;
-                args[2] = 0;
-                args[1] = list[i].atom;
-                args[0] = LOWORD(list[i].data);
-            }
-            WOWCallback16Ex( (DWORD)func, WCB16_PASCAL, sizeof(args), args, &result );
-            if (!(ret = LOWORD(result))) break;
-        }
-        UnMapLS( segptr );
-        HeapFree( GetProcessHeap(), 0, list );
-    }
-    return ret;
-}
diff --git a/dlls/user32/wnd16.c b/dlls/user32/wnd16.c
index 4c2f2f2..4873be7 100644
--- a/dlls/user32/wnd16.c
+++ b/dlls/user32/wnd16.c
@@ -22,6 +22,10 @@
 #include "wownt32.h"
 #include "win.h"
 #include "user_private.h"
+#include "wine/server.h"
+
+/* size of buffer needed to store an atom string */
+#define ATOM_BUFFER_SIZE 256
 
 /* handle <--> handle16 conversions */
 #define HANDLE_16(h32)		(LOWORD(h32))
@@ -158,6 +162,64 @@ BOOL16 WINAPI SetProp16( HWND16 hwnd, LPCSTR str, HANDLE16 handle )
 }
 
 
+/***********************************************************************
+ *              EnumProps   (USER.27)
+ */
+INT16 WINAPI EnumProps16( HWND16 hwnd, PROPENUMPROC16 func )
+{
+    int ret = -1, i, count, total = 32;
+    property_data_t *list;
+
+    while (total)
+    {
+        if (!(list = HeapAlloc( GetProcessHeap(), 0, total * sizeof(*list) ))) break;
+        count = 0;
+        SERVER_START_REQ( get_window_properties )
+        {
+            req->window = wine_server_user_handle( HWND_32(hwnd) );
+            wine_server_set_reply( req, list, total * sizeof(*list) );
+            if (!wine_server_call( req )) count = reply->total;
+        }
+        SERVER_END_REQ;
+
+        if (count && count <= total)
+        {
+            char string[ATOM_BUFFER_SIZE];
+            SEGPTR segptr = MapLS( string );
+            WORD args[4];
+            DWORD result;
+
+            for (i = 0; i < count; i++)
+            {
+                if (list[i].string)  /* it was a string originally */
+                {
+                    if (!GlobalGetAtomNameA( list[i].atom, string, ATOM_BUFFER_SIZE )) continue;
+                    args[3] = hwnd;
+                    args[2] = SELECTOROF(segptr);
+                    args[1] = OFFSETOF(segptr);
+                    args[0] = LOWORD(list[i].data);
+                }
+                else
+                {
+                    args[3] = hwnd;
+                    args[2] = 0;
+                    args[1] = list[i].atom;
+                    args[0] = LOWORD(list[i].data);
+                }
+                WOWCallback16Ex( (DWORD)func, WCB16_PASCAL, sizeof(args), args, &result );
+                if (!(ret = LOWORD(result))) break;
+            }
+            UnMapLS( segptr );
+            HeapFree( GetProcessHeap(), 0, list );
+            break;
+        }
+        HeapFree( GetProcessHeap(), 0, list );
+        total = count;  /* restart with larger buffer */
+    }
+    return ret;
+}
+
+
 /**************************************************************************
  *              ClientToScreen   (USER.28)
  */




More information about the wine-cvs mailing list