From 35bd79701c5835c87088b5bf4a6146a895c3ed6f Mon Sep 17 00:00:00 2001 From: thankyouverycool <66646555+thankyouverycool@users.noreply.github.com> Date: Thu, 17 Nov 2022 10:31:53 -0500 Subject: [PATCH] WindowServer: Add request_close_fragile_windows() helper --- Userland/Services/WindowServer/WindowManager.cpp | 10 ++++++++++ Userland/Services/WindowServer/WindowManager.h | 15 +++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/Userland/Services/WindowServer/WindowManager.cpp b/Userland/Services/WindowServer/WindowManager.cpp index 08ff9482ff..7c52705e26 100644 --- a/Userland/Services/WindowServer/WindowManager.cpp +++ b/Userland/Services/WindowServer/WindowManager.cpp @@ -2388,4 +2388,14 @@ Window* WindowManager::foremost_popup_window(WindowStack& stack) return popup_window; } +void WindowManager::request_close_fragile_windows(WindowStack& stack) +{ + for_each_visible_window_from_back_to_front([&](Window& window) { + if (is_fragile_window_type(window.type())) + window.request_close(); + return IterationDecision::Continue; + }, + &stack); +} + } diff --git a/Userland/Services/WindowServer/WindowManager.h b/Userland/Services/WindowServer/WindowManager.h index 5b05fbc804..763dd2fbca 100644 --- a/Userland/Services/WindowServer/WindowManager.h +++ b/Userland/Services/WindowServer/WindowManager.h @@ -99,6 +99,7 @@ public: } Window* foremost_popup_window(WindowStack& stack = WindowManager::the().current_window_stack()); + void request_close_fragile_windows(WindowStack& stack = WindowManager::the().current_window_stack()); Window* active_input_window() { VERIFY(m_current_window_stack); @@ -301,14 +302,24 @@ public: { switch (window_type) { case WindowType::Normal: - case WindowType::Tooltip: - case WindowType::Popup: return false; default: return true; } } + static constexpr bool is_fragile_window_type(WindowType window_type) + { + switch (window_type) { + case WindowType::Autocomplete: + case WindowType::Popup: + case WindowType::Tooltip: + return true; + default: + return false; + } + } + void did_switch_window_stack(Badge, WindowStack&, WindowStack&); template