From 349ba2667d6db7a5a089cb164dc74b7f85533202 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 14 Nov 2007 23:28:18 +0000 Subject: [PATCH] Release keyboard modifiers in KeybardThreadMain on KEY_BREAK. Fixes bug 2751. I think the whole handling of modifiers is still pretty hackish and could need some improvement. See issue #2751 for more details. svn path=/trunk/; revision=30449 --- .../subsystems/win32/win32k/ntuser/input.c | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/reactos/subsystems/win32/win32k/ntuser/input.c b/reactos/subsystems/win32/win32k/ntuser/input.c index cfec7fd627f..fca3b91a0a9 100644 --- a/reactos/subsystems/win32/win32k/ntuser/input.c +++ b/reactos/subsystems/win32/win32k/ntuser/input.c @@ -586,8 +586,8 @@ KeyboardThreadMain(PVOID StartContext) return; //(Status); } - /* Set LastInputTick */ - IntLastInputTick(TRUE); + /* Set LastInputTick */ + IntLastInputTick(TRUE); /* Update modifier state */ fsModifiers = IntKeyboardGetModifiers(&KeyInput); @@ -597,6 +597,22 @@ KeyboardThreadMain(PVOID StartContext) if (KeyInput.Flags & KEY_BREAK) { ModifierState &= ~fsModifiers; + if(fsModifiers == MOD_ALT) + { + if(KeyInput.Flags & KEY_E0) + { + gQueueKeyStateTable[VK_RMENU] = 0; + } + else + { + gQueueKeyStateTable[VK_LMENU] = 0; + } + if (gQueueKeyStateTable[VK_RMENU] == 0 && + gQueueKeyStateTable[VK_LMENU] == 0) + { + gQueueKeyStateTable[VK_MENU] = 0; + } + } } else { @@ -612,7 +628,7 @@ KeyboardThreadMain(PVOID StartContext) bLeftAlt = FALSE; if(fsModifiers == MOD_ALT) { - if(KeyInput.Flags & KEY_E1) + if(KeyInput.Flags & KEY_E0) { gQueueKeyStateTable[VK_RMENU] = 0x80; }