Restrict "move to workspace" commands in fullscreen.
This commit is contained in:
parent
4452bfb942
commit
fffc53c246
@ -576,6 +576,12 @@ void con_move_to_workspace(Con *con, Con *workspace, bool fix_coordinates, bool
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Prevent moving if this would violate the fullscreen focus restrictions. */
|
||||||
|
if (!con_fullscreen_permits_focusing(workspace)) {
|
||||||
|
LOG("Cannot move out of a fullscreen container");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (con_is_floating(con)) {
|
if (con_is_floating(con)) {
|
||||||
DLOG("Using FLOATINGCON instead\n");
|
DLOG("Using FLOATINGCON instead\n");
|
||||||
con = con->parent;
|
con = con->parent;
|
||||||
|
@ -237,22 +237,59 @@ is($x->input_focus, $right22->id, 'focus did not leave parent container (4)');
|
|||||||
# Ensure that moving in a direction doesn't violate the focus restrictions.
|
# Ensure that moving in a direction doesn't violate the focus restrictions.
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
sub verify_move_prevented {
|
sub verify_move {
|
||||||
|
my $num = shift;
|
||||||
my $msg = shift;
|
my $msg = shift;
|
||||||
my $nodes = get_ws_content($tmp2);
|
my $nodes = get_ws_content($tmp2);
|
||||||
my $split = $nodes->[1];
|
my $split = $nodes->[1];
|
||||||
my $fs = $split->{nodes}->[1];
|
my $fs = $split->{nodes}->[1];
|
||||||
is(scalar @{$fs->{nodes}}, 2, $msg);
|
is(scalar @{$fs->{nodes}}, $num, $msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd 'move left';
|
cmd 'move left';
|
||||||
verify_move_prevented('prevented move left');
|
verify_move(2, 'prevented move left');
|
||||||
cmd 'move right';
|
cmd 'move right';
|
||||||
verify_move_prevented('prevented move right');
|
verify_move(2, 'prevented move right');
|
||||||
cmd 'move down';
|
cmd 'move down';
|
||||||
verify_move_prevented('prevented move down');
|
verify_move(2, 'prevented move down');
|
||||||
cmd 'move up';
|
cmd 'move up';
|
||||||
cmd 'move up';
|
cmd 'move up';
|
||||||
verify_move_prevented('prevented move up');
|
verify_move(2, 'prevented move up');
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Moving to a different workspace is allowed with per-output fullscreen
|
||||||
|
# containers.
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
cmd "move to workspace $tmp";
|
||||||
|
verify_move(1, 'did not prevent move to workspace by name');
|
||||||
|
|
||||||
|
cmd "workspace $tmp";
|
||||||
|
cmd "move to workspace $tmp2";
|
||||||
|
cmd "workspace $tmp2";
|
||||||
|
|
||||||
|
cmd "move to workspace prev";
|
||||||
|
verify_move(1, 'did not prevent move to workspace by position');
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Ensure that is not allowed with global fullscreen containers.
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
cmd "workspace $tmp";
|
||||||
|
cmd "move to workspace $tmp2";
|
||||||
|
cmd "workspace $tmp2";
|
||||||
|
|
||||||
|
cmd 'focus parent';
|
||||||
|
cmd 'fullscreen';
|
||||||
|
cmd 'fullscreen global';
|
||||||
|
cmd 'focus child';
|
||||||
|
|
||||||
|
cmd "move to workspace $tmp";
|
||||||
|
verify_move(2, 'prevented move to workspace by name');
|
||||||
|
|
||||||
|
cmd "move to workspace prev";
|
||||||
|
verify_move(2, 'prevented move to workspace by position');
|
||||||
|
|
||||||
|
# TODO: Tests for "move to output" and "move workspace to output".
|
||||||
|
|
||||||
done_testing;
|
done_testing;
|
||||||
|
Loading…
Reference in New Issue
Block a user