Correct the logic that decides whether a WM_SYSKEYUP/DOWN or a
WM_KEYUP/DOWN message is to be sent.
This commit is contained in:
parent
fa755119be
commit
dc969d4704
|
@ -55,6 +55,8 @@ static BOOL SwappedButtons;
|
||||||
|
|
||||||
BYTE InputKeyStateTable[256];
|
BYTE InputKeyStateTable[256];
|
||||||
BYTE AsyncKeyStateTable[256];
|
BYTE AsyncKeyStateTable[256];
|
||||||
|
BYTE TrackSysKey = 0; /* determine whether ALT key up will cause a WM_SYSKEYUP
|
||||||
|
or a WM_KEYUP message */
|
||||||
|
|
||||||
/* Storage for the USER-maintained mouse positions */
|
/* Storage for the USER-maintained mouse positions */
|
||||||
static DWORD PosX, PosY;
|
static DWORD PosX, PosY;
|
||||||
|
@ -152,14 +154,21 @@ static void queue_kbd_event( const KEYBDINPUT *ki, UINT injected_flags )
|
||||||
/* it's '1' under windows, when a dialog box appears
|
/* it's '1' under windows, when a dialog box appears
|
||||||
* and you press one of the underlined keys - DF*/
|
* and you press one of the underlined keys - DF*/
|
||||||
|
|
||||||
|
/* note that there is a test for all this */
|
||||||
if (ki->dwFlags & KEYEVENTF_KEYUP )
|
if (ki->dwFlags & KEYEVENTF_KEYUP )
|
||||||
{
|
{
|
||||||
BOOL sysKey = (InputKeyStateTable[VK_MENU] & 0x80) &&
|
message = WM_KEYUP;
|
||||||
!(InputKeyStateTable[VK_CONTROL] & 0x80);
|
if( (InputKeyStateTable[VK_MENU] & 0x80) && (
|
||||||
|
(ki->wVk == VK_MENU) || (ki->wVk == VK_CONTROL) ||
|
||||||
|
!(InputKeyStateTable[VK_CONTROL] & 0x80))) {
|
||||||
|
if( TrackSysKey == VK_MENU || /* <ALT>-down/<ALT>-up sequence */
|
||||||
|
(ki->wVk != VK_MENU)) /* <ALT>-down...<something else>-up */
|
||||||
|
message = WM_SYSKEYUP;
|
||||||
|
TrackSysKey = 0;
|
||||||
|
}
|
||||||
InputKeyStateTable[ki->wVk] &= ~0x80;
|
InputKeyStateTable[ki->wVk] &= ~0x80;
|
||||||
keylp.lp1.previous = 1;
|
keylp.lp1.previous = 1;
|
||||||
keylp.lp1.transition = 1;
|
keylp.lp1.transition = 1;
|
||||||
message = sysKey ? WM_SYSKEYUP : WM_KEYUP;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -169,8 +178,12 @@ static void queue_kbd_event( const KEYBDINPUT *ki, UINT injected_flags )
|
||||||
InputKeyStateTable[ki->wVk] |= 0x80;
|
InputKeyStateTable[ki->wVk] |= 0x80;
|
||||||
AsyncKeyStateTable[ki->wVk] |= 0x80;
|
AsyncKeyStateTable[ki->wVk] |= 0x80;
|
||||||
|
|
||||||
message = (InputKeyStateTable[VK_MENU] & 0x80) && !(InputKeyStateTable[VK_CONTROL] & 0x80)
|
message = WM_KEYDOWN;
|
||||||
? WM_SYSKEYDOWN : WM_KEYDOWN;
|
if( (InputKeyStateTable[VK_MENU] & 0x80) &&
|
||||||
|
!(InputKeyStateTable[VK_CONTROL] & 0x80)) {
|
||||||
|
message = WM_SYSKEYDOWN;
|
||||||
|
TrackSysKey = ki->wVk;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
keylp.lp1.context = (InputKeyStateTable[VK_MENU] & 0x80) != 0; /* 1 if alt */
|
keylp.lp1.context = (InputKeyStateTable[VK_MENU] & 0x80) != 0; /* 1 if alt */
|
||||||
|
|
Loading…
Reference in New Issue