git.lucas.co / cce-compositor
Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git

commitb363e50bdb99fd3dcc38c8ae57a2dcd4e30539af
parentace609de0d
authorIsaac Freund <[email protected]>
date2020-04-02 14:02
Focus next view if focused view is hidden

 src/root.zig | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/src/root.zig b/src/root.zig
index 34cd43d..de2bba0 100644
--- a/src/root.zig
+++ b/src/root.zig
@@ -314,7 +314,10 @@ pub const Root = struct {
 
         // If there were pending focused tags, make them the current focus
         if (self.pending_focused_tags) |tags| {
-            Log.Debug.log("changing current focus: {b:0>10} to {b:0>10}", .{ self.current_focused_tags, tags });
+            Log.Debug.log(
+                "changing current focus: {b:0>10} to {b:0>10}",
+                .{ self.current_focused_tags, tags },
+            );
             self.current_focused_tags = tags;
             self.pending_focused_tags = null;
         }
@@ -330,9 +333,20 @@ pub const Root = struct {
                 view.pending_box = null;
             }
 
+            // Apply possible pending tags
             if (view.pending_tags) |tags| {
                 view.current_tags = tags;
                 view.pending_tags = null;
+
+                // If the pending tags caused the currently focused view to no
+                // longer be visible, focus the next view.
+                if (self.focused_view) |focus| {
+                    if (focus == view and
+                        view.current_tags & self.current_focused_tags == 0)
+                    {
+                        self.focusNextView();
+                    }
+                }
             }
 
             view.dropStashedBuffer();