https://git.reactos.org/?p=reactos.git;a=commitdiff;h=39fe905efaa650bf7d15a…
commit 39fe905efaa650bf7d15a75cd77b3daeb5581a16
Author: Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com>
AuthorDate: Thu Oct 20 02:57:47 2022 +0900
Commit: GitHub <noreply(a)github.com>
CommitDate: Thu Oct 20 02:57:47 2022 +0900
[NTUSER] Improve IntSetImeHotKey (#4789)
- Use the LOWORD value for VK_PACKET detection.
- IntGetImeHotKeyByKeyAndLang accepts the neutral language identifier (that is zero).
CORE-11700
---
win32ss/user/ntuser/ime.c | 24 ++++++++++++++----------
1 file changed, 14 insertions(+), 10 deletions(-)
diff --git a/win32ss/user/ntuser/ime.c b/win32ss/user/ntuser/ime.c
index 7f252e36af9..62e71747f50 100644
--- a/win32ss/user/ntuser/ime.c
+++ b/win32ss/user/ntuser/ime.c
@@ -183,7 +183,7 @@ IntGetImeHotKeyByKeyAndLang(PIMEHOTKEY pList, UINT uModKeys, UINT
uLeftRight,
continue;
LangID = IntGetImeHotKeyLangId(pNode->dwHotKeyId);
- if (LangID != TargetLangId)
+ if (LangID != TargetLangId && LangID != 0)
continue;
uModifiers = pNode->uModifiers;
@@ -358,32 +358,33 @@ IntSetImeHotKey(DWORD dwHotKeyId, UINT uModifiers, UINT uVirtualKey,
HKL hKL, DW
switch (dwAction)
{
case SETIMEHOTKEY_DELETE:
- pNode = IntGetImeHotKeyById(gpImeHotKeyList, dwHotKeyId);
+ pNode = IntGetImeHotKeyById(gpImeHotKeyList, dwHotKeyId); /* Find hotkey by
ID */
if (!pNode)
{
ERR("dwHotKeyId: 0x%lX\n", dwHotKeyId);
return FALSE;
}
- IntDeleteImeHotKey(&gpImeHotKeyList, pNode);
+ IntDeleteImeHotKey(&gpImeHotKeyList, pNode); /* Delete it */
return TRUE;
case SETIMEHOTKEY_ADD:
- if (uVirtualKey == VK_PACKET)
+ if (LOWORD(uVirtualKey) == VK_PACKET) /* In case of VK_PACKET */
return FALSE;
LangId = IntGetImeHotKeyLangId(dwHotKeyId);
if (LangId == LANGID_KOREAN)
- return FALSE;
+ return FALSE; /* Korean can't add IME hotkeys */
+ /* Find hotkey by key and language */
pNode = IntGetImeHotKeyByKeyAndLang(gpImeHotKeyList,
(uModifiers & MOD_KEYS),
(uModifiers & MOD_LEFT_RIGHT),
uVirtualKey, LangId);
- if (!pNode)
- pNode = IntGetImeHotKeyById(gpImeHotKeyList, dwHotKeyId);
+ if (pNode == NULL) /* If not found */
+ pNode = IntGetImeHotKeyById(gpImeHotKeyList, dwHotKeyId); /* Find by ID
*/
- if (pNode)
+ if (pNode) /* Already exists */
{
pNode->uModifiers = uModifiers;
pNode->uVirtualKey = uVirtualKey;
@@ -391,23 +392,26 @@ IntSetImeHotKey(DWORD dwHotKeyId, UINT uModifiers, UINT uVirtualKey,
HKL hKL, DW
return TRUE;
}
+ /* Allocate new hotkey */
pNode = ExAllocatePoolWithTag(PagedPool, sizeof(IMEHOTKEY),
USERTAG_IMEHOTKEY);
if (!pNode)
return FALSE;
+ /* Populate */
pNode->pNext = NULL;
pNode->dwHotKeyId = dwHotKeyId;
pNode->uModifiers = uModifiers;
pNode->uVirtualKey = uVirtualKey;
pNode->hKL = hKL;
- IntAddImeHotKey(&gpImeHotKeyList, pNode);
+ IntAddImeHotKey(&gpImeHotKeyList, pNode); /* Add it */
return TRUE;
case SETIMEHOTKEY_INITIALIZE:
- IntFreeImeHotKeys();
+ IntFreeImeHotKeys(); /* Delete all the IME hotkeys */
return TRUE;
default:
+ ERR("0x%lX\n", dwAction);
return FALSE;
}
}