diff --git a/debian/changelog b/debian/changelog index 34991107..e9f9d43d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,26 @@ i3-wm (4.1.1-0) unstable; urgency=low * NOT YET RELEASED + * ipc: set CLOEXEC on client file descriptors + * Fix prototype in include/xcursor.h + * Bugfix: Skip dock clients when handling FocusIn events + * Bugfix: Fix fullscreen with floating windows + * Bugfix: Fix startup when RandR is not present + * Bugfix: Retain window position and size when changing floating border + * Bugfix: Disallow focusing dock clients via criteria + * Bugfix: Don’t create a workspace named 'back_and_forth' on startup + * Bugfix: Fix wrong focus in complex tabbed/stacked layouts + * Bugfix: Fix resizing for (e.g.) v-split containers in h-split containers + * Bugfix: Fix 'resize' command in nested containers + * Bugfix: Don’t set the _NET_WM_WORKAREA hint at all + * Bugfix: Skip leading whitespace in variable assignments + * Bugfix: Make resizing of tiling windows with floating_modifier use absolute + coordinates + * Bugfix: Make resizing work when pressing floating_modifier + right mouse + button on window decorations + * Bugfix: Fix setting the same mark repeatedly on different windows - -- Michael Stapelberg Fri, 11 Nov 2011 23:00:04 +0000 + -- Michael Stapelberg Sat, 17 Dec 2011 14:29:59 +0000 i3-wm (4.1-1) unstable; urgency=low diff --git a/src/cmdparse.y b/src/cmdparse.y index 7ce5c2df..d01ca232 100644 --- a/src/cmdparse.y +++ b/src/cmdparse.y @@ -436,6 +436,13 @@ restart: focus: TOK_FOCUS { + if (focused && + focused->type != CT_WORKSPACE && + focused->fullscreen_mode != CF_NONE) { + LOG("Cannot change focus while in fullscreen mode.\n"); + break; + } + owindow *current; if (match_is_empty(¤t_match)) { @@ -486,6 +493,13 @@ focus: } | TOK_FOCUS direction { + if (focused && + focused->type != CT_WORKSPACE && + focused->fullscreen_mode != CF_NONE) { + LOG("Cannot change focus while in fullscreen mode.\n"); + break; + } + int direction = $2; switch (direction) { case TOK_LEFT: @@ -513,6 +527,13 @@ focus: } | TOK_FOCUS window_mode { + if (focused && + focused->type != CT_WORKSPACE && + focused->fullscreen_mode != CF_NONE) { + LOG("Cannot change focus while in fullscreen mode.\n"); + break; + } + printf("should focus: "); if ($2 == TOK_TILING) @@ -545,6 +566,13 @@ focus: } | TOK_FOCUS level { + if (focused && + focused->type != CT_WORKSPACE && + focused->fullscreen_mode != CF_NONE) { + LOG("Cannot change focus while in fullscreen mode.\n"); + break; + } + if ($2 == TOK_PARENT) level_up(); else level_down(); diff --git a/testcases/t/100-fullscreen.t b/testcases/t/100-fullscreen.t index cc893adc..f8fc92a2 100644 --- a/testcases/t/100-fullscreen.t +++ b/testcases/t/100-fullscreen.t @@ -156,4 +156,22 @@ is(fullscreen_windows(), 0, 'amount of fullscreen windows after fullscreen comma # clean up the workspace so that it will be cleaned when switching away cmd 'kill' for (@{get_ws_content($tmp)}); +################################################################################ +# Verify that changing focus while in fullscreen does not work. +################################################################################ + +$tmp = fresh_workspace; + +my $other = open_window; +is($x->input_focus, $other->id, 'other window focused'); + +$window = open_window; +is($x->input_focus, $window->id, 'window focused'); + +cmd 'fullscreen'; +is($x->input_focus, $window->id, 'fullscreen window focused'); + +cmd 'focus left'; +is($x->input_focus, $window->id, 'fullscreen window still focused'); + done_testing;