diff --git a/Libraries/LibWebView/Menu.cpp b/Libraries/LibWebView/Menu.cpp index f2f0e4a61dd..3d9b19dc5b9 100644 --- a/Libraries/LibWebView/Menu.cpp +++ b/Libraries/LibWebView/Menu.cpp @@ -60,6 +60,16 @@ void Action::set_visible(bool visible) observer->on_visible_state_changed(*this); } +void Action::set_engaged(bool engaged) +{ + if (m_engaged == engaged) + return; + m_engaged = engaged; + + for (auto& observer : m_observers) + observer->on_engaged_state_changed(*this); +} + void Action::set_checked(bool checked) { set_checked_internal(checked); @@ -91,6 +101,7 @@ void Action::add_observer(NonnullOwnPtr observer) observer->on_tooltip_changed(*this); observer->on_enabled_state_changed(*this); observer->on_visible_state_changed(*this); + observer->on_engaged_state_changed(*this); if (is_checkable()) observer->on_checked_state_changed(*this); diff --git a/Libraries/LibWebView/Menu.h b/Libraries/LibWebView/Menu.h index 023bbc775e9..8a82800d632 100644 --- a/Libraries/LibWebView/Menu.h +++ b/Libraries/LibWebView/Menu.h @@ -124,6 +124,9 @@ public: bool visible() const { return m_visible; } void set_visible(bool); + bool engaged() const { return m_engaged; } + void set_engaged(bool); + bool is_checkable() const { return m_checked.has_value(); } bool checked() const { return *m_checked; } void set_checked(bool); @@ -135,6 +138,7 @@ public: virtual void on_tooltip_changed(Action&) { } virtual void on_enabled_state_changed(Action&) { } virtual void on_visible_state_changed(Action&) { } + virtual void on_engaged_state_changed(Action&) { } virtual void on_checked_state_changed(Action&) { } }; @@ -160,6 +164,7 @@ private: bool m_enabled { true }; bool m_visible { true }; + bool m_engaged { false }; Optional m_checked; Function m_action;