Alexandre Julliard : user: Added fast 32->16 mapping for WM_COPYDATA, WM_GETDLGCODE and WM_NEXTMENU.

Alexandre Julliard julliard at wine.codeweavers.com
Fri May 26 13:55:00 CDT 2006


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Fri May 26 14:03:49 2006 +0200

user: Added fast 32->16 mapping for WM_COPYDATA, WM_GETDLGCODE and WM_NEXTMENU.

---

 dlls/user/winproc.c |  101 ++++++++++++++++++++++-----------------------------
 1 files changed, 43 insertions(+), 58 deletions(-)

diff --git a/dlls/user/winproc.c b/dlls/user/winproc.c
index adcd041..e603b53 100644
--- a/dlls/user/winproc.c
+++ b/dlls/user/winproc.c
@@ -953,16 +953,6 @@ static INT WINPROC_MapMsg32ATo16( HWND h
     case WM_VSCROLL:
         *plparam = MAKELPARAM( HIWORD(wParam32), (HWND16)*plparam );
         return 0;
-    case WM_COPYDATA:
-        {
-            PCOPYDATASTRUCT pcds32 = (PCOPYDATASTRUCT) *plparam;
-            PCOPYDATASTRUCT16 pcds = HeapAlloc( GetProcessHeap(), 0, sizeof( *pcds));
-            pcds->dwData = pcds32->dwData;
-            pcds->cbData = pcds32->cbData;
-            pcds->lpData = MapLS( pcds32->lpData);
-            *plparam = MapLS( pcds );
-        }
-        return 1;
     case WM_CTLCOLORMSGBOX:
     case WM_CTLCOLOREDIT:
     case WM_CTLCOLORLISTBOX:
@@ -1031,33 +1021,9 @@ static INT WINPROC_MapMsg32ATo16( HWND h
     case WM_DEVMODECHANGE:
         *plparam = MapLS( (LPSTR)*plparam );
         return 1;
-    case WM_GETDLGCODE:
-         if (*plparam) {
-            LPMSG msg32 = (LPMSG) *plparam;
-            LPMSG16 msg16 = HeapAlloc( GetProcessHeap(), 0, sizeof(MSG16) );
-
-            if (!msg16) return -1;
-            msg16->hwnd = HWND_16( msg32->hwnd );
-            msg16->message = msg32->message;
-            msg16->wParam = msg32->wParam;
-            msg16->lParam = msg32->lParam;
-            msg16->time = msg32->time;
-            msg16->pt.x = msg32->pt.x;
-            msg16->pt.y = msg32->pt.y;
-            *plparam = MapLS( msg16 );
-            return 1;
-        }
-        return 0;
-
     case WM_ACTIVATEAPP:
         if (*plparam) *plparam = HTASK_16( (HANDLE)*plparam );
         return 0;
-    case WM_NEXTMENU:
-        {
-            MDINEXTMENU *next = (MDINEXTMENU *)*plparam;
-            *plparam = (LPARAM)next->hmenuIn;
-            return 1;
-        }
     case WM_PAINT:
         if (IsIconic( hwnd ) && GetClassLongPtrW( hwnd, GCLP_HICON ))
         {
@@ -1184,14 +1150,6 @@ static void WINPROC_UnmapMsg32ATo16( HWN
             HeapFree( GetProcessHeap(), 0, ptr );
         }
         break;
-    case WM_COPYDATA:
-        {
-            PCOPYDATASTRUCT16 pcds = MapSL( lParam16 );
-            UnMapLS( lParam16 );
-            UnMapLS( pcds->lpData );
-            HeapFree( GetProcessHeap(), 0, pcds );
-        }
-        break;
     case CB_GETDROPPEDCONTROLRECT:
     case LB_GETITEMRECT:
         {
@@ -1242,22 +1200,6 @@ static void WINPROC_UnmapMsg32ATo16( HWN
     case WM_NOTIFY:
         UnMapLS(lParam16);
         break;
-    case WM_GETDLGCODE:
-        if (lParam16)
-        {
-            LPMSG16 msg16 = MapSL(lParam16);
-            UnMapLS( lParam16 );
-            HeapFree( GetProcessHeap(), 0, msg16 );
-        }
-        break;
-    case WM_NEXTMENU:
-        {
-            MDINEXTMENU *next = (MDINEXTMENU *)lParam;
-            next->hmenuNext = HMENU_32( LOWORD(*result) );
-            next->hwndNext = WIN_Handle32( HIWORD(*result) );
-            *result = 0;
-        }
-        break;
     }
 }
 
@@ -2301,6 +2243,49 @@ LRESULT WINPROC_CallProc32ATo16( winproc
             mis32->itemHeight = mis.itemHeight;
         }
         break;
+    case WM_COPYDATA:
+        {
+            COPYDATASTRUCT *cds32 = (COPYDATASTRUCT *)lParam;
+            COPYDATASTRUCT16 cds;
+
+            cds.dwData = cds32->dwData;
+            cds.cbData = cds32->cbData;
+            cds.lpData = MapLS( cds32->lpData );
+            lParam = MapLS( &cds );
+            ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );
+            UnMapLS( lParam );
+            UnMapLS( cds.lpData );
+        }
+        break;
+    case WM_GETDLGCODE:
+        if (lParam)
+        {
+            MSG *msg32 = (MSG *)lParam;
+            MSG16 msg16;
+
+            msg16.hwnd    = HWND_16( msg32->hwnd );
+            msg16.message = msg32->message;
+            msg16.wParam  = msg32->wParam;
+            msg16.lParam  = msg32->lParam;
+            msg16.time    = msg32->time;
+            msg16.pt.x    = msg32->pt.x;
+            msg16.pt.y    = msg32->pt.y;
+            lParam = MapLS( &msg16 );
+            ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );
+            UnMapLS( lParam );
+        }
+        else
+            ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );
+        break;
+    case WM_NEXTMENU:
+        {
+            MDINEXTMENU *next = (MDINEXTMENU *)lParam;
+            ret = callback( HWND_16(hwnd), msg, wParam, (LPARAM)next->hmenuIn, result, arg );
+            next->hmenuNext = HMENU_32( LOWORD(*result) );
+            next->hwndNext  = WIN_Handle32( HIWORD(*result) );
+            *result = 0;
+        }
+        break;
     default:
         {
             UINT16 msg16;




More information about the wine-cvs mailing list