From 6fcf2b2bd87e16c9cfc55f3c1293797c24124e85 Mon Sep 17 00:00:00 2001 From: Andreas Haas Date: Thu, 22 Sep 2016 12:24:44 +0200 Subject: [PATCH] x11: Fix event.is_action() for release of modifier keys The bug was that the release events for these also had the modifier state set, so the event comparison failed. Fixes #5901 --- platform/x11/os_x11.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp index 9a2d610e78e..5f1ab5b4aa3 100644 --- a/platform/x11/os_x11.cpp +++ b/platform/x11/os_x11.cpp @@ -1176,6 +1176,19 @@ void OS_X11::handle_key_event(XKeyEvent *p_event, bool p_echo) { event.key.mod.shift=true; } + //don't set mod state if modifier keys are released by themselves + //else event.is_action() will not work correctly here + if (!event.key.pressed) { + if (event.key.scancode == KEY_SHIFT) + event.key.mod.shift = false; + else if (event.key.scancode == KEY_CONTROL) + event.key.mod.control = false; + else if (event.key.scancode == KEY_ALT) + event.key.mod.alt = false; + else if (event.key.scancode == KEY_META) + event.key.mod.meta = false; + } + //printf("key: %x\n",event.key.scancode); input->parse_input_event( event); }