[KBSWITCH]
authorKamil Hornicek <kamil.hornicek@reactos.org>
Sun, 5 Feb 2017 15:42:23 +0000 (15:42 +0000)
committerKamil Hornicek <kamil.hornicek@reactos.org>
Sun, 5 Feb 2017 15:42:23 +0000 (15:42 +0000)
- Don't fall through to the default label. CID 515166

[NTUSER]
- Fix a copypasta.

[USER32]
- Fix computing of HKL for layouts with Layout id.
- Don't call NtUserLoadKeyboardLayoutEx with bogus keyboard layout id.
- Ideally LoadKeyboardLayout should return the default system layout on failure - to be continued.

svn path=/trunk/; revision=73708

reactos/base/applications/kbswitch/kbswitch.c
reactos/win32ss/user/ntuser/kbdlayout.c
reactos/win32ss/user/user32/windows/input.c

index 60f6002..d06cd5f 100644 (file)
@@ -492,6 +492,8 @@ WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
 
                     if (!ShellExecuteEx(&shInputDll))
                         MessageBox(hwnd, _T("Can't start input.dll"), NULL, MB_OK | MB_ICONERROR);
+
+                    return 0;
                 }
 
                 default:
index bda95cc..e123438 100644 (file)
@@ -722,7 +722,7 @@ NtUserActivateKeyboardLayout(
     {
         /* Get previous keyboard layout starting with current */
         if (pti->KeyboardLayout)
-            pKl = pti->KeyboardLayout->pklNext;
+            pKl = pti->KeyboardLayout->pklPrev;
     }
     else
         pKl = UserHklToKbl(hKl);
index 582f00a..5372e0c 100644 (file)
@@ -281,7 +281,7 @@ LoadKeyboardLayoutW(LPCWSTR pwszKLID,
     HKEY hKey;
 
     /* LOWORD of dwhkl is Locale Identifier */
-    dwhkl = wcstol(pwszKLID, NULL, 16);
+    dwhkl = LOWORD(wcstoul(pwszKLID, NULL, 16));
 
     if (Flags & KLF_SUBSTITUTE_OK)
     {
@@ -305,7 +305,7 @@ LoadKeyboardLayoutW(LPCWSTR pwszKLID,
     StringCbCatW(wszRegKey, sizeof(wszRegKey), pwszKLID);
 
     /* Open layout registry key for read */
-       if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, wszRegKey, 0,
+    if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, wszRegKey, 0,
                       KEY_READ, &hKey) == ERROR_SUCCESS)
     {
         dwSize = sizeof(wszLayoutId);
@@ -324,10 +324,13 @@ LoadKeyboardLayoutW(LPCWSTR pwszKLID,
         RegCloseKey(hKey);
     }
     else
-           ERR("RegOpenKeyExW failed!\n");
+    {
+        ERR("Could not find keyboard layout %S.\n", pwszKLID);
+        return NULL;
+    }
 
     /* If Layout Id is not given HIWORD == LOWORD (for dwhkl) */
-       if (!HIWORD(dwhkl))
+    if (!HIWORD(dwhkl))
         dwhkl |= dwhkl << 16;
 
     ZeroMemory(&ustrKbdName, sizeof(ustrKbdName));