diff --git a/src/gui/jtk/Jtk_event.cc b/src/gui/jtk/Jtk_event.cc index 8d9fcdb..7f0f85b 100644 --- a/src/gui/jtk/Jtk_event.cc +++ b/src/gui/jtk/Jtk_event.cc @@ -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; }