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 ae8c63f6..06c1411a 100644 --- a/testcases/t/100-fullscreen.t +++ b/testcases/t/100-fullscreen.t @@ -169,4 +169,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;