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