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;