Przeglądaj źródła

LibWeb: Dispatch keydown events before invoking special handlers

We need to give pages the opportunity to intercept keydown events and
potentially stop them from propagating. Otherwise, for example, pressing
an arrow key in an <input> element is not observable via script.
Timothy Flynn 1 rok temu
rodzic
commit
d5d6f9bc92
1 zmienionych plików z 4 dodań i 4 usunięć
  1. 4 4
      Userland/Libraries/LibWeb/Page/EventHandler.cpp

+ 4 - 4
Userland/Libraries/LibWeb/Page/EventHandler.cpp

@@ -769,6 +769,10 @@ bool EventHandler::handle_keydown(KeyCode key, unsigned modifiers, u32 code_poin
         media_element.handle_keydown({}, key).release_value_but_fixme_should_propagate_errors();
     }
 
+    bool continue_ = fire_keyboard_event(UIEvents::EventNames::keydown, m_browsing_context, key, modifiers, code_point);
+    if (!continue_)
+        return false;
+
     if (m_browsing_context->cursor_position() && m_browsing_context->cursor_position()->node()->is_editable()) {
         auto& node = verify_cast<DOM::Text>(*m_browsing_context->cursor_position()->node());
 
@@ -824,10 +828,6 @@ bool EventHandler::handle_keydown(KeyCode key, unsigned modifiers, u32 code_poin
         return true;
     }
 
-    bool continue_ = fire_keyboard_event(UIEvents::EventNames::keydown, m_browsing_context, key, modifiers, code_point);
-    if (!continue_)
-        return false;
-
     // FIXME: Work out and implement the difference between this and keydown.
     return fire_keyboard_event(UIEvents::EventNames::keypress, m_browsing_context, key, modifiers, code_point);
 }