Browse Source

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 năm trước cách đây
mục cha
commit
d5d6f9bc92

+ 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();
         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()) {
     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());
         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;
         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.
     // 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);
     return fire_keyboard_event(UIEvents::EventNames::keypress, m_browsing_context, key, modifiers, code_point);
 }
 }