]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: Correctly recognize duplicate workspace assignments (Thanks Moredread)
authorMichael Stapelberg <michael@stapelberg.de>
Fri, 26 Aug 2011 10:35:42 +0000 (12:35 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Fri, 26 Aug 2011 10:35:42 +0000 (12:35 +0200)
Example of a faulty config:

    workspace 5 VGA1
    workspace 5 LVDS1

Fixes #498, #499

src/cfgparse.y

index a80e25afac808de6e073e97cc1c7b8ccb0d0ebd8..c0bf92af556fee1b364373af01d7830321456e1f 100644 (file)
@@ -941,10 +941,25 @@ workspace:
             }
 
             DLOG("Should assign workspace %s to output %s\n", ws_name, $4);
-            struct Workspace_Assignment *assignment = scalloc(sizeof(struct Workspace_Assignment));
-            assignment->name = ws_name;
-            assignment->output = $4;
-            TAILQ_INSERT_TAIL(&ws_assignments, assignment, ws_assignments);
+            /* Check for earlier assignments of the same workspace so that we
+             * don’t have assignments of a single workspace to different
+             * outputs */
+            struct Workspace_Assignment *assignment;
+            bool duplicate = false;
+            TAILQ_FOREACH(assignment, &ws_assignments, ws_assignments) {
+                if (strcasecmp(assignment->name, ws_name) == 0) {
+                    ELOG("You have a duplicate workspace assignment for workspace \"%s\"\n",
+                         ws_name);
+                    assignment->output = $4;
+                    duplicate = true;
+                }
+            }
+            if (!duplicate) {
+                assignment = scalloc(sizeof(struct Workspace_Assignment));
+                assignment->name = ws_name;
+                assignment->output = $4;
+                TAILQ_INSERT_TAIL(&ws_assignments, assignment, ws_assignments);
+            }
         }
     }
     | TOKWORKSPACE NUMBER workspace_name