diff options
Diffstat (limited to 'Userland')
-rw-r--r-- | Userland/Services/WindowServer/MenuManager.cpp | 8 | ||||
-rw-r--r-- | Userland/Services/WindowServer/MenuManager.h | 1 |
2 files changed, 9 insertions, 0 deletions
diff --git a/Userland/Services/WindowServer/MenuManager.cpp b/Userland/Services/WindowServer/MenuManager.cpp index 3a882c7b46..ad0e8543aa 100644 --- a/Userland/Services/WindowServer/MenuManager.cpp +++ b/Userland/Services/WindowServer/MenuManager.cpp @@ -229,6 +229,14 @@ void MenuManager::close_everyone() clear_current_menu(); } +Menu* MenuManager::closest_open_ancestor_of(Menu const& other) const +{ + for (auto& menu : m_open_menu_stack.in_reverse()) + if (menu->is_menu_ancestor_of(other)) + return menu.ptr(); + return nullptr; +} + void MenuManager::close_everyone_not_in_lineage(Menu& menu) { Vector<Menu&> menus_to_close; diff --git a/Userland/Services/WindowServer/MenuManager.h b/Userland/Services/WindowServer/MenuManager.h index 90312238e5..77d214c852 100644 --- a/Userland/Services/WindowServer/MenuManager.h +++ b/Userland/Services/WindowServer/MenuManager.h @@ -26,6 +26,7 @@ public: bool has_open_menu() const { return !m_open_menu_stack.is_empty(); } Menu* current_menu() { return m_current_menu.ptr(); } + Menu* closest_open_ancestor_of(Menu const&) const; void set_current_menu(Menu*); void clear_current_menu(); void open_menu(Menu&, bool as_current_menu = true); |