From 1ff321bc3fe24220b82c54a582c480794f8fa960 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Sat, 17 Dec 2011 15:21:43 +0000 Subject: [PATCH] Bugfix: Disallow focusing other windows when in fullscreen mode (Thanks aksr) Fixes: #579 --- src/cmdparse.y | 28 ++++++++++++++++++++++++++++ testcases/t/100-fullscreen.t | 18 ++++++++++++++++++ 2 files changed, 46 insertions(+) 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; -- 2.39.5