mirror of
https://github.com/reactos/wine.git
synced 2024-11-25 04:39:45 +00:00
user: Get rid of the WINPROC_Map/UnmapMsg32ATo32W functions.
This commit is contained in:
parent
3d92de45c4
commit
fcce047f61
@ -500,31 +500,6 @@ static LRESULT call_dialog_proc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp, LRES
|
|||||||
return ret;
|
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 */
|
/* call a 16-bit window procedure */
|
||||||
static LRESULT call_window_proc16( HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam,
|
static LRESULT call_window_proc16( HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam,
|
||||||
LRESULT *result, void *arg )
|
LRESULT *result, void *arg )
|
||||||
@ -728,120 +703,6 @@ inline static BOOL WINPROC_TestLBForStr( HWND hwnd, UINT msg )
|
|||||||
return (!(style & (LBS_OWNERDRAWFIXED | LBS_OWNERDRAWVARIABLE)) || (style & LBS_HASSTRINGS));
|
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)
|
static UINT convert_handle_16_to_32(HANDLE16 src, unsigned int flags)
|
||||||
@ -1340,17 +1201,6 @@ static INT WINPROC_MapMsg16To32W( HWND hwnd, UINT16 msg16, WPARAM16 wParam16, UI
|
|||||||
*pwparam32 = (WPARAM)wParam16;
|
*pwparam32 = (WPARAM)wParam16;
|
||||||
switch(msg16)
|
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_NCCREATE:
|
||||||
case WM_CREATE:
|
case WM_CREATE:
|
||||||
{
|
{
|
||||||
@ -1452,17 +1302,10 @@ static INT WINPROC_MapMsg16To32W( HWND hwnd, UINT16 msg16, WPARAM16 wParam16, UI
|
|||||||
* Unmap a message that was mapped from 16- to 32-bit Unicode.
|
* Unmap a message that was mapped from 16- to 32-bit Unicode.
|
||||||
*/
|
*/
|
||||||
static LRESULT WINPROC_UnmapMsg16To32W( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam,
|
static LRESULT WINPROC_UnmapMsg16To32W( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam,
|
||||||
LRESULT result, WNDPROC dispatch )
|
LRESULT result )
|
||||||
{
|
{
|
||||||
switch(msg)
|
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_NCCREATE:
|
||||||
case WM_CREATE:
|
case WM_CREATE:
|
||||||
{
|
{
|
||||||
@ -2996,12 +2839,32 @@ static LRESULT WINPROC_CallProc16To32W( winproc_callback_t callback, HWND16 hwnd
|
|||||||
TRACE_(msg)("(hwnd=%p,msg=%s,wp=%08x,lp=%08lx)\n",
|
TRACE_(msg)("(hwnd=%p,msg=%s,wp=%08x,lp=%08lx)\n",
|
||||||
hwnd32, SPY_GetMsgName(msg, hwnd32), wParam, lParam);
|
hwnd32, SPY_GetMsgName(msg, hwnd32), wParam, lParam);
|
||||||
|
|
||||||
if (WINPROC_MapMsg16To32W( hwnd32, msg, wParam, &msg32, &wParam32, &lParam ) == -1)
|
switch(msg)
|
||||||
return 0;
|
{
|
||||||
|
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 );
|
case WM_GETTEXTLENGTH:
|
||||||
*result = WINPROC_UnmapMsg16To32W( hwnd32, msg32, wParam32, lParam, *result,
|
case CB_GETLBTEXTLEN:
|
||||||
(callback == call_window_proc) ? arg : NULL /*FIXME: hack*/ );
|
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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user