diff --git a/Userland/Services/WindowServer/Window.cpp b/Userland/Services/WindowServer/Window.cpp index b2d14112ed..3c648bcec5 100644 --- a/Userland/Services/WindowServer/Window.cpp +++ b/Userland/Services/WindowServer/Window.cpp @@ -989,6 +989,17 @@ void Window::set_parent_window(Window& parent_window) parent_window.add_child_window(*this); } +Window* Window::modeless_ancestor() +{ + if (!is_modal()) + return this; + for (auto parent = m_parent_window; parent; parent = parent->parent_window()) { + if (!parent->is_modal()) + return parent; + } + return nullptr; +} + bool Window::is_accessory() const { if (!m_accessory) diff --git a/Userland/Services/WindowServer/Window.h b/Userland/Services/WindowServer/Window.h index bc915aa71a..6a19a51722 100644 --- a/Userland/Services/WindowServer/Window.h +++ b/Userland/Services/WindowServer/Window.h @@ -184,6 +184,7 @@ public: bool is_modal() const; bool is_modal_dont_unparent() const { return m_modal && m_parent_window; } + Window* modeless_ancestor(); Gfx::IntRect rect() const { return m_rect; } void set_rect(Gfx::IntRect const&);