Make sure keyboard state is up to date before processing
GetAsyncKeyState.
Aric Stewart
aric at codeweavers.com
Tue Feb 27 05:28:28 CST 2007
Make sure keyboard state is up to date before processing GetAsyncKeyState.
---
dlls/winex11.drv/keyboard.c | 11 +++++++++--
1 files changed, 9 insertions(+), 2 deletions(-)
-------------- next part --------------
diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c
index c025a38..df155db 100644
--- a/dlls/winex11.drv/keyboard.c
+++ b/dlls/winex11.drv/keyboard.c
@@ -94,6 +94,9 @@ static int kcControl, kcAlt, kcShift, kc
static char KEYBOARD_MapDeadKeysym(KeySym keysym);
+extern DWORD X11DRV_MsgWaitForMultipleObjectsEx( DWORD count,
+ const HANDLE *handles, DWORD timeout, DWORD mask, DWORD flags);
+
/* Keyboard translation tables */
#define MAIN_LEN 49
static const WORD main_key_scan_qwerty[MAIN_LEN] =
@@ -1835,8 +1838,12 @@ void X11DRV_InitKeyboard(void)
*/
SHORT X11DRV_GetAsyncKeyState(INT key)
{
- SHORT retval = ((key_state_table[key] & 0x40) ? 0x0001 : 0) |
- ((key_state_table[key] & 0x80) ? 0x8000 : 0);
+ SHORT retval;
+
+ X11DRV_MsgWaitForMultipleObjectsEx(0,0,0,QS_KEY,0);
+
+ retval = ((key_state_table[key] & 0x40) ? 0x0001 : 0) |
+ ((key_state_table[key] & 0x80) ? 0x8000 : 0);
key_state_table[key] &= ~0x40;
TRACE_(key)("(%x) -> %x\n", key, retval);
return retval;
More information about the wine-patches
mailing list