Alexandre Julliard : user: Added fast 16->32 mapping for WM_COPYDATA,
WM_GETDLGCODE and WM_NEXTMENU.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri May 26 13:54:56 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: 67a633b3e783c609a88fd00f312ee9a101f4c3cb
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=67a633b3e783c609a88fd00f312ee9a101f4c3cb
Author: Alexandre Julliard <julliard at winehq.org>
Date: Fri May 26 13:36:57 2006 +0200
user: Added fast 16->32 mapping for WM_COPYDATA, WM_GETDLGCODE and WM_NEXTMENU.
---
dlls/user/winproc.c | 92 +++++++++++++++++++++------------------------------
1 files changed, 37 insertions(+), 55 deletions(-)
diff --git a/dlls/user/winproc.c b/dlls/user/winproc.c
index 39e7306..3488e0a 100644
--- a/dlls/user/winproc.c
+++ b/dlls/user/winproc.c
@@ -760,16 +760,6 @@ static INT WINPROC_MapMsg16To32A( HWND h
*pwparam32 = (WPARAM)HDC_32(wParam16);
*plparam = (LPARAM)WIN_Handle32( LOWORD(*plparam) );
return 0;
- case WM_COPYDATA:
- {
- PCOPYDATASTRUCT16 pcds16 = MapSL(*plparam);
- PCOPYDATASTRUCT pcds = HeapAlloc ( GetProcessHeap(), 0, sizeof(*pcds));
- pcds->dwData = pcds16->dwData;
- pcds->cbData = pcds16->cbData;
- pcds->lpData = MapSL( pcds16->lpData);
- *plparam = (LPARAM)pcds;
- }
- return 1;
case WM_GETTEXT:
case WM_SETTEXT:
case WM_WININICHANGE:
@@ -817,24 +807,6 @@ static INT WINPROC_MapMsg16To32A( HWND h
*plparam = (LPARAM)WIN_Handle32( LOWORD(*plparam) );
}
return 0;
- case WM_GETDLGCODE:
- if (*plparam)
- {
- LPMSG16 msg16 = MapSL(*plparam);
- LPMSG msg32 = HeapAlloc( GetProcessHeap(), 0, sizeof(MSG) );
-
- if (!msg32) return -1;
- msg32->hwnd = WIN_Handle32( msg16->hwnd );
- msg32->message = msg16->message;
- msg32->wParam = msg16->wParam;
- msg32->lParam = msg16->lParam;
- msg32->time = msg16->time;
- msg32->pt.x = msg16->pt.x;
- msg32->pt.y = msg16->pt.y;
- *plparam = (LPARAM)msg32;
- return 1;
- }
- else return 0;
case WM_NOTIFY:
*plparam = (LPARAM)MapSL(*plparam);
return 0;
@@ -844,16 +816,6 @@ static INT WINPROC_MapMsg16To32A( HWND h
* message queues. */
if (*plparam) *plparam = HTASK_32( *plparam );
return 0;
- case WM_NEXTMENU:
- {
- MDINEXTMENU *next = HeapAlloc( GetProcessHeap(), 0, sizeof(*next) );
- if (!next) return -1;
- next->hmenuIn = (HMENU)*plparam;
- next->hmenuNext = 0;
- next->hwndNext = 0;
- *plparam = (LPARAM)next;
- return 1;
- }
case WM_PAINTCLIPBOARD:
case WM_SIZECLIPBOARD:
FIXME_(msg)("message %04x needs translation\n",msg16 );
@@ -933,27 +895,10 @@ static LRESULT WINPROC_UnmapMsg16To32A(
{
switch(msg)
{
- case WM_COPYDATA:
- HeapFree( GetProcessHeap(), 0, (LPVOID)lParam );
- break;
case WM_MDIGETACTIVE:
result = MAKELONG( LOWORD(result), (BOOL16)(*(BOOL *)lParam) );
HeapFree( GetProcessHeap(), 0, (BOOL *)lParam );
break;
- case WM_GETDLGCODE:
- if (lParam)
- {
- LPMSG msg32 = (LPMSG)lParam;
- HeapFree( GetProcessHeap(), 0, msg32 );
- }
- break;
- case WM_NEXTMENU:
- {
- MDINEXTMENU *next = (MDINEXTMENU *)lParam;
- result = MAKELONG( HMENU_16(next->hmenuNext), HWND_16(next->hwndNext) );
- HeapFree( GetProcessHeap(), 0, next );
- }
- break;
}
return result;
}
@@ -2402,6 +2347,43 @@ LRESULT WINPROC_CallProc16To32A( winproc
ret = callback( hwnd32, msg, wParam, (LPARAM)&dis, result, arg );
}
break;
+ case WM_COPYDATA:
+ {
+ COPYDATASTRUCT16 *cds16 = MapSL(lParam);
+ COPYDATASTRUCT cds;
+ cds.dwData = cds16->dwData;
+ cds.cbData = cds16->cbData;
+ cds.lpData = MapSL(cds16->lpData);
+ ret = callback( hwnd32, msg, wParam, (LPARAM)&cds, result, arg );
+ }
+ break;
+ case WM_GETDLGCODE:
+ if (lParam)
+ {
+ MSG16 *msg16 = MapSL(lParam);
+ MSG msg32;
+ msg32.hwnd = WIN_Handle32( msg16->hwnd );
+ msg32.message = msg16->message;
+ msg32.wParam = msg16->wParam;
+ msg32.lParam = msg16->lParam;
+ msg32.time = msg16->time;
+ msg32.pt.x = msg16->pt.x;
+ msg32.pt.y = msg16->pt.y;
+ ret = callback( hwnd32, msg, wParam, (LPARAM)&msg32, result, arg );
+ }
+ else
+ ret = callback( hwnd32, msg, wParam, lParam, result, arg );
+ break;
+ case WM_NEXTMENU:
+ {
+ MDINEXTMENU next;
+ next.hmenuIn = (HMENU)lParam;
+ next.hmenuNext = 0;
+ next.hwndNext = 0;
+ ret = callback( hwnd32, msg, wParam, (LPARAM)&next, result, arg );
+ *result = MAKELONG( HMENU_16(next.hmenuNext), HWND_16(next.hwndNext) );
+ }
+ break;
default:
{
UINT msg32;
More information about the wine-cvs
mailing list