Merge pull request #3231 from orestisf1993/target-is-a-workspace

Fix crash when moving container to marked workspace
This commit is contained in:
Ingo Bürk 2018-04-07 21:13:41 +02:00 committed by GitHub
commit b688164235
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 45 additions and 1 deletions

View File

@ -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;

View File

@ -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;