From: Orestis Floros Date: Sat, 7 Apr 2018 18:43:29 +0000 (+0300) Subject: Fix crash when moving container to marked workspace X-Git-Tag: 4.16~101^2 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=refs%2Fpull%2F3231%2Fhead;p=i3%2Fi3 Fix crash when moving container to marked workspace Was a small typo. This also has the (positive) side-effect of allowing to move all the content of a marked workspace next to the target container, see added tests. --- diff --git a/src/con.c b/src/con.c index 2180ad88..deb65558 100644 --- a/src/con.c +++ b/src/con.c @@ -1305,7 +1305,7 @@ bool con_move_to_mark(Con *con, const char *mark) { return true; } - if (con->type == CT_WORKSPACE) { + if (target->type == CT_WORKSPACE) { DLOG("target container is a workspace, simply moving the container there.\n"); con_move_to_workspace(con, target, true, false, false); return true; diff --git a/testcases/t/243-move-to-mark.t b/testcases/t/243-move-to-mark.t index 25d13333..c6b67f35 100644 --- a/testcases/t/243-move-to-mark.t +++ b/testcases/t/243-move-to-mark.t @@ -336,6 +336,50 @@ sync_with_i3; does_i3_live; +############################################################################### +# Given 'S' and 'M' where 'M' is a workspace and 'S' is on a different +# workspace, then 'S' ends up as a tiling container on 'M'. +############################################################################### + +fresh_workspace; +$S = open_window; +$target_ws = fresh_workspace; +$M = $target_ws; +cmd 'mark target'; + +cmd '[id="' . $S->{id} . '"] move container to mark target'; +sync_with_i3; + +does_i3_live; + +($nodes, $focus) = get_ws_content($target_ws); +is(@{$nodes}, 1, 'tiling container moved to the target workspace'); + +############################################################################### +# Given 'S' and 'M' where 'S' is a workspace and 'M' is a container on a +# different workspace, then all the contents of workspace 'S' end up in 'M's +# workspace. +############################################################################### + +$S = fresh_workspace; +cmd 'mark S'; +open_window; +open_window; +cmd 'splitv'; +open_window; +open_floating_window; +$target_ws = fresh_workspace; +$M = open_window; +cmd 'mark target'; + +cmd '[con_mark=S] move container to mark target'; +sync_with_i3; + +($nodes, $focus) = get_ws_content($target_ws); +is(@{$nodes}, 2, 'there is a window and a container with the contents of the original workspace'); +is($nodes->[0]->{window}, $M->{id}, 'M remains the first window'); +is(@{get_ws($target_ws)->{floating_nodes}}, 1, 'target workspace has the floating container'); + ############################################################################### done_testing;