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