浏览代码

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 年之前
父节点
当前提交
d5d6f9bc92
共有 1 个文件被更改,包括 4 次插入4 次删除
  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);
 }