From 8f717927f29400a0e73309bb1b0d64f4f40787a1 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Fri, 17 Feb 2023 11:13:25 +0000 Subject: [PATCH] LibGUI: Add Button double-click callback --- Userland/Libraries/LibGUI/AbstractButton.cpp | 6 ++++++ Userland/Libraries/LibGUI/AbstractButton.h | 4 +++- Userland/Libraries/LibGUI/Button.cpp | 6 ++++++ Userland/Libraries/LibGUI/Button.h | 2 ++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibGUI/AbstractButton.cpp b/Userland/Libraries/LibGUI/AbstractButton.cpp index b723fadd85..805fbed815 100644 --- a/Userland/Libraries/LibGUI/AbstractButton.cpp +++ b/Userland/Libraries/LibGUI/AbstractButton.cpp @@ -160,6 +160,12 @@ void AbstractButton::mouseup_event(MouseEvent& event) Widget::mouseup_event(event); } +void AbstractButton::doubleclick_event(GUI::MouseEvent& event) +{ + double_click(event.modifiers()); + Widget::doubleclick_event(event); +} + void AbstractButton::enter_event(Core::Event&) { m_hovered = true; diff --git a/Userland/Libraries/LibGUI/AbstractButton.h b/Userland/Libraries/LibGUI/AbstractButton.h index 9ec6037cc6..65acce8894 100644 --- a/Userland/Libraries/LibGUI/AbstractButton.h +++ b/Userland/Libraries/LibGUI/AbstractButton.h @@ -41,7 +41,8 @@ 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 void double_click(unsigned) { } + virtual void middle_mouse_click(unsigned) { } virtual bool is_uncheckable() const { return true; } int auto_repeat_interval() const { return m_auto_repeat_interval; } @@ -53,6 +54,7 @@ protected: virtual void mousedown_event(MouseEvent&) override; virtual void mousemove_event(MouseEvent&) override; virtual void mouseup_event(MouseEvent&) override; + virtual void doubleclick_event(GUI::MouseEvent&) override; virtual void keydown_event(KeyEvent&) override; virtual void keyup_event(KeyEvent&) override; virtual void enter_event(Core::Event&) override; diff --git a/Userland/Libraries/LibGUI/Button.cpp b/Userland/Libraries/LibGUI/Button.cpp index 9d11c8f435..911d844021 100644 --- a/Userland/Libraries/LibGUI/Button.cpp +++ b/Userland/Libraries/LibGUI/Button.cpp @@ -145,6 +145,12 @@ void Button::click(unsigned modifiers) m_action->activate(this); } +void Button::double_click(unsigned int modifiers) +{ + if (on_double_click) + on_double_click(modifiers); +} + void Button::middle_mouse_click(unsigned int modifiers) { if (!is_enabled()) diff --git a/Userland/Libraries/LibGUI/Button.h b/Userland/Libraries/LibGUI/Button.h index e5301359cf..b91f92ad97 100644 --- a/Userland/Libraries/LibGUI/Button.h +++ b/Userland/Libraries/LibGUI/Button.h @@ -37,6 +37,7 @@ public: Gfx::TextAlignment text_alignment() const { return m_text_alignment; } Function on_click; + Function on_double_click; Function on_middle_mouse_click; Function on_context_menu_request; @@ -44,6 +45,7 @@ public: Gfx::ButtonStyle button_style() const { return m_button_style; } virtual void click(unsigned modifiers = 0) override; + virtual void double_click(unsigned modifiers = 0) override; virtual void middle_mouse_click(unsigned modifiers = 0) override; virtual void context_menu_event(ContextMenuEvent&) override;