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

commit 2d31b06c67901db77b34a9207b8b6313d8720279
Author:     Katayama Hirofumi MZ <[email protected]>
AuthorDate: Fri May 5 17:00:05 2023 +0900
Commit:     GitHub <[email protected]>
CommitDate: Fri May 5 17:00:05 2023 +0900

    [NTUSER] Remember old KL for Chinese IMEs (#5266)
    
    The Chinese user uses Ctrl+Space key combination to switch between the IME 
keyboard and the non-IME keyboard. To enable Ctrl+Space, the system has to 
remember the previous keyboard layout. In IntImmActivateLayout function, 
remember the previous keyboard layout (hklPrev) to switch back for Chinese 
IMEs. CORE-18950
---
 win32ss/user/ntuser/kbdlayout.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/win32ss/user/ntuser/kbdlayout.c b/win32ss/user/ntuser/kbdlayout.c
index f3971cf5c67..ef66cad9ddc 100644
--- a/win32ss/user/ntuser/kbdlayout.c
+++ b/win32ss/user/ntuser/kbdlayout.c
@@ -650,14 +650,21 @@ IntImmActivateLayout(
         co_IntSendMessage(hImeWnd, WM_IME_SYSTEM, IMS_ACTIVATELAYOUT, 
(LPARAM)pKL->hkl);
         UserDerefObjectCo(pImeWnd);
     }
-    else if (pti->spDefaultImc)
+    else
     {
-        /* IME Activation is needed */
-        pti->pClientInfo->CI_flags |= CI_IMMACTIVATE;
+        /* Remember old keyboard layout to switch back for Chinese IMEs */
+        pti->hklPrev = pti->KeyboardLayout->hkl;
+
+        if (pti->spDefaultImc)
+        {
+            /* IME Activation is needed */
+            pti->pClientInfo->CI_flags |= CI_IMMACTIVATE;
+        }
     }
 
     UserAssignmentLock((PVOID*)&(pti->KeyboardLayout), pKL);
     pti->pClientInfo->hKL = pKL->hkl;
+    pti->pClientInfo->CodePage = pKL->CodePage;
 }
 
 static VOID co_IntSetKeyboardLayoutForProcess(PPROCESSINFO ppi, PKL pKL)

Reply via email to