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

commit 398201dca4def5f6050686ce4f67e36fb85902be
Author:     Katayama Hirofumi MZ <katayama.hirofumi...@gmail.com>
AuthorDate: Fri Feb 16 21:31:13 2024 +0900
Commit:     GitHub <nore...@github.com>
CommitDate: Fri Feb 16 21:31:13 2024 +0900

    [NTUSER] Relax condition for IntImmProcessKey (#6500)
    
    * [NTUSER] Loose condition for IntImmProcessKey
    
    * key up
    
    * improve
    
    * improve 2
    
    * improve 3
---
 win32ss/user/ntuser/ime.c      |  8 ++++----
 win32ss/user/ntuser/msgqueue.c | 26 +++++++++++++-------------
 2 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/win32ss/user/ntuser/ime.c b/win32ss/user/ntuser/ime.c
index 5c21f2f9da9..f4648d7b6e9 100644
--- a/win32ss/user/ntuser/ime.c
+++ b/win32ss/user/ntuser/ime.c
@@ -565,15 +565,14 @@ DWORD FASTCALL UserBuildHimcList(PTHREADINFO pti, DWORD 
dwCount, HIMC *phList)
     return dwRealCount;
 }
 
-// Win: xxxImmProcessKey
 UINT FASTCALL
 IntImmProcessKey(PUSER_MESSAGE_QUEUE MessageQueue, PWND pWnd, UINT uMsg,
                  WPARAM wParam, LPARAM lParam)
 {
-    UINT uVirtualKey, ret = 0;
+    UINT uVirtualKey, ret;
     DWORD dwHotKeyId;
     PKL pKL;
-    PIMC pIMC = NULL;
+    PIMC pIMC;
     PIMEHOTKEY pImeHotKey;
     HKL hKL;
     HWND hWnd;
@@ -592,6 +591,7 @@ IntImmProcessKey(PUSER_MESSAGE_QUEUE MessageQueue, PWND 
pWnd, UINT uMsg,
             return 0;
     }
 
+    pIMC = NULL;
     hWnd = UserHMGetHandle(pWnd);
     pKL = pWnd->head.pti->KeyboardLayout;
     if (!pKL)
@@ -638,7 +638,7 @@ IntImmProcessKey(PUSER_MESSAGE_QUEUE MessageQueue, PWND 
pWnd, UINT uMsg,
         if (!pIMC)
             return 0;
 
-        if ((lParam & 0x80000000) &&
+        if ((lParam & (KF_UP << 16)) &&
             (pKL->piiex->ImeInfo.fdwProperty & IME_PROP_IGNORE_UPKEYS))
         {
             return 0;
diff --git a/win32ss/user/ntuser/msgqueue.c b/win32ss/user/ntuser/msgqueue.c
index bcec00196bc..c8ae61ad4eb 100644
--- a/win32ss/user/ntuser/msgqueue.c
+++ b/win32ss/user/ntuser/msgqueue.c
@@ -1769,17 +1769,16 @@ BOOL co_IntProcessKeyboardMessage(MSG* Msg, BOOL* 
RemoveMessages)
     USER_REFERENCE_ENTRY Ref;
     PWND pWnd;
     UINT ImmRet;
-    BOOL Ret = TRUE;
+    BOOL Ret = TRUE, bKeyUpDown = FALSE;
     PTHREADINFO pti = PsGetCurrentThreadWin32Thread();
+    const UINT uMsg = Msg->message;
 
-    if (Msg->message == VK_PACKET)
-    {
-       pti->wchInjected = HIWORD(Msg->wParam);
-    }
+    if (uMsg == VK_PACKET)
+        pti->wchInjected = HIWORD(Msg->wParam);
 
-    if (Msg->message == WM_KEYDOWN || Msg->message == WM_SYSKEYDOWN ||
-        Msg->message == WM_KEYUP || Msg->message == WM_SYSKEYUP)
+    if (uMsg == WM_KEYDOWN || uMsg == WM_SYSKEYDOWN || uMsg == WM_KEYUP || 
uMsg == WM_SYSKEYUP)
     {
+        bKeyUpDown = TRUE;
         switch (Msg->wParam)
         {
             case VK_LSHIFT: case VK_RSHIFT:
@@ -1797,7 +1796,7 @@ BOOL co_IntProcessKeyboardMessage(MSG* Msg, BOOL* 
RemoveMessages)
     pWnd = ValidateHwndNoErr(Msg->hwnd);
     if (pWnd) UserRefObjectCo(pWnd, &Ref);
 
-    Event.message = Msg->message;
+    Event.message = uMsg;
     Event.hwnd    = Msg->hwnd;
     Event.time    = Msg->time;
     Event.paramL  = (Msg->wParam & 0xFF) | (HIWORD(Msg->lParam) << 8);
@@ -1807,7 +1806,7 @@ BOOL co_IntProcessKeyboardMessage(MSG* Msg, BOOL* 
RemoveMessages)
 
     if (*RemoveMessages)
     {
-        if ((Msg->message == WM_KEYDOWN) &&
+        if ((uMsg == WM_KEYDOWN) &&
             (Msg->hwnd != IntGetDesktopWindow()))
         {
             /* Handle F1 key by sending out WM_HELP message */
@@ -1822,7 +1821,7 @@ BOOL co_IntProcessKeyboardMessage(MSG* Msg, BOOL* 
RemoveMessages)
                 co_IntSendMessage(Msg->hwnd, WM_APPCOMMAND, (WPARAM)Msg->hwnd, 
MAKELPARAM(0, (FAPPCOMMAND_KEY | (Msg->wParam - VK_BROWSER_BACK + 1))));
             }
         }
-        else if (Msg->message == WM_KEYUP)
+        else if (uMsg == WM_KEYUP)
         {
             /* Handle VK_APPS key by posting a WM_CONTEXTMENU message */
             if (Msg->wParam == VK_APPS && pti->MessageQueue->MenuOwner == NULL)
@@ -1831,7 +1830,7 @@ BOOL co_IntProcessKeyboardMessage(MSG* Msg, BOOL* 
RemoveMessages)
     }
 
     //// Key Down!
-    if ( *RemoveMessages && Msg->message == WM_SYSKEYDOWN )
+    if (*RemoveMessages && uMsg == WM_SYSKEYDOWN)
     {
         if ( HIWORD(Msg->lParam) & KF_ALTDOWN )
         {
@@ -1869,9 +1868,10 @@ BOOL co_IntProcessKeyboardMessage(MSG* Msg, BOOL* 
RemoveMessages)
         Ret = FALSE;
     }
 
-    if ( pWnd && Ret && *RemoveMessages && Msg->message == WM_KEYDOWN && 
!(pti->TIF_flags & TIF_DISABLEIME))
+    if (pWnd && Ret && *RemoveMessages && bKeyUpDown && !(pti->TIF_flags & 
TIF_DISABLEIME))
     {
-        if ( (ImmRet = IntImmProcessKey(pti->MessageQueue, pWnd, Msg->message, 
Msg->wParam, Msg->lParam)) )
+        ImmRet = IntImmProcessKey(pti->MessageQueue, pWnd, uMsg, Msg->wParam, 
Msg->lParam);
+        if (ImmRet)
         {
             if ( ImmRet & (IPHK_HOTKEY|IPHK_SKIPTHISKEY) )
             {

Reply via email to