From 4c620dea8300d908baf0dab9facb093fca15a50d Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 11 Feb 2020 18:38:48 +0100 Subject: [PATCH] WindowServer: Update window switcher when moving window to front If the window switcher is up when a window is made frontmost (usually by clicking on it), the window will now become the selected window in the switcher. This still has a slight feeling of "hmm" but is definitely better than what we had before. --- Servers/WindowServer/WindowManager.cpp | 6 ++++++ Servers/WindowServer/WindowSwitcher.cpp | 10 ++++++++++ Servers/WindowServer/WindowSwitcher.h | 2 ++ 3 files changed, 18 insertions(+) diff --git a/Servers/WindowServer/WindowManager.cpp b/Servers/WindowServer/WindowManager.cpp index d3c69330f1..e149e8a762 100644 --- a/Servers/WindowServer/WindowManager.cpp +++ b/Servers/WindowServer/WindowManager.cpp @@ -187,6 +187,12 @@ void WindowManager::move_to_front_and_make_active(Window& window) recompute_occlusions(); set_active_window(&window); + + if (m_switcher.is_visible()) { + m_switcher.refresh(); + m_switcher.select_window(window); + set_highlight_window(&window); + } } void WindowManager::remove_window(Window& window) diff --git a/Servers/WindowServer/WindowSwitcher.cpp b/Servers/WindowServer/WindowSwitcher.cpp index 468b6926bf..9931655f29 100644 --- a/Servers/WindowServer/WindowSwitcher.cpp +++ b/Servers/WindowServer/WindowSwitcher.cpp @@ -126,6 +126,16 @@ void WindowSwitcher::on_key_event(const KeyEvent& event) select_window_at_index(new_selected_index); } +void WindowSwitcher::select_window(Window& window) +{ + for (int i = 0; i < m_windows.size(); ++i) { + if (m_windows.at(i) == &window) { + select_window_at_index(i); + return; + } + } +} + void WindowSwitcher::select_window_at_index(int index) { m_selected_index = index; diff --git a/Servers/WindowServer/WindowSwitcher.h b/Servers/WindowServer/WindowSwitcher.h index 3121ef087f..5aa0d0ca6b 100644 --- a/Servers/WindowServer/WindowSwitcher.h +++ b/Servers/WindowServer/WindowSwitcher.h @@ -68,6 +68,8 @@ public: int padding() const { return 8; } int item_padding() const { return 8; } + void select_window(Window&); + Window* selected_window(); Window* switcher_window() { return m_switcher_window.ptr(); }