diff --git a/Userland/Services/WindowServer/WMConnectionFromClient.cpp b/Userland/Services/WindowServer/WMConnectionFromClient.cpp
index 49e383907f..f74cf6b037 100644
--- a/Userland/Services/WindowServer/WMConnectionFromClient.cpp
+++ b/Userland/Services/WindowServer/WMConnectionFromClient.cpp
@@ -63,7 +63,7 @@ void WMConnectionFromClient::set_active_window(i32 client_id, i32 window_id)
return;
}
auto& window = *(*it).value;
- WindowManager::the().restore_modal_chain(window);
+ WindowManager::the().move_to_front_and_make_active(window);
}
void WMConnectionFromClient::popup_window_menu(i32 client_id, i32 window_id, Gfx::IntPoint const& screen_position)
diff --git a/Userland/Services/WindowServer/WindowManager.cpp b/Userland/Services/WindowServer/WindowManager.cpp
index 1fed7611c2..61df10906a 100644
--- a/Userland/Services/WindowServer/WindowManager.cpp
+++ b/Userland/Services/WindowServer/WindowManager.cpp
@@ -342,6 +342,12 @@ void WindowManager::add_window(Window& window)
void WindowManager::move_to_front_and_make_active(Window& window)
{
+ for_each_window_in_modal_chain(window, [&](auto& w) {
+ w.set_minimized(false);
+ w.window_stack().move_to_front(w);
+ return IterationDecision::Continue;
+ });
+
auto* blocker = window.blocking_modal_window();
if (blocker && !window.is_capturing_input()) {
blocker->window_stack().move_to_front(*blocker);
@@ -2134,16 +2140,6 @@ void WindowManager::did_popup_a_menu(Badge