From 58a03a103d0de6e2d8fa87fb8952f69fd239a20c Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Sat, 20 May 2006 16:32:45 +0200 Subject: [PATCH] user: Use winproc callbacks instead of message map/unmap in SendMessage16. --- dlls/user/msg16.c | 46 ++++++++++++++++++++++----------------------- dlls/user/winproc.c | 4 ++-- dlls/user/winproc.h | 2 ++ 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/dlls/user/msg16.c b/dlls/user/msg16.c index e61fef3c777..e8b9d4c9ecb 100644 --- a/dlls/user/msg16.c +++ b/dlls/user/msg16.c @@ -30,14 +30,33 @@ WINE_DEFAULT_DEBUG_CHANNEL(msg); DWORD USER16_AlertableWait = 0; +static LRESULT cwp_hook_callback( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp, + LRESULT *result, void *arg ) +{ + CWPSTRUCT cwp; + + cwp.hwnd = hwnd; + cwp.message = msg; + cwp.wParam = wp; + cwp.lParam = lp; + *result = 0; + return HOOK_CallHooks( WH_CALLWNDPROC, HC_ACTION, 1, (LPARAM)&cwp, FALSE ); +} + +static LRESULT send_message_callback( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp, + LRESULT *result, void *arg ) +{ + *result = SendMessageA( hwnd, msg, wp, lp ); + return *result; +} + + /*********************************************************************** * SendMessage (USER.111) */ LRESULT WINAPI SendMessage16( HWND16 hwnd16, UINT16 msg, WPARAM16 wparam, LPARAM lparam ) { LRESULT result; - UINT msg32; - WPARAM wparam32; HWND hwnd = WIN_Handle32( hwnd16 ); if (hwnd != HWND_BROADCAST && WIN_IsCurrentThread(hwnd)) @@ -47,22 +66,7 @@ LRESULT WINAPI SendMessage16( HWND16 hwnd16, UINT16 msg, WPARAM16 wparam, LPARAM /* first the WH_CALLWNDPROC hook */ if (HOOK_IsHooked( WH_CALLWNDPROC )) - { - LPARAM lparam32 = lparam; - - if (WINPROC_MapMsg16To32A( hwnd, msg, wparam, &msg32, &wparam32, &lparam32 ) != -1) - { - CWPSTRUCT cwp; - - cwp.hwnd = hwnd; - cwp.message = msg32; - cwp.wParam = wparam32; - cwp.lParam = lparam32; - HOOK_CallHooks( WH_CALLWNDPROC, HC_ACTION, 1, (LPARAM)&cwp, FALSE ); - WINPROC_UnmapMsg16To32A( hwnd, msg32, wparam32, lparam32, 0 ); - /* FIXME: should reflect changes back into the message we send */ - } - } + WINPROC_CallProc16To32A( cwp_hook_callback, hwnd16, msg, wparam, lparam, &result, NULL ); if (!(winproc = (WNDPROC16)GetWindowLong16( hwnd16, GWLP_WNDPROC ))) return 0; @@ -72,11 +76,7 @@ LRESULT WINAPI SendMessage16( HWND16 hwnd16, UINT16 msg, WPARAM16 wparam, LPARAM } else /* map to 32-bit unicode for inter-thread/process message */ { - if (WINPROC_MapMsg16To32W( hwnd, msg, wparam, &msg32, &wparam32, &lparam ) == -1) - return 0; - result = WINPROC_UnmapMsg16To32W( hwnd, msg32, wparam32, lparam, - SendMessageW( hwnd, msg32, wparam32, lparam ), - NULL ); + WINPROC_CallProc16To32A( send_message_callback, hwnd16, msg, wparam, lparam, &result, NULL ); } return result; } diff --git a/dlls/user/winproc.c b/dlls/user/winproc.c index c2784510c0b..37f9c792312 100644 --- a/dlls/user/winproc.c +++ b/dlls/user/winproc.c @@ -2902,8 +2902,8 @@ static LRESULT WINPROC_CallProcWtoA( winproc_callback_t callback, HWND hwnd, UIN /********************************************************************** * WINPROC_CallProc16To32A */ -static LRESULT WINPROC_CallProc16To32A( winproc_callback_t callback, HWND16 hwnd, UINT16 msg, - WPARAM16 wParam, LPARAM lParam, LRESULT *result, void *arg ) +LRESULT WINPROC_CallProc16To32A( winproc_callback_t callback, HWND16 hwnd, UINT16 msg, + WPARAM16 wParam, LPARAM lParam, LRESULT *result, void *arg ) { LRESULT ret; UINT msg32; diff --git a/dlls/user/winproc.h b/dlls/user/winproc.h index e80c295c420..4db36d55dad 100644 --- a/dlls/user/winproc.h +++ b/dlls/user/winproc.h @@ -57,6 +57,8 @@ extern BOOL WINPROC_IsUnicode( WNDPROC proc, BOOL def_val ); extern LRESULT WINPROC_CallProcAtoW( winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *result, void *arg ); +extern LRESULT WINPROC_CallProc16To32A( winproc_callback_t callback, HWND16 hwnd, UINT16 msg, + WPARAM16 wParam, LPARAM lParam, LRESULT *result, void *arg ); extern INT WINPROC_MapMsg16To32A( HWND hwnd, UINT16 msg16, WPARAM16 wParam16, UINT *pmsg32, WPARAM *pwparam32,