diff --git a/src/commands.c b/src/commands.c index 46c75c43..ea0b9032 100644 --- a/src/commands.c +++ b/src/commands.c @@ -1061,10 +1061,11 @@ void cmd_mark(I3_CMD, char *mark, char *toggle) { TAILQ_FOREACH(con, &all_cons, all_cons) { /* Skip matched windows, we took care of them already. */ bool matched = false; - TAILQ_FOREACH(current, &owindows, owindows) - if (current->con == con) { - matched = true; - break; + TAILQ_FOREACH(current, &owindows, owindows) { + if (current->con == con) { + matched = true; + break; + } } if (matched) continue; diff --git a/testcases/t/210-mark-unmark.t b/testcases/t/210-mark-unmark.t index f285338b..0083547f 100644 --- a/testcases/t/210-mark-unmark.t +++ b/testcases/t/210-mark-unmark.t @@ -16,11 +16,19 @@ # # checks if mark and unmark work correctly use i3test; +use List::Util qw(first); sub get_marks { return i3(get_socket_path())->get_marks->recv; } +sub get_mark_for_window_on_workspace { + my ($ws, $con) = @_; + + my $current = first { $_->{window} == $con->{id} } @{get_ws_content($ws)}; + return $current->{mark}; +} + ############################################################## # 1: check that there are no marks set yet ############################################################## @@ -76,4 +84,61 @@ cmd 'unmark'; is_deeply(get_marks(), [], 'all marks removed'); +############################################################## +# 4: mark a con, use same mark to mark another con, +# check that only the latter is marked +############################################################## + +my $first = open_window; +my $second = open_window; + +cmd 'mark important'; +cmd 'focus left'; +cmd 'mark important'; + +is(get_mark_for_window_on_workspace($tmp, $first), 'important', 'first container now has the mark'); +ok(!get_mark_for_window_on_workspace($tmp, $second), 'second container lost the mark'); + +############################################################## +# 5: mark a con, toggle the mark, check that the mark is gone +############################################################## + +my $con = open_window; +cmd 'mark important'; +cmd 'mark --toggle important'; +ok(!get_mark_for_window_on_workspace($tmp, $con), 'container no longer has the mark'); + +############################################################## +# 6: toggle a mark on an unmarked con, check it is marked +############################################################## + +my $con = open_window; +cmd 'mark --toggle important'; +is(get_mark_for_window_on_workspace($tmp, $con), 'important', 'container now has the mark'); + +############################################################## +# 7: mark a con, toggle a different mark, check it is marked +# with the new mark +############################################################## + +my $con = open_window; +cmd 'mark boring'; +cmd 'mark --toggle important'; +is(get_mark_for_window_on_workspace($tmp, $con), 'important', 'container has the most recent mark'); + +############################################################## +# 8: mark a con, toggle the mark on another con, +# check only the latter has the mark +############################################################## + +my $first = open_window; +my $second = open_window; + +cmd 'mark important'; +cmd 'focus left'; +cmd 'mark --toggle important'; + +is(get_mark_for_window_on_workspace($tmp, $first), 'important', 'left container has the mark now'); +ok(!get_mark_for_window_on_workspace($tmp, $second), 'second containr no longer has the mark'); + done_testing;