LibWebView+WebContent: Propagate unconsumed input events out of OOPWV

Since 9e2bd9d261a8c0c1b5eeafde95ca310efc667204, the OOPWV has been
consuming all mouse and keyboard events, preventing action shortcuts
from working. So let's fix that. :^)

OOPWV now queues up input events, sending them one at a time to the
WebContent process and waiting for the new
`did_finish_handling_input_event(bool event_was_accepted) =|` IPC call
before sending the next one. If the event was not accepted, OOPWV
imitates the usual event bubbling: first passing the event to its
superclass, then to its parent widget, and finally propagating to any
Action shortcuts.

With this, shortcuts like Ctrl+I to open Browser's JS console work
again, except when a contenteditable field is selected. That's a
whole separate stack of yaks.

Co-authored-by: Zaggy1024 <zaggy1024@gmail.com>
This commit is contained in:
Sam Atkins 2022-11-21 16:07:47 +00:00 committed by Andreas Kling
parent 2654bfead4
commit d94d60219c
Notes: sideshowbarker 2024-07-18 03:35:30 +09:00
8 changed files with 168 additions and 14 deletions

View file

@ -157,37 +157,42 @@ void ConnectionFromClient::flush_pending_paint_requests()
void ConnectionFromClient::mouse_down(Gfx::IntPoint const& position, unsigned int button, unsigned int buttons, unsigned int modifiers)
{
page().handle_mousedown(position, button, buttons, modifiers);
report_finished_handling_input_event(page().handle_mousedown(position, button, buttons, modifiers));
}
void ConnectionFromClient::mouse_move(Gfx::IntPoint const& position, [[maybe_unused]] unsigned int button, unsigned int buttons, unsigned int modifiers)
{
page().handle_mousemove(position, buttons, modifiers);
report_finished_handling_input_event(page().handle_mousemove(position, buttons, modifiers));
}
void ConnectionFromClient::mouse_up(Gfx::IntPoint const& position, unsigned int button, unsigned int buttons, unsigned int modifiers)
{
page().handle_mouseup(position, button, buttons, modifiers);
report_finished_handling_input_event(page().handle_mouseup(position, button, buttons, modifiers));
}
void ConnectionFromClient::mouse_wheel(Gfx::IntPoint const& position, unsigned int button, unsigned int buttons, unsigned int modifiers, i32 wheel_delta_x, i32 wheel_delta_y)
{
page().handle_mousewheel(position, button, buttons, modifiers, wheel_delta_x, wheel_delta_y);
report_finished_handling_input_event(page().handle_mousewheel(position, button, buttons, modifiers, wheel_delta_x, wheel_delta_y));
}
void ConnectionFromClient::doubleclick(Gfx::IntPoint const& position, unsigned int button, unsigned int buttons, unsigned int modifiers)
{
page().handle_doubleclick(position, button, buttons, modifiers);
report_finished_handling_input_event(page().handle_doubleclick(position, button, buttons, modifiers));
}
void ConnectionFromClient::key_down(i32 key, unsigned int modifiers, u32 code_point)
{
page().handle_keydown((KeyCode)key, modifiers, code_point);
report_finished_handling_input_event(page().handle_keydown((KeyCode)key, modifiers, code_point));
}
void ConnectionFromClient::key_up(i32 key, unsigned int modifiers, u32 code_point)
{
page().handle_keyup((KeyCode)key, modifiers, code_point);
report_finished_handling_input_event(page().handle_keyup((KeyCode)key, modifiers, code_point));
}
void ConnectionFromClient::report_finished_handling_input_event(bool event_was_handled)
{
async_did_finish_handling_input_event(event_was_handled);
}
void ConnectionFromClient::debug_request(String const& request, String const& argument)