]> git.sur5r.net Git - i3/i3/commitdiff
Respect dont_warp flag when moving containers (#2867)
authorMichael Stapelberg <stapelberg@users.noreply.github.com>
Sun, 20 Aug 2017 15:07:23 +0000 (17:07 +0200)
committerGitHub <noreply@github.com>
Sun, 20 Aug 2017 15:07:23 +0000 (17:07 +0200)
fixes #2681
fixes #2592

src/con.c
testcases/t/534-dont-warp.t [new file with mode: 0644]

index 136ce5d2a8f7a007d29a4e46f8287bdb80128dc8..cf923ec83ed6d4b3654d0f2502ab892bfe6f65c0 100644 (file)
--- a/src/con.c
+++ b/src/con.c
@@ -1105,8 +1105,13 @@ static bool _con_move_to_con(Con *con, Con *target, bool behind_focused, bool fi
     /* Descend focus stack in case focus_next is a workspace which can
      * occur if we move to the same workspace.  Also show current workspace
      * to ensure it is focused. */
-    if (!ignore_focus)
+    if (!ignore_focus) {
         workspace_show(current_ws);
+        if (dont_warp) {
+            DLOG("x_set_warp_to(NULL) because dont_warp is set\n");
+            x_set_warp_to(NULL);
+        }
+    }
 
     /* Set focus only if con was on current workspace before moving.
      * Otherwise we would give focus to some window on different workspace. */
diff --git a/testcases/t/534-dont-warp.t b/testcases/t/534-dont-warp.t
new file mode 100644 (file)
index 0000000..8f84f9a
--- /dev/null
@@ -0,0 +1,61 @@
+#!perl
+# vim:ts=4:sw=4:expandtab
+#
+# Please read the following documents before working on tests:
+# • http://build.i3wm.org/docs/testsuite.html
+#   (or docs/testsuite)
+#
+# • http://build.i3wm.org/docs/lib-i3test.html
+#   (alternatively: perldoc ./testcases/lib/i3test.pm)
+#
+# • http://build.i3wm.org/docs/ipc.html
+#   (or docs/ipc)
+#
+# • http://onyxneon.com/books/modern_perl/modern_perl_a4.pdf
+#   (unless you are already familiar with Perl)
+#
+# Verifies i3 doesn’t warp when a new floating window is opened under the cursor
+# over an unfocused workspace.
+# Ticket: #2681
+# Bug still in: 4.13-210-g80c23afa
+use i3test i3_autostart => 0;
+
+# Ensure the pointer is at (0, 0) so that we really start on the first
+# (the left) workspace.
+$x->root->warp_pointer(0, 0);
+
+my $config = <<EOT;
+# i3 config file (v4)
+font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
+
+fake-outputs 1024x768+0+0,1024x768+1024+0
+
+focus_follows_mouse no
+EOT
+
+my $pid = launch_with_config($config);
+
+cmd 'focus output fake-0';
+my $s0_ws = fresh_workspace;
+
+cmd 'focus output fake-1';
+my $s1_ws = fresh_workspace;
+open_window;
+
+# Move mouse to fake-0
+sync_with_i3;
+$x->root->warp_pointer(500, 0);
+sync_with_i3;
+
+my $dropdown = open_floating_window;
+$dropdown->rect(X11::XCB::Rect->new(x => 1, y => 1, width => 100, height => 100));
+sync_with_i3;
+
+my $cookie = $x->query_pointer($dropdown->{id});
+my $reply = $x->query_pointer_reply($cookie->{sequence});
+cmp_ok($reply->{root_x}, '<', 1024, 'pointer still on fake-0');
+cmp_ok($reply->{root_y}, '<', 768, 'pointer still on fake-0');
+
+exit_gracefully($pid);
+
+done_testing;