From 8dc6fc9aca3ff4158260ba6af50f6ded78188b00 Mon Sep 17 00:00:00 2001 From: Shannon Booth Date: Tue, 31 Dec 2019 13:38:56 +1300 Subject: [PATCH] WindowServer: Set no active windows on a click outside of any window --- Servers/WindowServer/WSWindowManager.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Servers/WindowServer/WSWindowManager.cpp b/Servers/WindowServer/WSWindowManager.cpp index 42ce56c17c..74f4a9d56a 100644 --- a/Servers/WindowServer/WSWindowManager.cpp +++ b/Servers/WindowServer/WSWindowManager.cpp @@ -961,6 +961,11 @@ void WSWindowManager::process_mouse_event(WSMouseEvent& event, WSWindow*& hovere event_window_with_frame = &window; return IterationDecision::Break; }); + + // Clicked outside of any window + if (!hovered_window && event.type() == WSEvent::MouseDown) + set_active_window(nullptr); + } if (event_window_with_frame != m_resize_candidate.ptr()) @@ -1088,7 +1093,7 @@ void WSWindowManager::set_active_window(WSWindow* window) if (window && window->is_blocked_by_modal_window()) return; - if (window->type() != WSWindowType::Normal) + if (window && window->type() != WSWindowType::Normal) return; if (window == m_active_window) @@ -1103,9 +1108,11 @@ void WSWindowManager::set_active_window(WSWindow* window) previously_active_client = previously_active_window->client(); CEventLoop::current().post_event(*previously_active_window, make(WSEvent::WindowDeactivated)); invalidate(*previously_active_window); + m_active_window = nullptr; } - m_active_window = window->make_weak_ptr(); - if (m_active_window) { + + if (window) { + m_active_window = window->make_weak_ptr(); active_client = m_active_window->client(); CEventLoop::current().post_event(*m_active_window, make(WSEvent::WindowActivated)); invalidate(*m_active_window);