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