From 82136b3ee4c4164d02c68bf66ae3d2961661621f Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Fri, 28 Jan 2022 19:21:21 +0900 Subject: [PATCH] [USER32] Implement ImeWnd_OnImeNotify (#4318) - Modify CMakeLists.txt to include - Implement WM_IME_NOTIFY message handling of the IME window. CORE-11700 --- win32ss/user/user32/CMakeLists.txt | 1 + win32ss/user/user32/misc/imm.c | 46 ++++++++++++++++++++++++++++-- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/win32ss/user/user32/CMakeLists.txt b/win32ss/user/user32/CMakeLists.txt index fb2655dcf6c..4cf9620a5c8 100644 --- a/win32ss/user/user32/CMakeLists.txt +++ b/win32ss/user/user32/CMakeLists.txt @@ -4,6 +4,7 @@ spec2def(user32.dll user32.spec ADD_IMPORTLIB) include_directories( ${REACTOS_SOURCE_DIR}/sdk/include/reactos/subsys include + ${REACTOS_SOURCE_DIR}/sdk/include/reactos/wine ${REACTOS_SOURCE_DIR}/win32ss/include) list(APPEND SOURCE diff --git a/win32ss/user/user32/misc/imm.c b/win32ss/user/user32/misc/imm.c index 7e70167b277..8a7a5eb7c14 100644 --- a/win32ss/user/user32/misc/imm.c +++ b/win32ss/user/user32/misc/imm.c @@ -11,6 +11,7 @@ #include #include +#include WINE_DEFAULT_DEBUG_CHANNEL(user32); @@ -209,6 +210,48 @@ static VOID User32UpdateImcOfImeUI(PIMEUI pimeui, HIMC hNewIMC) User32SetImeWindowOfImc(hNewIMC, hImeWnd); } +static LRESULT ImeWnd_OnImeNotify(PIMEUI pimeui, WPARAM wParam, LPARAM lParam) +{ + LRESULT ret = 0; + HIMC hIMC; + LPINPUTCONTEXT pIC; + HWND hwndUI, hwndIMC; + + switch (wParam) + { + case IMN_SETCONVERSIONMODE: + case IMN_SETOPENSTATUS: + hIMC = pimeui->hIMC; + pIC = IMM_FN(ImmLockIMC)(hIMC); + if (pIC) + { + hwndIMC = pimeui->hwndIMC; + if (IsWindow(hwndIMC)) + { + NtUserNotifyIMEStatus(hwndIMC, pIC->fOpen, pIC->fdwConversion); + } + else + { + // TODO: + } + + IMM_FN(ImmUnlockIMC)(hIMC); + } + /* FALL THROUGH */ + default: + ret = User32SendImeUIMessage(pimeui, WM_IME_NOTIFY, wParam, lParam, TRUE); + break; + + case IMN_PRIVATE: + hwndUI = pimeui->hwndUI; + if (IsWindow(hwndUI)) + ret = SendMessageW(hwndUI, WM_IME_NOTIFY, wParam, lParam); + break; + } + + return ret; +} + static HWND User32CreateImeUIWindow(PIMEUI pimeui, HKL hKL) { IMEINFOEX ImeInfoEx; @@ -428,8 +471,7 @@ LRESULT WINAPI ImeWndProc_common( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPa break; case WM_IME_NOTIFY: - // TODO: - break; + return ImeWnd_OnImeNotify(pimeui, wParam, lParam); case WM_IME_REQUEST: break;