]> git.sur5r.net Git - i3/i3/commitdiff
fix a problem with workspace switching when the focus got to the target workspace
authorMichael Stapelberg <michael@stapelberg.de>
Fri, 7 Jan 2011 23:38:10 +0000 (00:38 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Fri, 7 Jan 2011 23:38:10 +0000 (00:38 +0100)
This could explain some strange effects where workspaces would just stay blank.
We’ll see.

src/workspace.c

index b5095d118341080a1a646873fd62663d847bdb7c..0694b977a442d72e2e525ca826515ecff89995c2 100644 (file)
@@ -201,12 +201,21 @@ static void workspace_reassign_sticky(Con *con) {
 void workspace_show(const char *num) {
     Con *workspace, *current, *old;
 
-    old = con_get_workspace(focused);
-
     workspace = workspace_get(num);
+
+    /* disable fullscreen for the other workspaces and get the workspace we are
+     * currently on. */
+    TAILQ_FOREACH(current, &(workspace->parent->nodes_head), nodes) {
+        if (current->fullscreen_mode == CF_OUTPUT)
+            old = current;
+        current->fullscreen_mode = CF_NONE;
+    }
+
+    /* enable fullscreen for the target workspace. If it happens to be the
+     * same one we are currently on anyways, we can stop here. */
+    workspace->fullscreen_mode = CF_OUTPUT;
     if (workspace == old)
         return;
-    workspace->fullscreen_mode = CF_OUTPUT;
     /* disable fullscreen */
     TAILQ_FOREACH(current, &(workspace->parent->nodes_head), nodes)
         current->fullscreen_mode = CF_NONE;