Avoid backlogging duplicate keypress events.

This commit is contained in:
Josh Holtrop 2017-10-14 11:31:29 -04:00
parent 34dc956272
commit 3a594b5355

View File

@ -223,6 +223,15 @@ static bool IsRepeatKey(Display * display, XEvent * event)
}
#endif
static Bool MatchKeyPress(Display * display, XEvent * event, XPointer arg)
{
XEvent * match_event = (XEvent *)arg;
return (event->type == match_event->type) &&
(event->xkey.window == match_event->xkey.window) &&
(event->xkey.state == match_event->xkey.state) &&
(event->xkey.keycode == match_event->xkey.keycode);
}
/**
* Process an X key press event.
*
@ -238,6 +247,12 @@ static bool ProcessXKeyPressEvent(XEvent * x_event, Jtk_Event * event)
event->key.repeat = false;
event->key.key = XKeyToJtkKey(x_keycode, x_event->xkey.state);
event->key.x_keycode = x_keycode;
/* Remove any following keypress events for the same keycode from the X
* queue. */
XEvent remove_event;
while (XCheckIfEvent(g_display, &remove_event, MatchKeyPress, (XPointer)x_event) == True)
{
}
return true;
}