1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 14:28:12 +00:00

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.
This commit is contained in:
Timothy Flynn 2023-11-30 15:42:57 -05:00 committed by Andreas Kling
parent 27d40bafc9
commit d5d6f9bc92

View file

@ -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);
}