Module: wine Branch: master Commit: 8d5d413697e92042c64a6a77894b88eed063a8b7 URL: https://gitlab.winehq.org/wine/wine/-/commit/8d5d413697e92042c64a6a77894b88e...
Author: Zhiyi Zhang zzhang@codeweavers.com Date: Wed Sep 27 15:57:53 2023 +0800
user32: Enable IsDialogMessageA() ASCII to Unicode mapping only when the user default lang ID is CJK.
Using GetSystemMetrics(SM_DBCSENABLED) may incorrectly enable ASCII to Unicode mapping in mixed locale environments. For example, when UserDefaultLCID is French(040c) but SystemDefaultLCID is Japanese(0411).
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55655
---
dlls/user32/message.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/dlls/user32/message.c b/dlls/user32/message.c index 4016c95539a..86c6593e192 100644 --- a/dlls/user32/message.c +++ b/dlls/user32/message.c @@ -807,6 +807,14 @@ BOOL WINAPI DECLSPEC_HOTPATCH GetMessageA( MSG *msg, HWND hwnd, UINT first, UINT return (msg->message != WM_QUIT); }
+static BOOL is_cjk(void) +{ + int lang_id = PRIMARYLANGID(GetUserDefaultLangID()); + + if (lang_id == LANG_CHINESE || lang_id == LANG_JAPANESE || lang_id == LANG_KOREAN) + return TRUE; + return FALSE; +}
/*********************************************************************** * IsDialogMessageA (USER32.@) @@ -817,7 +825,7 @@ BOOL WINAPI IsDialogMessageA( HWND hwndDlg, LPMSG pmsg ) enum wm_char_mapping mapping; MSG msg = *pmsg;
- mapping = GetSystemMetrics( SM_DBCSENABLED ) ? WMCHAR_MAP_ISDIALOGMESSAGE : WMCHAR_MAP_NOMAPPING; + mapping = is_cjk() ? WMCHAR_MAP_ISDIALOGMESSAGE : WMCHAR_MAP_NOMAPPING; if (!map_wparam_AtoW( msg.message, &msg.wParam, mapping )) return TRUE; return IsDialogMessageW( hwndDlg, &msg );