Alexandre Julliard : user: Get rid of the WINPROC_Map/ UnmapMsg32ATo32W functions.

Alexandre Julliard julliard at wine.codeweavers.com
Mon May 22 05:19:09 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: fcce047f616e1e6c069a68beba42533761f8dfde
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=fcce047f616e1e6c069a68beba42533761f8dfde

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Sat May 20 20:02:10 2006 +0200

user: Get rid of the WINPROC_Map/UnmapMsg32ATo32W functions.

---

 dlls/user/winproc.c |  189 +++++++--------------------------------------------
 1 files changed, 26 insertions(+), 163 deletions(-)

diff --git a/dlls/user/winproc.c b/dlls/user/winproc.c
index 09cf599..36e7907 100644
--- a/dlls/user/winproc.c
+++ b/dlls/user/winproc.c
@@ -500,31 +500,6 @@ static LRESULT call_dialog_proc( HWND hw
     return ret;
 }
 
-/**********************************************************************
- *	     WINPROC_CallWndProc32
- *
- * Call a 32-bit WndProc.
- */
-static LRESULT WINPROC_CallWndProc( WNDPROC proc, HWND hwnd, UINT msg,
-                                      WPARAM wParam, LPARAM lParam )
-{
-    LRESULT retvalue;
-
-    USER_CheckNotLock();
-
-    hwnd = WIN_GetFullHandle( hwnd );
-    if (TRACE_ON(relay))
-        DPRINTF( "%04lx:Call window proc %p (hwnd=%p,msg=%s,wp=%08x,lp=%08lx)\n",
-                 GetCurrentThreadId(), proc, hwnd, SPY_GetMsgName(msg, hwnd), wParam, lParam );
-
-    retvalue = WINPROC_wrapper( proc, hwnd, msg, wParam, lParam );
-
-    if (TRACE_ON(relay))
-        DPRINTF( "%04lx:Ret  window proc %p (hwnd=%p,msg=%s,wp=%08x,lp=%08lx) retval=%08lx\n",
-                 GetCurrentThreadId(), proc, hwnd, SPY_GetMsgName(msg, hwnd), wParam, lParam, retvalue );
-    return retvalue;
-}
-
 /* call a 16-bit window procedure */
 static LRESULT call_window_proc16( HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam,
                                    LRESULT *result, void *arg )
@@ -728,120 +703,6 @@ inline static BOOL WINPROC_TestLBForStr(
         return (!(style & (LBS_OWNERDRAWFIXED | LBS_OWNERDRAWVARIABLE)) || (style & LBS_HASSTRINGS));
 
 }
-/**********************************************************************
- *	     WINPROC_MapMsg32ATo32W
- *
- * Map a message from Ansi to Unicode.
- * Return value is -1 on error, 0 if OK, 1 if an UnmapMsg call is needed.
- *
- * FIXME:
- *  WM_GETTEXT/WM_SETTEXT and static control with SS_ICON style:
- *  the first four bytes are the handle of the icon
- *  when the WM_SETTEXT message has been used to set the icon
- */
-static INT WINPROC_MapMsg32ATo32W( HWND hwnd, UINT msg, WPARAM *pwparam, LPARAM *plparam )
-{
-    switch(msg)
-    {
-    case WM_GETTEXT:
-    case WM_ASKCBFORMATNAME:
-        {
-            LPARAM *ptr = HeapAlloc( GetProcessHeap(), 0,
-                                     *pwparam * sizeof(WCHAR) + sizeof(LPARAM) );
-            if (!ptr) return -1;
-            *ptr++ = *plparam;  /* Store previous lParam */
-            *plparam = (LPARAM)ptr;
-        }
-        return 1;
-    /* lparam is string (0-terminated) */
-    case WM_SETTEXT:
-    case WM_WININICHANGE:
-    case WM_DEVMODECHANGE:
-    case CB_DIR:
-    case LB_DIR:
-    case LB_ADDFILE:
-    case EM_REPLACESEL:
-        if (!*plparam) return 0;
-        else
-        {
-            DWORD len = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)*plparam, -1, NULL, 0);
-            WCHAR *buf = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
-            MultiByteToWideChar(CP_ACP, 0, (LPCSTR)*plparam, -1, buf, len);
-            *plparam = (LPARAM)buf;
-            return (*plparam ? 1 : -1);
-        }
-    default:  /* No translation needed */
-        return 0;
-    }
-}
-
-
-/**********************************************************************
- *	     WINPROC_UnmapMsg32ATo32W
- *
- * Unmap a message that was mapped from Ansi to Unicode.
- */
-static LRESULT WINPROC_UnmapMsg32ATo32W( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam,
-                                         LRESULT result, WNDPROC dispatch )
-{
-    switch(msg)
-    {
-    case WM_GETTEXT:
-    case WM_ASKCBFORMATNAME:
-        {
-            LPARAM *ptr = (LPARAM *)lParam - 1;
-            if (!wParam) result = 0;
-            else if (!(result = WideCharToMultiByte( CP_ACP, 0, (LPWSTR)lParam, -1,
-                                                    (LPSTR)*ptr, wParam, NULL, NULL )))
-            {
-                ((LPSTR)*ptr)[wParam-1] = 0;
-                result = wParam - 1;
-            }
-            else result--;  /* do not count terminating null */
-            HeapFree( GetProcessHeap(), 0, ptr );
-        }
-        break;
-    case WM_GETTEXTLENGTH:
-    case CB_GETLBTEXTLEN:
-    case LB_GETTEXTLEN:
-        if (result >= 0)
-        {
-            /* Determine respective GETTEXT message */
-            UINT msgGetText =
-              (msg == WM_GETTEXTLENGTH) ? WM_GETTEXT :
-              ((msg == CB_GETLBTEXTLEN) ? CB_GETLBTEXT : LB_GETTEXT);
-            /* wParam differs between the messages */
-            WPARAM wp = (msg == WM_GETTEXTLENGTH) ? (WPARAM)(result + 1) : wParam;
-
-            WCHAR* p = HeapAlloc (GetProcessHeap(), 0, (result + 1) * sizeof(WCHAR));
-
-            if (p)
-            {
-                LRESULT n;
-
-                if (dispatch)
-                    n = WINPROC_CallWndProc(dispatch, hwnd, msgGetText, wp, (LPARAM)p);
-                else
-                    n = SendMessageW (hwnd, msgGetText, wp, (LPARAM)p);
-
-                result = WideCharToMultiByte( CP_ACP, 0, p, n, NULL, 0, 0, NULL );
-                HeapFree (GetProcessHeap(), 0, p);
-            }
-        }
-        break;
-
-    case WM_SETTEXT:
-    case WM_WININICHANGE:
-    case WM_DEVMODECHANGE:
-    case CB_DIR:
-    case LB_DIR:
-    case LB_ADDFILE:
-    case EM_REPLACESEL:
-        HeapFree( GetProcessHeap(), 0, (void *)lParam );
-        break;
-    }
-    return result;
-}
 
 
 static UINT convert_handle_16_to_32(HANDLE16 src, unsigned int flags)
