|
|
|
@ -624,10 +624,10 @@ static void processEvent(XEvent *event) |
|
|
|
|
|
|
|
|
|
if (!_glfw.x11.xkb.detectable) |
|
|
|
|
{ |
|
|
|
|
// XKB detectable key repeat is not supported on this server
|
|
|
|
|
// For key repeats we will get KeyRelease/KeyPress pairs with
|
|
|
|
|
// similar or identical time stamps. User selected key repeat
|
|
|
|
|
// filtering is handled in _glfwInputKey/_glfwInputChar.
|
|
|
|
|
// HACK: Key repeat events will arrive as KeyRelease/KeyPress
|
|
|
|
|
// pairs with similar or identical time stamps
|
|
|
|
|
// The key repeat logic in _glfwInputKey expectes only key
|
|
|
|
|
// presses to repeat, so detect and discard release events
|
|
|
|
|
if (XEventsQueued(_glfw.x11.display, QueuedAfterReading)) |
|
|
|
|
{ |
|
|
|
|
XEvent nextEvent; |
|
|
|
@ -637,15 +637,16 @@ static void processEvent(XEvent *event) |
|
|
|
|
nextEvent.xkey.window == event->xkey.window && |
|
|
|
|
nextEvent.xkey.keycode == event->xkey.keycode) |
|
|
|
|
{ |
|
|
|
|
// This last check is a hack to work around key repeats
|
|
|
|
|
// leaking through due to some sort of time drift
|
|
|
|
|
// Toshiyuki Takahashi can press a button 16 times per
|
|
|
|
|
// second so it's fairly safe to assume that no human is
|
|
|
|
|
// pressing the key 50 times per second (value is ms)
|
|
|
|
|
// HACK: Repeat events sometimes leak through due to
|
|
|
|
|
// some sort of time drift, so add an epsilon
|
|
|
|
|
// Toshiyuki Takahashi can press a button 16 times
|
|
|
|
|
// per second so it's fairly safe to assume that
|
|
|
|
|
// no human is pressing the key 50 times per
|
|
|
|
|
// second (value is ms)
|
|
|
|
|
if ((nextEvent.xkey.time - event->xkey.time) < 20) |
|
|
|
|
{ |
|
|
|
|
// This is a server-generated key repeat event
|
|
|
|
|
// Do not report anything for this event
|
|
|
|
|
// This is very likely a server-generated key repeat
|
|
|
|
|
// event, so ignore it
|
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|