mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 17:03:02 +00:00
[KBSWITCH][NTUSER] Realize Shift+Alt language switch (#4622)
- Fix co_UserProcessHotKeys on modifiers-only hot-keys. - Add Alt+Shift hot-keys to kbswitch window. CORE-11737
This commit is contained in:
parent
372a445ad6
commit
b4f73f040f
2 changed files with 37 additions and 4 deletions
|
@ -4,6 +4,7 @@
|
||||||
* PURPOSE: Switching Keyboard Layouts
|
* PURPOSE: Switching Keyboard Layouts
|
||||||
* PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org)
|
* PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org)
|
||||||
* Colin Finck (mail@colinfinck.de)
|
* Colin Finck (mail@colinfinck.de)
|
||||||
|
* Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "kbswitch.h"
|
#include "kbswitch.h"
|
||||||
|
@ -13,7 +14,7 @@
|
||||||
PKBSWITCHSETHOOKS KbSwitchSetHooks = NULL;
|
PKBSWITCHSETHOOKS KbSwitchSetHooks = NULL;
|
||||||
PKBSWITCHDELETEHOOKS KbSwitchDeleteHooks = NULL;
|
PKBSWITCHDELETEHOOKS KbSwitchDeleteHooks = NULL;
|
||||||
UINT ShellHookMessage = 0;
|
UINT ShellHookMessage = 0;
|
||||||
|
DWORD dwAltShiftHotKeyId = 0, dwShiftAltHotKeyId = 0;
|
||||||
|
|
||||||
static BOOL
|
static BOOL
|
||||||
GetLayoutID(LPTSTR szLayoutNum, LPTSTR szLCID, SIZE_T LCIDLength);
|
GetLayoutID(LPTSTR szLayoutNum, LPTSTR szLCID, SIZE_T LCIDLength);
|
||||||
|
@ -414,6 +415,25 @@ UpdateLanguageDisplayCurrent(HWND hwnd, WPARAM wParam)
|
||||||
return UpdateLanguageDisplay(hwnd, GetKeyboardLayout(GetWindowThreadProcessId((HWND)wParam, 0)));
|
return UpdateLanguageDisplay(hwnd, GetKeyboardLayout(GetWindowThreadProcessId((HWND)wParam, 0)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID DoRegisterAltShiftHotKeys(HWND hwnd)
|
||||||
|
{
|
||||||
|
dwAltShiftHotKeyId = GlobalAddAtom(TEXT("ReactOS Alt+Shift"));
|
||||||
|
dwShiftAltHotKeyId = GlobalAddAtom(TEXT("ReactOS Shift+Alt"));
|
||||||
|
|
||||||
|
RegisterHotKey(hwnd, dwAltShiftHotKeyId, MOD_ALT | MOD_SHIFT, VK_SHIFT);
|
||||||
|
RegisterHotKey(hwnd, dwShiftAltHotKeyId, MOD_ALT | MOD_SHIFT, VK_MENU);
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID DoUnregisterAltShiftHotKeys(HWND hwnd)
|
||||||
|
{
|
||||||
|
UnregisterHotKey(hwnd, dwAltShiftHotKeyId);
|
||||||
|
UnregisterHotKey(hwnd, dwShiftAltHotKeyId);
|
||||||
|
|
||||||
|
GlobalDeleteAtom(dwAltShiftHotKeyId);
|
||||||
|
GlobalDeleteAtom(dwShiftAltHotKeyId);
|
||||||
|
dwAltShiftHotKeyId = dwShiftAltHotKeyId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
LRESULT CALLBACK
|
LRESULT CALLBACK
|
||||||
WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
|
WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
|
@ -431,6 +451,7 @@ WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
|
||||||
ActivateLayout(hwnd, ulCurrentLayoutNum);
|
ActivateLayout(hwnd, ulCurrentLayoutNum);
|
||||||
s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));
|
s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));
|
||||||
|
|
||||||
|
DoRegisterAltShiftHotKeys(hwnd);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -439,10 +460,19 @@ WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
|
||||||
return UpdateLanguageDisplay(hwnd, (HKL)lParam);
|
return UpdateLanguageDisplay(hwnd, (HKL)lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case WM_HOTKEY:
|
||||||
|
{
|
||||||
|
if (wParam != dwAltShiftHotKeyId && wParam != dwShiftAltHotKeyId)
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* FALL THROUGH */
|
||||||
|
}
|
||||||
|
|
||||||
case WM_LOAD_LAYOUT:
|
case WM_LOAD_LAYOUT:
|
||||||
{
|
{
|
||||||
ActivateLayout(hwnd, GetNextLayout());
|
ULONG uNextNum = GetNextLayout();
|
||||||
|
if (ulCurrentLayoutNum != uNextNum)
|
||||||
|
ActivateLayout(hwnd, uNextNum);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -526,6 +556,7 @@ WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
|
||||||
|
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
{
|
{
|
||||||
|
DoUnregisterAltShiftHotKeys(hwnd);
|
||||||
DeleteHooks();
|
DeleteHooks();
|
||||||
DestroyMenu(hRightPopupMenu);
|
DestroyMenu(hRightPopupMenu);
|
||||||
DelTrayIcon(hwnd);
|
DelTrayIcon(hwnd);
|
||||||
|
|
|
@ -211,7 +211,9 @@ co_UserProcessHotKeys(WORD wVk, BOOL bIsDown)
|
||||||
if (IsModifier)
|
if (IsModifier)
|
||||||
{
|
{
|
||||||
/* Modifier key up -- modifier-only keys are triggered here */
|
/* Modifier key up -- modifier-only keys are triggered here */
|
||||||
pHotKey = IsHotKey(gfsModOnlyCandidate, 0);
|
pHotKey = IsHotKey(gfsModOnlyCandidate, wVk);
|
||||||
|
if (!pHotKey)
|
||||||
|
pHotKey = IsHotKey(gfsModOnlyCandidate, 0);
|
||||||
gfsModOnlyCandidate = 0;
|
gfsModOnlyCandidate = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue