diff --git a/ui/kbd-state.c b/ui/kbd-state.c index ac14add70e..f3ab2d7a66 100644 --- a/ui/kbd-state.c +++ b/ui/kbd-state.c @@ -42,14 +42,18 @@ void qkbd_state_key_event(QKbdState *kbd, QKeyCode qcode, bool down) { bool state = test_bit(qcode, kbd->keys); - if (state == down) { + if (down == false /* got key-up event */ && + state == false /* key is not pressed */) { /* - * Filter out events which don't change the keyboard state. + * Filter out suspicious key-up events. * - * Most notably this allows to simply send along all key-up - * events, and this function will filter out everything where - * the corresponding key-down event wasn't send to the guest, - * for example due to being a host hotkey. + * This allows simply sending along all key-up events, and + * this function will filter out everything where the + * corresponding key-down event wasn't sent to the guest, for + * example due to being a host hotkey. + * + * Note that key-down events on already pressed keys are *not* + * suspicious, those are keyboard autorepeat events. */ return; }