]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: Fix setting the same mark repeatedly on different windows (+test)
authorMichael Stapelberg <michael@stapelberg.de>
Sat, 17 Dec 2011 14:19:44 +0000 (14:19 +0000)
committerMichael Stapelberg <michael@stapelberg.de>
Sat, 17 Dec 2011 14:22:23 +0000 (14:22 +0000)
Fixes: #582
src/cmdparse.y
testcases/t/111-goto.t
testcases/t/173-get-marks.t

index 092bea2d8ee6f5a9626d8f7ca5c0141c40ff7f30..7ce5c2dfcdc581bff4defa299148ba9d15144e37 100644 (file)
@@ -908,6 +908,14 @@ layout_mode:
 mark:
     TOK_MARK STR
     {
+        printf("Clearing all windows which have that mark first\n");
+
+        Con *con;
+        TAILQ_FOREACH(con, &all_cons, all_cons) {
+            if (con->mark && strcmp(con->mark, $2) == 0)
+                FREE(con->mark);
+        }
+
         printf("marking window with str %s\n", $2);
         owindow *current;
 
@@ -915,11 +923,9 @@ mark:
 
         TAILQ_FOREACH(current, &owindows, owindows) {
             printf("matching: %p / %s\n", current->con, current->con->name);
-            current->con->mark = sstrdup($2);
+            current->con->mark = $2;
         }
 
-        free($<string>2);
-
         tree_render();
     }
     ;
index 903fa0c400b8c3c8b6dea016cff6e477570dae9c..5cc20481d02a68b8ed9735c3d97a23e05a7fe6a8 100644 (file)
@@ -61,6 +61,24 @@ is($focus, $top->id, "Top window focused");
 $focus = focus_after(qq|[con_mark="$random_mark" con_mark="$random_mark"] focus|);
 is($focus, $mid->id, "goto worked");
 
+#####################################################################
+# Set the same mark multiple times and see if focus works correctly
+#####################################################################
+
+$focus = focus_after('focus left');
+is($focus, $top->id, "Top window focused");
+
+cmd "mark $random_mark";
+
+$focus = focus_after(qq|[con_mark="$random_mark"] focus|);
+is($focus, $top->id, "focus unchanged after goto");
+
+$focus = focus_after('focus right');
+is($focus, $mid->id, "mid window focused");
+
+$focus = focus_after(qq|[con_mark="$random_mark"] focus|);
+is($focus, $top->id, "goto worked");
+
 #####################################################################
 # Check whether the focus command will switch to a different
 # workspace if necessary
index e74c233a6a3560858909c9631f3164ff35780b0b..007d5a6d507ee1645873900eed41434a97b8fb90 100644 (file)
@@ -35,16 +35,4 @@ cmd 'kill';
 
 cmp_deeply(get_marks(), [ ], 'mark gone');
 
-##############################################################
-# 4: check that duplicate marks are included twice in the get_marks reply
-##############################################################
-
-cmd 'open';
-cmd 'mark bar';
-
-cmd 'open';
-cmd 'mark bar';
-
-cmp_deeply(get_marks(), [ 'bar', 'bar' ], 'duplicate mark found twice');
-
 done_testing;