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.
This commit is contained in:
parent
ba135dc0c0
commit
4c620dea83
Notes:
sideshowbarker
2024-07-19 09:26:17 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/4c620dea830
3 changed files with 18 additions and 0 deletions
Servers/WindowServer
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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(); }
|
||||
|
|
Loading…
Add table
Reference in a new issue