From 77850b35402600e093639dc9f30de501dfc3241c Mon Sep 17 00:00:00 2001 From: Jelle Raaijmakers Date: Tue, 22 Oct 2024 15:35:00 +0200 Subject: [PATCH] LibWeb/EventHandler: Ignore repeated keyup events Platforms such as X11 will typically send repeated keyRelease/keyup events as a result of auto-repeating: * KeyPress (initial) * KeyRelease (repeat) * KeyPress (repeat) * KeyRelease (repeat) * ad infinitum Make our EventHandler more spec-compliant by ignoring all repeated keyup events. This fixes long-pressing the arrow keys on https://playbiolab.com/. --- Userland/Libraries/LibWeb/Page/EventHandler.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibWeb/Page/EventHandler.cpp b/Userland/Libraries/LibWeb/Page/EventHandler.cpp index dd7baf42215..59bbfcadf3d 100644 --- a/Userland/Libraries/LibWeb/Page/EventHandler.cpp +++ b/Userland/Libraries/LibWeb/Page/EventHandler.cpp @@ -1171,8 +1171,13 @@ EventResult EventHandler::handle_keydown(UIEvents::KeyCode key, u32 modifiers, u return EventResult::Accepted; } -EventResult EventHandler::handle_keyup(UIEvents::KeyCode key, u32 modifiers, u32 code_point, [[maybe_unused]] bool repeat) +EventResult EventHandler::handle_keyup(UIEvents::KeyCode key, u32 modifiers, u32 code_point, bool repeat) { + // Keyup events as a result of auto-repeat are not fired. + // See: https://w3c.github.io/uievents/#events-keyboard-event-order + if (repeat) + return EventResult::Dropped; + return fire_keyboard_event(UIEvents::EventNames::keyup, m_navigable, key, modifiers, code_point, false); }