diff options
Diffstat (limited to 'xorg-server/hw/xwin/winkeybd.c')
-rw-r--r-- | xorg-server/hw/xwin/winkeybd.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/xorg-server/hw/xwin/winkeybd.c b/xorg-server/hw/xwin/winkeybd.c index 27c114c99..1d242a2ba 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); |