diff --git a/Userland/Libraries/LibGUI/Action.cpp b/Userland/Libraries/LibGUI/Action.cpp index 4eceaa6fbd..29c9b9b199 100644 --- a/Userland/Libraries/LibGUI/Action.cpp +++ b/Userland/Libraries/LibGUI/Action.cpp @@ -131,6 +131,12 @@ void Action::activate(Core::Object* activator) } } + if (activator == nullptr) { + for_each_toolbar_button([](auto& button) { + button.set_mimic_pressed(true); + }); + } + on_activation(*this); m_activator = nullptr; } diff --git a/Userland/Libraries/LibGUI/Button.cpp b/Userland/Libraries/LibGUI/Button.cpp index e75b041364..15759fa697 100644 --- a/Userland/Libraries/LibGUI/Button.cpp +++ b/Userland/Libraries/LibGUI/Button.cpp @@ -224,8 +224,23 @@ void Button::set_default(bool default_button) void Button::set_mimic_pressed(bool mimic_pressed) { - m_mimic_pressed = mimic_pressed; - update(); + if (!is_being_pressed()) { + m_mimic_pressed = mimic_pressed; + + stop_timer(); + start_timer(80, Core::TimerShouldFireWhenNotVisible::Yes); + + update(); + } +} + +void Button::timer_event(Core::TimerEvent&) +{ + if (is_mimic_pressed()) { + m_mimic_pressed = false; + + update(); + } } } diff --git a/Userland/Libraries/LibGUI/Button.h b/Userland/Libraries/LibGUI/Button.h index 5e1cb76a84..4fe29f5572 100644 --- a/Userland/Libraries/LibGUI/Button.h +++ b/Userland/Libraries/LibGUI/Button.h @@ -64,6 +64,8 @@ protected: virtual void paint_event(PaintEvent&) override; private: + virtual void timer_event(Core::TimerEvent&) override; + RefPtr m_icon; RefPtr m_menu; Gfx::ButtonStyle m_button_style { Gfx::ButtonStyle::Normal };