diff --git a/Servers/WindowServer/WSWindowManager.cpp b/Servers/WindowServer/WSWindowManager.cpp index e60efbeb49..22aab13138 100644 --- a/Servers/WindowServer/WSWindowManager.cpp +++ b/Servers/WindowServer/WSWindowManager.cpp @@ -799,11 +799,13 @@ void WSWindowManager::process_mouse_event(WSMouseEvent& event, WSWindow*& hovere if (!window.is_fullscreen() && m_keyboard_modifiers == Mod_Logo && event.type() == WSEvent::MouseDown && event.button() == MouseButton::Left) { hovered_window = &window; start_window_move(window, event); + m_moved_or_resized_since_logo_keydown = true; return IterationDecision::Break; } if (window.is_resizable() && m_keyboard_modifiers == Mod_Logo && event.type() == WSEvent::MouseDown && event.button() == MouseButton::Right && !window.is_blocked_by_modal_window()) { hovered_window = &window; start_window_resize(window, event); + m_moved_or_resized_since_logo_keydown = true; return IterationDecision::Break; } } @@ -940,12 +942,10 @@ void WSWindowManager::event(CEvent& event) return; } - if (key_event.type() == WSEvent::KeyUp - && key_event.key() == Key_Logo - && !m_switcher.is_visible() - && !m_move_window - && !m_resize_window) { - WSMenuManager::the().open_menu(WSMenuManager::the().system_menu()); + if (key_event.type() == WSEvent::KeyUp && key_event.key() == Key_Logo) { + if (!m_moved_or_resized_since_logo_keydown && !m_switcher.is_visible() && !m_move_window && !m_resize_window) + WSMenuManager::the().open_menu(WSMenuManager::the().system_menu()); + m_moved_or_resized_since_logo_keydown = false; return; } diff --git a/Servers/WindowServer/WSWindowManager.h b/Servers/WindowServer/WSWindowManager.h index b8271ebafd..2263707df9 100644 --- a/Servers/WindowServer/WSWindowManager.h +++ b/Servers/WindowServer/WSWindowManager.h @@ -253,6 +253,8 @@ private: Point m_resize_origin; ResizeDirection m_resize_direction { ResizeDirection::None }; + bool m_moved_or_resized_since_logo_keydown { false }; + u8 m_keyboard_modifiers { 0 }; WSWindowSwitcher m_switcher;