Browse Source

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.
Andreas Kling 5 năm trước cách đây
mục cha
commit
4c620dea83

+ 6 - 0
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)

+ 10 - 0
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;

+ 2 - 0
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(); }