From b5f887287a9d350910305bdc06f32218c86dd2ef Mon Sep 17 00:00:00 2001 From: Orestis Floros Date: Sun, 22 Apr 2018 03:26:51 +0300 Subject: [PATCH] Don't call con_fullscreen_permits_focusing with ignore_focus 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. --- src/con.c | 2 +- testcases/t/291-swap.t | 31 ++++++++++++++++++------------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/con.c b/src/con.c index b7168d41..f20f7c35 100644 --- a/src/con.c +++ b/src/con.c @@ -1097,7 +1097,7 @@ static bool _con_move_to_con(Con *con, Con *target, bool behind_focused, bool fi /* 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; } diff --git a/testcases/t/291-swap.t b/testcases/t/291-swap.t index 3b61fdab..da2d564d 100644 --- a/testcases/t/291-swap.t +++ b/testcases/t/291-swap.t @@ -372,26 +372,31 @@ for my $fullscreen (@fullscreen_permutations){ # +---+---+ Layout: H2[ B, F ] # | B | F | Focus Stacks: # +---+---+ H2: F, B +# +# See issue: #3259 ############################################################################### -$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'); -kill_all_windows; + kill_all_windows; +} ############################################################################### # 1. A container cannot be swapped with its parent. -- 2.39.5