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:
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user