Module: wine Branch: master Commit: 109d15ab352fcec17479e3caf8e2aad586e57531 URL: https://gitlab.winehq.org/wine/wine/-/commit/109d15ab352fcec17479e3caf8e2aad...
Author: Zhiyi Zhang zzhang@codeweavers.com Date: Thu Aug 17 16:33:52 2023 +0800
user32: Map WM_CHAR wparam in ASCII to Unicode in IsDialogMessageA() for CJK locales.
Fix displaying Chinese characters as "??" in some applications with Chinese locale.
---
dlls/user32/message.c | 6 +++++- dlls/user32/tests/dialog.c | 4 ---- include/ntuser.h | 1 + 3 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/dlls/user32/message.c b/dlls/user32/message.c index acab4117cf2..4016c95539a 100644 --- a/dlls/user32/message.c +++ b/dlls/user32/message.c @@ -814,8 +814,12 @@ BOOL WINAPI DECLSPEC_HOTPATCH GetMessageA( MSG *msg, HWND hwnd, UINT first, UINT */ BOOL WINAPI IsDialogMessageA( HWND hwndDlg, LPMSG pmsg ) { + enum wm_char_mapping mapping; MSG msg = *pmsg; - map_wparam_AtoW( msg.message, &msg.wParam, WMCHAR_MAP_NOMAPPING ); + + mapping = GetSystemMetrics( SM_DBCSENABLED ) ? WMCHAR_MAP_ISDIALOGMESSAGE : WMCHAR_MAP_NOMAPPING; + if (!map_wparam_AtoW( msg.message, &msg.wParam, mapping )) + return TRUE; return IsDialogMessageW( hwndDlg, &msg ); }
diff --git a/dlls/user32/tests/dialog.c b/dlls/user32/tests/dialog.c index bac4524cecb..18a9685b230 100644 --- a/dlls/user32/tests/dialog.c +++ b/dlls/user32/tests/dialog.c @@ -575,10 +575,7 @@ static LRESULT CALLBACK test_IsDialogMessageA_proc(HWND hwnd, UINT msg, WPARAM w { case WM_CHAR: if (GetSystemMetrics(SM_DBCSENABLED)) - { - todo_wine ok(wparam == 0x5b57, "Got unexpected wparam %#Ix.\n", wparam); - } else ok(wparam == 0x3f, "Got unexpected wparam %#Ix.\n", wparam); wm_char_count++; @@ -879,7 +876,6 @@ static void test_IsDialogMessage(void) DispatchMessageA(&msg); } } - todo_wine_if(GetSystemMetrics(SM_DBCSENABLED)) ok(wm_char_count == 1, "Got unexpected WM_CHAR count %d.\n", wm_char_count); DestroyWindow(g_hwndMain); } diff --git a/include/ntuser.h b/include/ntuser.h index b873512dbd1..a8e8f4d6da0 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -135,6 +135,7 @@ enum wm_char_mapping WMCHAR_MAP_RECVMESSAGE, WMCHAR_MAP_DISPATCHMESSAGE, WMCHAR_MAP_CALLWINDOWPROC, + WMCHAR_MAP_ISDIALOGMESSAGE, WMCHAR_MAP_COUNT, WMCHAR_MAP_NOMAPPING = WMCHAR_MAP_COUNT };