Pārlūkot izejas kodu

WindowServer: Add MenuManager helper to find closest open ancestor

thankyouverycool 2 gadi atpakaļ
vecāks
revīzija
4489f9dbef

+ 8 - 0
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;

+ 1 - 0
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);