From 46036894d49b01320e29846b29ce455ca0123aef Mon Sep 17 00:00:00 2001 From: David Skywalker Date: Sat, 9 Mar 2019 19:06:01 +0100 Subject: [PATCH] fix x11 auto-repeat event --- gfx/common/x11_common.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/gfx/common/x11_common.c b/gfx/common/x11_common.c index 3a7b0d9709..877c3a7341 100644 --- a/gfx/common/x11_common.c +++ b/gfx/common/x11_common.c @@ -570,8 +570,22 @@ bool x11_alive(void *data) case ButtonRelease: break; - case KeyPress: case KeyRelease: + /* When you receive a key release and the next event is a key press + of the same key combination, then it's auto-repeat and the + key wasn't acutally released. */ + if(XEventsQueued(g_x11_dpy, QueuedAfterReading)) + { + XEvent next_event; + XPeekEvent(g_x11_dpy, &next_event); + if (next_event.type == KeyPress && + next_event.xkey.time == event.xkey.time && + next_event.xkey.keycode == event.xkey.keycode) + { + break; // Key wasn’t actually released + } + } + case KeyPress: if (event.xkey.window == g_x11_win) x11_handle_key_event(keycode, &event, g_x11_xic, filter); break;