@@ -1340,17 +1201,6 @@ static INT WINPROC_MapMsg16To32W( HWND h
     *pwparam32 = (WPARAM)wParam16;
     switch(msg16)
     {
-    case WM_GETTEXT:
-    case WM_SETTEXT:
-    case WM_WININICHANGE:
-    case WM_DEVMODECHANGE:
-    case WM_ASKCBFORMATNAME:
-        *plparam = (LPARAM)MapSL(*plparam);
-        return WINPROC_MapMsg32ATo32W( hwnd, *pmsg32, pwparam32, plparam );
-    case WM_GETTEXTLENGTH:
-    case CB_GETLBTEXTLEN:
-    case LB_GETTEXTLEN:
-        return 1;  /* need to map result */
     case WM_NCCREATE:
     case WM_CREATE:
         {
@@ -1452,17 +1302,10 @@ static INT WINPROC_MapMsg16To32W( HWND h
  * Unmap a message that was mapped from 16- to 32-bit Unicode.
  */
 static LRESULT WINPROC_UnmapMsg16To32W( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam,
-                                        LRESULT result, WNDPROC dispatch )
+                                        LRESULT result )
 {
     switch(msg)
     {
-    case WM_GETTEXT:
-    case WM_SETTEXT:
-    case WM_GETTEXTLENGTH:
-    case CB_GETLBTEXTLEN:
-    case LB_GETTEXTLEN:
-    case WM_ASKCBFORMATNAME:
-        return WINPROC_UnmapMsg32ATo32W( hwnd, msg, wParam, lParam, result, dispatch );
     case WM_NCCREATE:
     case WM_CREATE:
         {
@@ -2996,12 +2839,32 @@ static LRESULT WINPROC_CallProc16To32W( 
     TRACE_(msg)("(hwnd=%p,msg=%s,wp=%08x,lp=%08lx)\n",
                  hwnd32, SPY_GetMsgName(msg, hwnd32), wParam, lParam);
 
-    if (WINPROC_MapMsg16To32W( hwnd32, msg, wParam, &msg32, &wParam32, &lParam ) == -1)
-        return 0;
+    switch(msg)
+    {
+    case WM_GETTEXT:
+    case WM_ASKCBFORMATNAME:
+    case WM_SETTEXT:
+    case WM_WININICHANGE:
+    case WM_DEVMODECHANGE:
+    case CB_DIR:
+    case LB_DIR:
+    case LB_ADDFILE:
+    case EM_REPLACESEL:
+        ret = WINPROC_CallProcAtoW( callback, hwnd32, msg, wParam, (LPARAM)MapSL(lParam), result, arg );
+        break;
 
-    ret = callback( hwnd32, msg32, wParam32, lParam, result, arg );
-    *result = WINPROC_UnmapMsg16To32W( hwnd32, msg32, wParam32, lParam, *result,
-                                       (callback == call_window_proc) ? arg : NULL  /*FIXME: hack*/ );
+    case WM_GETTEXTLENGTH:
+    case CB_GETLBTEXTLEN:
+    case LB_GETTEXTLEN:
+        ret = WINPROC_CallProcAtoW( callback, hwnd32, msg, wParam, lParam, result, arg );
+        break;
+
+    default:
+        if (WINPROC_MapMsg16To32W( hwnd32, msg, wParam, &msg32, &wParam32, &lParam ) == -1)
+            return 0;
+        ret = callback( hwnd32, msg32, wParam32, lParam, result, arg );
+        *result = WINPROC_UnmapMsg16To32W( hwnd32, msg32, wParam32, lParam, *result );
+    }
     return ret;
 }
 




More information about the wine-cvs mailing list