From fd06164fa0cee25ab69c701897de0a4bd03537d6 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 27 Dec 2019 11:44:37 +0100 Subject: [PATCH] WindowServer: Recompute window occlusions on window stack changes When adding/removing windows, or moving a window from the front to the back, we have to recompute everyone's occlusion states. --- Servers/WindowServer/WSWindowManager.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Servers/WindowServer/WSWindowManager.cpp b/Servers/WindowServer/WSWindowManager.cpp index 2c335c83d6..37e0e7fe7b 100644 --- a/Servers/WindowServer/WSWindowManager.cpp +++ b/Servers/WindowServer/WSWindowManager.cpp @@ -312,6 +312,8 @@ void WSWindowManager::add_window(WSWindow& window) if (m_switcher.is_visible() && window.type() != WSWindowType::WindowSwitcher) m_switcher.refresh(); + recompute_occlusions(); + if (window.listens_to_wm_events()) { for_each_window([&](WSWindow& other_window) { if (&window != &other_window) { @@ -335,6 +337,8 @@ void WSWindowManager::move_to_front_and_make_active(WSWindow& window) m_windows_in_order.remove(&window); m_windows_in_order.append(&window); + recompute_occlusions(); + set_active_window(&window); } @@ -347,6 +351,8 @@ void WSWindowManager::remove_window(WSWindow& window) if (m_switcher.is_visible() && window.type() != WSWindowType::WindowSwitcher) m_switcher.refresh(); + recompute_occlusions(); + for_each_window_listening_to_wm_events([&window](WSWindow& listener) { if (!(listener.wm_event_mask() & WSWMEventMask::WindowRemovals)) return IterationDecision::Continue;