]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: Don’t lose focus on fullscreen windows when another window gets moved to...
authorMichael Stapelberg <michael@stapelberg.de>
Sat, 7 Jan 2012 18:18:36 +0000 (18:18 +0000)
committerMichael Stapelberg <michael@stapelberg.de>
Sat, 7 Jan 2012 18:18:36 +0000 (18:18 +0000)
Fixes: #606
src/con.c
testcases/t/156-fullscreen-focus.t

index 7b5cc499468e5594f463a726b3a4864ee832e281..bf22be846ebda1cfbb414e0fb60705874766d3a3 100644 (file)
--- a/src/con.c
+++ b/src/con.c
@@ -656,8 +656,10 @@ void con_move_to_workspace(Con *con, Con *workspace, bool fix_coordinates, bool
     con_fix_percent(next);
 
     /* 7: focus the con on the target workspace (the X focus is only updated by
-     * calling tree_render(), so for the "real" focus this is a no-op). */
-    con_focus(con_descend_focused(con));
+     * calling tree_render(), so for the "real" focus this is a no-op).
+     * We don’t focus when there is a fullscreen con on that workspace. */
+    if (con_get_fullscreen_con(workspace, CF_OUTPUT) == NULL)
+        con_focus(con_descend_focused(con));
 
     /* 8: when moving to a visible workspace on a different output, we keep the
      * con focused. Otherwise, we leave the focus on the current workspace as we
index a559b5a5134cb81c4238924167d7bc760797b9d3..3f08effd4bf152292e22510a9aa55147de509d97 100644 (file)
@@ -68,4 +68,30 @@ sync_with_i3($x);
 
 is($x->input_focus, $third->id, 'third window focused');
 
+################################################################################
+# Ensure that moving a window to a workspace which has a fullscreen window does
+# not focus it (otherwise the user cannot get out of fullscreen mode anymore).
+################################################################################
+
+$tmp = fresh_workspace;
+
+my $fullscreen_window = open_window;
+cmd 'fullscreen';
+
+my $nodes = get_ws_content($tmp);
+is(scalar @$nodes, 1, 'precisely one window');
+is($nodes->[0]->{focused}, 1, 'fullscreen window focused');
+my $old_id = $nodes->[0]->{id};
+
+$tmp2 = fresh_workspace;
+my $move_window = open_window;
+cmd "move workspace $tmp";
+
+cmd "workspace $tmp";
+
+$nodes = get_ws_content($tmp);
+is(scalar @$nodes, 2, 'precisely two windows');
+is($nodes->[0]->{id}, $old_id, 'id unchanged');
+is($nodes->[0]->{focused}, 1, 'fullscreen window focused');
+
 done_testing;