https://git.reactos.org/?p=reactos.git;a=commitdiff;h=deb4f4e4e28d66cf9ba98793fb7821802fe5ac2d

commit deb4f4e4e28d66cf9ba98793fb7821802fe5ac2d
Author:     Katayama Hirofumi MZ <[email protected]>
AuthorDate: Mon Oct 10 15:50:13 2022 +0900
Commit:     Katayama Hirofumi MZ <[email protected]>
CommitDate: Mon Oct 10 15:50:13 2022 +0900

    [IMM32] Add ImmGetAppCompatFlags and epilogue of ImmProcessKey
    
    CORE-11700
---
 dll/win32/imm32/keymsg.c | 25 +++++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/dll/win32/imm32/keymsg.c b/dll/win32/imm32/keymsg.c
index 8222be3d781..a30f9b06f55 100644
--- a/dll/win32/imm32/keymsg.c
+++ b/dll/win32/imm32/keymsg.c
@@ -682,6 +682,20 @@ UINT WINAPI ImmGetVirtualKey(HWND hWnd)
     return ret;
 }
 
+DWORD WINAPI ImmGetAppCompatFlags(HIMC hIMC)
+{
+    PCLIENTIMC pClientIMC;
+    DWORD dwFlags;
+
+    pClientIMC = ImmLockClientImc(hIMC);
+    if (pClientIMC == NULL)
+        return 0;
+
+    dwFlags = pClientIMC->dwCompatFlags;
+    ImmUnlockClientImc(pClientIMC);
+    return dwFlags;
+}
+
 /***********************************************************************
  *             ImmProcessKey(IMM32.@)
  *       ( Undocumented, called from user32.dll )
@@ -754,9 +768,16 @@ ImmProcessKey(HWND hWnd, HKL hKL, UINT vKey, LPARAM 
lParam, DWORD dwHotKeyID)
         }
     }
 
-    if (ret & IPHK_PROCESSBYIME)
+    if ((ret & IPHK_PROCESSBYIME) && (ImmGetAppCompatFlags(hIMC) & 0x10000))
     {
-        FIXME("TODO: We have to do something here.\n");
+        LANGID wLangID = LANGIDFROMLCID(GetSystemDefaultLCID());
+        if (PRIMARYLANGID(wLangID) != LANG_KOREAN ||
+            (vKey != VK_PROCESSKEY && !(ret & IPHK_HOTKEY)))
+        {
+            ImmTranslateMessage(hWnd, WM_KEYDOWN, VK_PROCESSKEY, lParam);
+            ret &= ~IPHK_PROCESSBYIME;
+            ret |= IPHK_SKIPTHISKEY;
+        }
     }
 
     ImmReleaseContext(hWnd, hIMC);

Reply via email to