workspaces: keep focus on omnipresent windows when switching workspaces

Fixes: #2329
This commit is contained in:
Consolatis 2024-11-12 01:23:37 +01:00
parent 13a58c58eb
commit 77d1747f1b

View file

@ -339,12 +339,19 @@ workspaces_switch_to(struct workspace *target, bool update_focus)
server->workspaces.current = target;
/*
* Make sure we are focusing what the user sees.
* Only refocus if the focus is not already on an always-on-top view.
* Make sure we are focusing what the user sees. Only refocus if
* the focus is not already on an omnipresent or always-on-top view.
*
* TODO: Decouple always-on-top views from the omnipresent state.
* One option for that would be to create a new scene tree
* as child of every workspace tree and then reparent a-o-t
* windows to that one. Combined with adjusting the condition
* below that should take care of the issue.
*/
if (update_focus) {
struct view *view = server->active_view;
if (!view || !view_is_always_on_top(view)) {
if (!view || (!view->visible_on_all_workspaces
&& !view_is_always_on_top(view))) {
desktop_focus_topmost_view(server);
}
}