Skip to content
This repository has been archived by the owner on Apr 18, 2023. It is now read-only.

Commit

Permalink
Merge pull request #3231 from orestisf1993/target-is-a-workspace
Browse files Browse the repository at this point in the history
Fix crash when moving container to marked workspace
  • Loading branch information
Airblader committed Apr 7, 2018
2 parents a92acad + 626af81 commit b688164
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/con.c
Expand Up @@ -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;
Expand Down
44 changes: 44 additions & 0 deletions testcases/t/243-move-to-mark.t
Expand Up @@ -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;

0 comments on commit b688164

Please sign in to comment.