Always process all KeyPress events before all KeyRelease events. KeyPress are more timing-sensitive, and this makes race conditions causing sticky keys a little less likely.

This commit is contained in:
Ben Anderson
2005-03-17 04:40:14 +00:00
parent d0cd9f3bf6
commit 800bbfbb70
@@ -133,17 +133,25 @@ void InputHandler_X11::Update(float fDeltaTime)
if (X11Helper::Win) if (X11Helper::Win)
while(XCheckTypedWindowEvent(X11Helper::Dpy, while(XCheckTypedWindowEvent(X11Helper::Dpy,
X11Helper::Win, KeyPress, &event) X11Helper::Win, KeyPress, &event) )
|| XCheckTypedWindowEvent(X11Helper::Dpy,
X11Helper::Win, KeyRelease, &event) )
{ {
LOG->Trace("key: sym %i, key %i, state %i", LOG->Trace("key: sym %i, key %i, state true",
XLookupKeysym(&event.xkey,0), XSymToKeySym(XLookupKeysym(&event.xkey,0)), XLookupKeysym(&event.xkey,0), XSymToKeySym(XLookupKeysym(&event.xkey,0)));
event.type == KeyPress );
DeviceInput di( DEVICE_KEYBOARD, DeviceInput di( DEVICE_KEYBOARD,
XSymToKeySym(XLookupKeysym(&event.xkey,0)) ); XSymToKeySym(XLookupKeysym(&event.xkey,0)) );
ButtonPressed(di, event.type == KeyPress); ButtonPressed(di, true);
}
while(XCheckTypedWindowEvent(X11Helper::Dpy,
X11Helper::Win, KeyRelease, &event) )
{
LOG->Trace("key: sym %i, key %i, state false",
XLookupKeysym(&event.xkey,0), XSymToKeySym(XLookupKeysym(&event.xkey,0)));
DeviceInput di( DEVICE_KEYBOARD,
XSymToKeySym(XLookupKeysym(&event.xkey,0)) );
ButtonPressed(di, false);
} }
InputHandler::UpdateTimer(); InputHandler::UpdateTimer();