]> git.sur5r.net Git - i3/i3/commitdiff
Don't call con_fullscreen_permits_focusing with ignore_focus 3261/head
authorOrestis Floros <orestisf1993@gmail.com>
Sun, 22 Apr 2018 00:26:51 +0000 (03:26 +0300)
committerOrestis Floros <orestisf1993@gmail.com>
Sun, 22 Apr 2018 13:56:36 +0000 (16:56 +0300)
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
testcases/t/291-swap.t

index b7168d417587583eb0552c6f0eb4dd6ba20fc632..f20f7c359c30b234266e60b65548d70c8561e595 100644 (file)
--- 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;
     }
index 3b61fdab36e8ba35a914f34fdb5a71138f011abc..da2d564d0df069d4d054f85732a7e58ed8c9d604 100644 (file)
@@ -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.