diff --git a/src/tree.c b/src/tree.c index b54f77b1..bbd5e6a4 100644 --- a/src/tree.c +++ b/src/tree.c @@ -582,6 +582,13 @@ static bool _tree_next(Con *con, char way, orientation_t orientation, bool wrap) return true; Con *focus = con_descend_direction(workspace, direction); + + /* special case: if there was no tiling con to focus and the workspace + * has a floating con in the focus stack, focus the top of the focus + * stack (which may be floating) */ + if (focus == workspace) + focus = con_descend_focused(workspace); + if (focus) { con_focus(focus); x_set_warp_to(&(focus->rect)); diff --git a/testcases/t/520-regress-focus-direction-floating.t b/testcases/t/520-regress-focus-direction-floating.t new file mode 100644 index 00000000..ccef49e7 --- /dev/null +++ b/testcases/t/520-regress-focus-direction-floating.t @@ -0,0 +1,48 @@ +#!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) +# +# Ensure that `focus [direction]` will focus an existing floating con when no +# tiling con exists on the output in [direction] when focusing across outputs +# Bug still in: 4.7.2-204-g893dbae +use i3test i3_autostart => 0; + +my $config = <input_focus, $win->id, + 'Focusing across outputs with `focus [direction]` should focus an existing floating con when no tiling con exists on the output in [direction].'); + +exit_gracefully($pid); + +done_testing;