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;