From: Michael Stapelberg Date: Fri, 13 Jun 2014 20:26:06 +0000 (+0200) Subject: Bugfix: ensure floating windows don’t drop out of fullscreen when restarting X-Git-Tag: 4.8~7 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=e69fcbb17bb3c88e2a2a916a16be1fcf4af9e8fc;p=i3%2Fi3 Bugfix: ensure floating windows don’t drop out of fullscreen when restarting fixes #1263 --- diff --git a/src/manage.c b/src/manage.c index de4f6fd7..dd103a9e 100644 --- a/src/manage.c +++ b/src/manage.c @@ -328,8 +328,11 @@ void manage_window(xcb_window_t window, xcb_get_window_attributes_cookie_t cooki fs = con_get_fullscreen_con(croot, CF_GLOBAL); if (xcb_reply_contains_atom(state_reply, A__NET_WM_STATE_FULLSCREEN)) { + /* If this window is already fullscreen (after restarting!), skip + * toggling fullscreen, that would drop it out of fullscreen mode. */ + if (fs != nc) + con_toggle_fullscreen(nc, CF_OUTPUT); fs = NULL; - con_toggle_fullscreen(nc, CF_OUTPUT); } bool set_focus = false; diff --git a/testcases/t/230-floating-fullscreen-restart.t b/testcases/t/230-floating-fullscreen-restart.t new file mode 100644 index 00000000..bf6afd33 --- /dev/null +++ b/testcases/t/230-floating-fullscreen-restart.t @@ -0,0 +1,46 @@ +#!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) +# +# Ensures floating windows don’t drop out of fullscreen mode when restarting. +# Ticket: #1263 +# Bug still in: 4.7.2-200-g570b572 +use i3test i3_autostart => 0; + +my $config = < '__i3-test-window'); + +cmd 'fullscreen'; + +my ($nodes, $focus) = get_ws($tmp); +is($nodes->{floating_nodes}->[0]->{nodes}->[0]->{fullscreen_mode}, 1, 'floating window in fullscreen mode'); + +cmd 'restart'; + +($nodes, $focus) = get_ws($tmp); +is($nodes->{floating_nodes}->[0]->{nodes}->[0]->{fullscreen_mode}, 1, 'floating window still in fullscreen mode'); + +exit_gracefully($pid); + +done_testing;