From f6ba476d9103c93a944a404bfe82e663b7677c79 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Thu, 18 May 2006 12:28:07 +0200 Subject: [PATCH] user: Added fast W->A mapping for WM_IME_CHAR. --- dlls/user/winproc.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/dlls/user/winproc.c b/dlls/user/winproc.c index b0bddaa618f..6197f0f37ed 100644 --- a/dlls/user/winproc.c +++ b/dlls/user/winproc.c @@ -992,18 +992,6 @@ static INT WINPROC_MapMsg32WTo32A( HWND hwnd, UINT msg, WPARAM *pwparam, LPARAM { switch(msg) { - case WM_IME_CHAR: - { - WCHAR wch = LOWORD(*pwparam); - BYTE ch[2]; - - if (WideCharToMultiByte( CP_ACP, 0, &wch, 1, (LPSTR)ch, 2, NULL, NULL ) == 2) - *pwparam = MAKEWPARAM( (ch[0] << 8) | ch[1], HIWORD(*pwparam) ); - else - *pwparam = MAKEWPARAM( ch[0], HIWORD(*pwparam) ); - } - return 0; - case WM_PAINTCLIPBOARD: case WM_SIZECLIPBOARD: FIXME_(msg)("message %s (%04x) needs translation, please report\n",SPY_GetMsgName(msg, hwnd),msg ); @@ -3008,6 +2996,21 @@ static LRESULT WINPROC_CallProc32WTo32A( WNDPROC func, HWND hwnd, UINT msg, WPAR } break; + case WM_IME_CHAR: + { + WCHAR wch = LOWORD(wParam); + BYTE ch[2]; + DWORD len; + + RtlUnicodeToMultiByteN( (LPSTR)ch, 2, &len, &wch, sizeof(WCHAR) ); + if (len == 2) + wParam = MAKEWPARAM( (ch[0] << 8) | ch[1], HIWORD(wParam) ); + else + wParam = MAKEWPARAM( ch[0], HIWORD(wParam) ); + ret = WINPROC_CallWndProc( func, hwnd, msg, wParam, lParam ); + } + break; + default: if ((unmap = WINPROC_MapMsg32WTo32A( hwnd, msg, &wParam, &lParam )) == -1) { ERR_(msg)("Message translation failed. (msg=%s,wp=%08x,lp=%08lx)\n", -- 2.11.4.GIT