From 31acb91d906cecb94d791609917530545118eb3b Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Sat, 26 Nov 2011 22:17:34 +0000 Subject: [PATCH] Bugfix: Fix crash on '[class="i3bar"] focus' (+test) (Thanks f8l) Fixes #575 --- src/cmdparse.y | 4 ++++ testcases/t/182-regress-focus-dock.t | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 testcases/t/182-regress-focus-dock.t diff --git a/src/cmdparse.y b/src/cmdparse.y index bf181c28..d319bb3f 100644 --- a/src/cmdparse.y +++ b/src/cmdparse.y @@ -450,6 +450,10 @@ focus: int count = 0; TAILQ_FOREACH(current, &owindows, owindows) { Con *ws = con_get_workspace(current->con); + /* If no workspace could be found, this was a dock window. + * Just skip it, you cannot focus dock windows. */ + if (!ws) + continue; /* If the container is not on the current workspace, * workspace_show() will switch to a different workspace and (if diff --git a/testcases/t/182-regress-focus-dock.t b/testcases/t/182-regress-focus-dock.t new file mode 100644 index 00000000..6212a9ea --- /dev/null +++ b/testcases/t/182-regress-focus-dock.t @@ -0,0 +1,21 @@ +#!perl +# vim:ts=4:sw=4:expandtab +# +# Regression test: Focusing a dock window should just do nothing, not crash i3. +# See ticket http://bugs.i3wm.org/575 +# Wrong behaviour manifested itself up to (including) commit +# 340592a532b5259c3a3f575de5a9639fad4d1459 +# +use i3test; + +fresh_workspace; + +my $window = open_window( + window_type => $x->atom(name => '_NET_WM_WINDOW_TYPE_DOCK'), +); + +cmd '[title="' . $window->name . '"] focus'; + +does_i3_live; + +done_testing;