diff --git a/src/con.c b/src/con.c index 136ce5d2..cf923ec8 100644 --- 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 index 00000000..8f84f9ae --- /dev/null +++ b/testcases/t/534-dont-warp.t @@ -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 = <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;