When we don't modify the focus we aren't risking giving focus to a
container behind the current fullscreen one.
_con_move_to_con can with ignore_focus is called through the swap
command or through con_move_to_workspace for floating containers. This
change shouldn't break the expectations of the callers there.
Fixes issue #3259.
/* Prevent moving if this would violate the fullscreen focus restrictions. */
Con *target_ws = con_get_workspace(target);
/* Prevent moving if this would violate the fullscreen focus restrictions. */
Con *target_ws = con_get_workspace(target);
- if (!con_fullscreen_permits_focusing(target_ws)) {
+ if (!ignore_focus && !con_fullscreen_permits_focusing(target_ws)) {
LOG("Cannot move out of a fullscreen container.\n");
return false;
}
LOG("Cannot move out of a fullscreen container.\n");
return false;
}
# +---+---+ Layout: H2[ B, F ]
# | B | F | Focus Stacks:
# +---+---+ H2: F, B
# +---+---+ Layout: H2[ B, F ]
# | B | F | Focus Stacks:
# +---+---+ H2: F, B
###############################################################################
###############################################################################
-$ws1 = fresh_workspace;
-$A = open_window(wm_class => 'mark_A');
+for my $fullscreen (0..1){
+ $ws1 = fresh_workspace;
+ $A = open_window(wm_class => 'mark_A');
-$ws2 = fresh_workspace;
-$B = open_window(wm_class => 'mark_B');
-open_window;
-$expected_focus = get_focused($ws2);
+ $ws2 = fresh_workspace;
+ $B = open_window(wm_class => 'mark_B');
+ open_window;
+ cmd 'fullscreen enable' if $fullscreen;
+ $expected_focus = get_focused($ws2);
-cmd '[con_mark=B] swap container with mark A';
+ cmd '[con_mark=B] swap container with mark A';
-$nodes = get_ws_content($ws1);
-is($nodes->[0]->{window}, $B->{id}, 'B is on the first workspace');
+ $nodes = get_ws_content($ws1);
+ is($nodes->[0]->{window}, $B->{id}, 'B is on the first workspace');
-$nodes = get_ws_content($ws2);
-is($nodes->[0]->{window}, $A->{id}, 'A is on the left of the second workspace');
-is(get_focused($ws2), $expected_focus, 'F is still focused');
+ $nodes = get_ws_content($ws2);
+ is($nodes->[0]->{window}, $A->{id}, 'A is on the left of the second workspace');
+ is(get_focused($ws2), $expected_focus, 'F is still focused');
###############################################################################
# 1. A container cannot be swapped with its parent.
###############################################################################
# 1. A container cannot be swapped with its parent.