From f9212ac02eb386d0f91cc9902ff9421e16d572f0 Mon Sep 17 00:00:00 2001 From: networkException Date: Sun, 10 Jul 2022 17:20:04 +0200 Subject: [PATCH] LibGUI: Add button handler for middle mouse clicks --- Userland/Libraries/LibGUI/AbstractButton.cpp | 3 +++ Userland/Libraries/LibGUI/AbstractButton.h | 1 + Userland/Libraries/LibGUI/Button.cpp | 11 +++++++++++ Userland/Libraries/LibGUI/Button.h | 2 ++ 4 files changed, 17 insertions(+) diff --git a/Userland/Libraries/LibGUI/AbstractButton.cpp b/Userland/Libraries/LibGUI/AbstractButton.cpp index 12d9043e9a..bccd23f111 100644 --- a/Userland/Libraries/LibGUI/AbstractButton.cpp +++ b/Userland/Libraries/LibGUI/AbstractButton.cpp @@ -140,6 +140,9 @@ void AbstractButton::mouseup_event(MouseEvent& event) case MouseButton::Primary: click(event.modifiers()); break; + case MouseButton::Middle: + middle_mouse_click(event.modifiers()); + break; default: VERIFY_NOT_REACHED(); } diff --git a/Userland/Libraries/LibGUI/AbstractButton.h b/Userland/Libraries/LibGUI/AbstractButton.h index 3d14e5c0c4..72ef9cfeea 100644 --- a/Userland/Libraries/LibGUI/AbstractButton.h +++ b/Userland/Libraries/LibGUI/AbstractButton.h @@ -39,6 +39,7 @@ public: void set_allowed_mouse_buttons_for_pressing(unsigned allowed_buttons) { m_allowed_mouse_buttons_for_pressing = allowed_buttons; } virtual void click(unsigned modifiers = 0) = 0; + virtual void middle_mouse_click(unsigned) {}; virtual bool is_uncheckable() const { return true; } int auto_repeat_interval() const { return m_auto_repeat_interval; } diff --git a/Userland/Libraries/LibGUI/Button.cpp b/Userland/Libraries/LibGUI/Button.cpp index c17791f7f4..d89806d482 100644 --- a/Userland/Libraries/LibGUI/Button.cpp +++ b/Userland/Libraries/LibGUI/Button.cpp @@ -141,6 +141,17 @@ void Button::click(unsigned modifiers) m_action->activate(this); } +void Button::middle_mouse_click(unsigned int modifiers) +{ + if (!is_enabled()) + return; + + NonnullRefPtr protector = *this; + + if (on_middle_mouse_click) + on_middle_mouse_click(modifiers); +} + void Button::context_menu_event(ContextMenuEvent& context_menu_event) { if (!is_enabled()) diff --git a/Userland/Libraries/LibGUI/Button.h b/Userland/Libraries/LibGUI/Button.h index 926ea575de..c714c90237 100644 --- a/Userland/Libraries/LibGUI/Button.h +++ b/Userland/Libraries/LibGUI/Button.h @@ -30,12 +30,14 @@ public: Gfx::TextAlignment text_alignment() const { return m_text_alignment; } Function on_click; + Function on_middle_mouse_click; Function on_context_menu_request; void set_button_style(Gfx::ButtonStyle style) { m_button_style = style; } Gfx::ButtonStyle button_style() const { return m_button_style; } virtual void click(unsigned modifiers = 0) override; + virtual void middle_mouse_click(unsigned modifiers = 0) override; virtual void context_menu_event(ContextMenuEvent&) override; Action* action() { return m_action; }