]> git.sur5r.net Git - i3/i3/commitdiff
Implement auto-destroying of empty workspaces
authorMichael Stapelberg <michael+x200@stapelberg.de>
Wed, 4 Mar 2009 21:52:36 +0000 (22:52 +0100)
committerMichael Stapelberg <michael+x200@stapelberg.de>
Wed, 4 Mar 2009 21:52:36 +0000 (22:52 +0100)
src/commands.c

index 394bc91e7ea93cdb5b11a50b3533cb9934f6e31a..948e8710a4550548c718d1d8b89e48a1d973c0e0 100644 (file)
@@ -384,10 +384,17 @@ static void show_workspace(xcb_connection_t *conn, int workspace) {
         //xcb_grab_server(conn);
 
         /* Unmap all clients of the current workspace */
+        int unmapped_clients = 0;
         for (int cols = 0; cols < c_ws->cols; cols++)
                 for (int rows = 0; rows < c_ws->rows; rows++)
-                        CIRCLEQ_FOREACH(client, &(c_ws->table[cols][rows]->clients), clients)
+                        CIRCLEQ_FOREACH(client, &(c_ws->table[cols][rows]->clients), clients) {
                                 xcb_unmap_window(conn, client->frame);
+                                unmapped_clients++;
+                        }
+
+        /* If we did not unmap any clients, the workspace is empty and we can destroy it */
+        if (unmapped_clients == 0)
+                c_ws->screen = NULL;
 
         /* Unmap the stack windows on the current workspace, if any */
         struct Stack_Window *stack_win;