From b648997d1f89f5affc84f88ea8dc5f5698367250 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 25 Jan 2020 10:39:09 +0100 Subject: [PATCH] WindowServer: Don't allow minimize/maximize of windows while modal up While one window is blocked by another modal one, just ignore events on the window frame, and also ignore set_minimized() and set_maximized(). The only thing you're allowed to do with a blocked window is moving it. Fixes #1111. --- Servers/WindowServer/WSWindow.cpp | 4 ++++ Servers/WindowServer/WSWindowFrame.cpp | 3 +++ 2 files changed, 7 insertions(+) diff --git a/Servers/WindowServer/WSWindow.cpp b/Servers/WindowServer/WSWindow.cpp index a9980b9d94..d2befbcafc 100644 --- a/Servers/WindowServer/WSWindow.cpp +++ b/Servers/WindowServer/WSWindow.cpp @@ -153,6 +153,8 @@ void WSWindow::set_minimized(bool minimized) return; if (minimized && !m_minimizable) return; + if (is_blocked_by_modal_window()) + return; m_minimized = minimized; update_menu_item_text(PopupMenuItem::Minimize); start_minimize_animation(); @@ -193,6 +195,8 @@ void WSWindow::set_maximized(bool maximized) return; if (maximized && !is_resizable()) return; + if (is_blocked_by_modal_window()) + return; set_tiled(WindowTileType::None); m_maximized = maximized; update_menu_item_text(PopupMenuItem::Maximize); diff --git a/Servers/WindowServer/WSWindowFrame.cpp b/Servers/WindowServer/WSWindowFrame.cpp index 8ec0951006..29da743144 100644 --- a/Servers/WindowServer/WSWindowFrame.cpp +++ b/Servers/WindowServer/WSWindowFrame.cpp @@ -306,6 +306,9 @@ void WSWindowFrame::on_mouse_event(const WSMouseEvent& event) { ASSERT(!m_window.is_fullscreen()); + if (m_window.is_blocked_by_modal_window()) + return; + auto& wm = WSWindowManager::the(); if (m_window.type() != WSWindowType::Normal) return;