From: Michael Stapelberg Date: Fri, 8 Aug 2014 18:15:59 +0000 (+0200) Subject: Bugfix: don’t set focus in con_set_layout() on invisible workspaces X-Git-Tag: 4.9~59^2^2 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=fc886315342b3a2292ad0c08394b6bb452663bb1;p=i3%2Fi3 Bugfix: don’t set focus in con_set_layout() on invisible workspaces fixes #1338 --- diff --git a/src/con.c b/src/con.c index 30321ef0..42eb74f7 100644 --- a/src/con.c +++ b/src/con.c @@ -1263,9 +1263,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 = <