From 2ac1fbef4f26acdf17b1f6b69657f4804cff8753 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 1 May 2020 23:12:15 +0200 Subject: [PATCH] WindowServer: Don't allow parent windows to go above their children Whenever a parent window is moved to front, we now follow up by immediately moving its children to front as well. --- Servers/WindowServer/Window.h | 3 +++ Servers/WindowServer/WindowManager.cpp | 7 ++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Servers/WindowServer/Window.h b/Servers/WindowServer/Window.h index 5705d09114..b22c15410f 100644 --- a/Servers/WindowServer/Window.h +++ b/Servers/WindowServer/Window.h @@ -229,6 +229,9 @@ public: void set_parent_window(Window&); + Vector>& child_windows() { return m_child_windows; } + const Vector>& child_windows() const { return m_child_windows; } + private: void handle_mouse_event(const MouseEvent&); void update_menu_item_text(PopupMenuItem item); diff --git a/Servers/WindowServer/WindowManager.cpp b/Servers/WindowServer/WindowManager.cpp index 309ac50deb..1ef90805ad 100644 --- a/Servers/WindowServer/WindowManager.cpp +++ b/Servers/WindowServer/WindowManager.cpp @@ -47,8 +47,8 @@ #include #include #include -#include #include +#include #include #include @@ -218,6 +218,11 @@ void WindowManager::move_to_front_and_make_active(Window& window) m_switcher.select_window(window); set_highlight_window(&window); } + + for (auto& child_window : window.child_windows()) { + if (child_window) + move_to_front_and_make_active(*child_window); + } } void WindowManager::remove_window(Window& window)