diff --git a/src/cmdparse.y b/src/cmdparse.y index 092bea2d..7ce5c2df 100644 --- a/src/cmdparse.y +++ b/src/cmdparse.y @@ -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($2); - tree_render(); } ; diff --git a/testcases/t/111-goto.t b/testcases/t/111-goto.t index 903fa0c4..5cc20481 100644 --- a/testcases/t/111-goto.t +++ b/testcases/t/111-goto.t @@ -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 diff --git a/testcases/t/173-get-marks.t b/testcases/t/173-get-marks.t index e74c233a..007d5a6d 100644 --- a/testcases/t/173-get-marks.t +++ b/testcases/t/173-get-marks.t @@ -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;