summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Userland/Services/WindowServer/MenuManager.cpp8
-rw-r--r--Userland/Services/WindowServer/MenuManager.h1
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);