]> git.mdlowis.com Git - proto/labwc.git/commitdiff
workspaces: keep focus on omnipresent windows when switching workspaces
authorConsolatis <35009135+Consolatis@users.noreply.github.com>
Tue, 12 Nov 2024 00:23:37 +0000 (01:23 +0100)
committerConsolatis <35009135+Consolatis@users.noreply.github.com>
Tue, 12 Nov 2024 19:24:22 +0000 (20:24 +0100)
Fixes: #2329
src/workspaces.c

index 96e19635551ef557a42d510c1db9f75bd1b5441d..190549e6894f42161eeb7e488ff4f828ef5a6554 100644 (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);
                }
        }