diff --git a/src/con.c b/src/con.c index 282c389f..6c7b2d96 100644 --- a/src/con.c +++ b/src/con.c @@ -1245,9 +1245,15 @@ void con_set_layout(Con *con, layout_t layout) { new->layout = layout; new->last_split_layout = con->last_split_layout; + /* Save the container that was focused before we move containers + * around, but only if the container is visible (otherwise focus + * will be restored properly automatically when switching). */ Con *old_focused = TAILQ_FIRST(&(con->focus_head)); if (old_focused == TAILQ_END(&(con->focus_head))) old_focused = NULL; + if (old_focused != NULL && + !workspace_is_visible(con_get_workspace(old_focused))) + old_focused = NULL; /* 3: move the existing cons of this workspace below the new con */ DLOG("Moving cons\n"); diff --git a/testcases/t/237-regress-assign-focus.t b/testcases/t/237-regress-assign-focus.t new file mode 100644 index 00000000..e9cb537e --- /dev/null +++ b/testcases/t/237-regress-assign-focus.t @@ -0,0 +1,42 @@ +#!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 that using layout tabbed followed by focus (on a window that is +# assigned to an invisible workspace) will not crash i3. +# Ticket: #1338 +# Bug still in: 4.8-91-g294d52e +use i3test i3_autostart => 0; + +my $config = <