From fc886315342b3a2292ad0c08394b6bb452663bb1 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Fri, 8 Aug 2014 20:15:59 +0200 Subject: [PATCH] =?utf8?q?Bugfix:=20don=E2=80=99t=20set=20focus=20in=20con?= =?utf8?q?=5Fset=5Flayout()=20on=20invisible=20workspaces?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit fixes #1338 --- src/con.c | 6 ++++ testcases/t/237-regress-assign-focus.t | 42 ++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 testcases/t/237-regress-assign-focus.t 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 = <