Bugfix: Fix setting the same mark repeatedly on different windows (+test)

Fixes: #582
This commit is contained in:
Michael Stapelberg 2011-12-17 14:19:44 +00:00
parent 49947317ba
commit b46ab649f5
3 changed files with 27 additions and 15 deletions

View File

@ -908,6 +908,14 @@ layout_mode:
mark: mark:
TOK_MARK STR 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); printf("marking window with str %s\n", $2);
owindow *current; owindow *current;
@ -915,11 +923,9 @@ mark:
TAILQ_FOREACH(current, &owindows, owindows) { TAILQ_FOREACH(current, &owindows, owindows) {
printf("matching: %p / %s\n", current->con, current->con->name); printf("matching: %p / %s\n", current->con, current->con->name);
current->con->mark = sstrdup($2); current->con->mark = $2;
} }
free($<string>2);
tree_render(); tree_render();
} }
; ;

View 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|); $focus = focus_after(qq|[con_mark="$random_mark" con_mark="$random_mark"] focus|);
is($focus, $mid->id, "goto worked"); 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 # Check whether the focus command will switch to a different
# workspace if necessary # workspace if necessary

View File

@ -35,16 +35,4 @@ cmd 'kill';
cmp_deeply(get_marks(), [ ], 'mark gone'); 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; done_testing;