diff --git a/Services/WindowServer/Menu.cpp b/Services/WindowServer/Menu.cpp index 07c460b9b2..4b9dc71a19 100644 --- a/Services/WindowServer/Menu.cpp +++ b/Services/WindowServer/Menu.cpp @@ -551,6 +551,8 @@ void Menu::popup(const Gfx::Point& position, bool is_submenu) window.move_to(adjusted_pos); window.set_visible(true); MenuManager::the().set_current_menu(this, is_submenu); + + WindowManager::the().did_popup_a_menu({}); } bool Menu::is_menu_ancestor_of(const Menu& other) const diff --git a/Services/WindowServer/WindowManager.cpp b/Services/WindowServer/WindowManager.cpp index 2b168107d1..f45cf2d2f6 100644 --- a/Services/WindowServer/WindowManager.cpp +++ b/Services/WindowServer/WindowManager.cpp @@ -1314,4 +1314,13 @@ bool WindowManager::update_theme(String theme_path, String theme_name) return true; } +void WindowManager::did_popup_a_menu(Badge) +{ + // Clear any ongoing input gesture + if (!m_active_input_window) + return; + m_active_input_window->set_automatic_cursor_tracking_enabled(false); + m_active_input_window = nullptr; +} + } diff --git a/Services/WindowServer/WindowManager.h b/Services/WindowServer/WindowManager.h index 0c7ec8429f..7a0b03a3f3 100644 --- a/Services/WindowServer/WindowManager.h +++ b/Services/WindowServer/WindowManager.h @@ -173,6 +173,8 @@ public: void set_hovered_window(Window*); void deliver_mouse_event(Window& window, MouseEvent& event); + void did_popup_a_menu(Badge); + private: NonnullRefPtr get_cursor(const String& name); NonnullRefPtr get_cursor(const String& name, const Gfx::Point& hotspot);