aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/hw/xwin/winkeybd.c
diff options
context:
space:
mode:
Diffstat (limited to 'xorg-server/hw/xwin/winkeybd.c')
-rw-r--r--xorg-server/hw/xwin/winkeybd.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/xorg-server/hw/xwin/winkeybd.c b/xorg-server/hw/xwin/winkeybd.c
index a70cdcd16..8e035956d 100644
--- a/xorg-server/hw/xwin/winkeybd.c
+++ b/xorg-server/hw/xwin/winkeybd.c
@@ -153,7 +153,7 @@ winKeybdProc(DeviceIntPtr pDeviceInt, int iState)
/* FIXME: Maybe we should use winGetKbdLeds () here? */
defaultKeyboardControl.leds = g_winInfo.keyboard.leds;
- winErrorFVerb(2, "Rules = \"%s\" Model = \"%s\" Layout = \"%s\""
+ winDebug("Rules = \"%s\" Model = \"%s\" Layout = \"%s\""
" Variant = \"%s\" Options = \"%s\"\n",
g_winInfo.xkb.rules ? g_winInfo.xkb.rules : "none",
g_winInfo.xkb.model ? g_winInfo.xkb.model : "none",
@@ -171,8 +171,7 @@ winKeybdProc(DeviceIntPtr pDeviceInt, int iState)
ctrl->repeat_interval = 1000 / g_winInfo.keyboard.rate;
}
else {
- winErrorFVerb(1,
- "winKeybdProc - Error initializing keyboard AutoRepeat\n");
+ winDebug ("winKeybdProc - Error initializing keyboard AutoRepeat\n");
}
break;
@@ -262,6 +261,21 @@ winRestoreModeKeyStates(void)
XkbStateFieldFromRec(&inputInfo.keyboard->key->xkbInfo->state);
winDebug("winRestoreModeKeyStates: state %d\n", internalKeyStates);
+ {
+ /* Make sure the message queue is empty, otherwise the GetKeyState will not always
+ return the correct state of the numlock key, capslock key, ...
+ This is mainly because this function is called from the WM_SETFOCUS handler.
+ From MSDN GetKeyState: The key status returned from this function changes as a thread
+ reads key messages from its message queue.*/
+ MSG msg;
+
+ /* Process all messages on our queue */
+ while (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
+ {
+ DispatchMessage (&msg);
+ }
+ }
+
/* Check if modifier keys are pressed, and if so, fake a press */
{
BOOL ctrl = (GetAsyncKeyState(VK_CONTROL) < 0);