瀏覽代碼

WindowServer: Add MenuManager helper to find closest open ancestor

thankyouverycool 2 年之前
父節點
當前提交
4489f9dbef
共有 2 個文件被更改,包括 9 次插入0 次删除
  1. 8 0
      Userland/Services/WindowServer/MenuManager.cpp
  2. 1 0
      Userland/Services/WindowServer/MenuManager.h

+ 8 - 0
Userland/Services/WindowServer/MenuManager.cpp

@@ -229,6 +229,14 @@ void MenuManager::close_everyone()
     clear_current_menu();
     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)
 void MenuManager::close_everyone_not_in_lineage(Menu& menu)
 {
 {
     Vector<Menu&> menus_to_close;
     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(); }
     bool has_open_menu() const { return !m_open_menu_stack.is_empty(); }
 
 
     Menu* current_menu() { return m_current_menu.ptr(); }
     Menu* current_menu() { return m_current_menu.ptr(); }
+    Menu* closest_open_ancestor_of(Menu const&) const;
     void set_current_menu(Menu*);
     void set_current_menu(Menu*);
     void clear_current_menu();
     void clear_current_menu();
     void open_menu(Menu&, bool as_current_menu = true);
     void open_menu(Menu&, bool as_current_menu = true);