]> git.sur5r.net Git - i3/i3/commitdiff
Merge branch 'master' into next
authorMichael Stapelberg <michael@stapelberg.de>
Sat, 17 Dec 2011 14:22:57 +0000 (14:22 +0000)
committerMichael Stapelberg <michael@stapelberg.de>
Sat, 17 Dec 2011 14:22:57 +0000 (14:22 +0000)
Conflicts:
testcases/t/173-get-marks.t

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 dd60d9cf200d33964b8471cd306d2e43be3410ae..078ab92c071ff8b6a55b25320262f7383997a936 100644 (file)
@@ -58,6 +58,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 75b6e7a8f0594c34e593cdbb73be277f4053b8c7..e8964d307b7a8d3a7e57d208558e885d2caebf26 100644 (file)
@@ -35,16 +35,4 @@ cmd 'kill';
 
 is_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';
-
-is_deeply(get_marks(), [ 'bar', 'bar' ], 'duplicate mark found twice');
-
 done_testing;