From 31d7fa244232c2a2239dbf6017ba9e3dd191ec2e Mon Sep 17 00:00:00 2001 From: Tim Ledbetter Date: Fri, 21 Jun 2024 22:00:19 +0100 Subject: [PATCH] LibWeb: Fire `auxclick` event on middle click Previously, no event was fired on middle click. This change also allows the UI to open a link in a new tab on middle click. --- .../Text/expected/UIEvents/auxevent.txt | 1 + .../LibWeb/Text/input/UIEvents/auxevent.html | 22 +++++++++++++++++++ .../Libraries/LibWeb/Page/EventHandler.cpp | 2 ++ 3 files changed, 25 insertions(+) create mode 100644 Tests/LibWeb/Text/expected/UIEvents/auxevent.txt create mode 100644 Tests/LibWeb/Text/input/UIEvents/auxevent.html diff --git a/Tests/LibWeb/Text/expected/UIEvents/auxevent.txt b/Tests/LibWeb/Text/expected/UIEvents/auxevent.txt new file mode 100644 index 00000000000..9d7c2ddb982 --- /dev/null +++ b/Tests/LibWeb/Text/expected/UIEvents/auxevent.txt @@ -0,0 +1 @@ +auxclick event fired \ No newline at end of file diff --git a/Tests/LibWeb/Text/input/UIEvents/auxevent.html b/Tests/LibWeb/Text/input/UIEvents/auxevent.html new file mode 100644 index 00000000000..8309f8de690 --- /dev/null +++ b/Tests/LibWeb/Text/input/UIEvents/auxevent.html @@ -0,0 +1,22 @@ + + + + diff --git a/Userland/Libraries/LibWeb/Page/EventHandler.cpp b/Userland/Libraries/LibWeb/Page/EventHandler.cpp index ce7ac244471..0bebc268313 100644 --- a/Userland/Libraries/LibWeb/Page/EventHandler.cpp +++ b/Userland/Libraries/LibWeb/Page/EventHandler.cpp @@ -278,6 +278,8 @@ bool EventHandler::handle_mouseup(CSSPixelPoint viewport_position, CSSPixelPoint if (node.ptr() == m_mousedown_target) { if (button == UIEvents::MouseButton::Primary) { run_activation_behavior = node->dispatch_event(UIEvents::MouseEvent::create_from_platform_event(node->realm(), UIEvents::EventNames::click, screen_position, page_offset, client_offset, offset, {}, 1, button, modifiers).release_value_but_fixme_should_propagate_errors()); + } else if (button == UIEvents::MouseButton::Middle) { + run_activation_behavior = node->dispatch_event(UIEvents::MouseEvent::create_from_platform_event(node->realm(), UIEvents::EventNames::auxclick, screen_position, page_offset, client_offset, offset, {}, 1, button, modifiers).release_value_but_fixme_should_propagate_errors()); } else if (button == UIEvents::MouseButton::Secondary) { // Allow the user to bypass custom context menus by holding shift, like Firefox. if ((modifiers & UIEvents::Mod_Shift) == 0)