From e07803999f04d38bcf3beb6ed4ad9377a2e2e6cb Mon Sep 17 00:00:00 2001 From: Deiz Date: Sat, 6 Oct 2012 16:41:04 -0400 Subject: [PATCH] Fix fullscreen focus bug and corresponding test flaw As the workspace might be reached via recursion (e.g. moving from the edge of a fullscreen split container), it's necessary to check for a fullscreen container whenever a workspace is reached. --- src/commands.c | 16 ---------------- src/tree.c | 5 +++++ testcases/t/156-fullscreen-focus.t | 17 ++++++++++++++++- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/commands.c b/src/commands.c index e323a6ec..2b429cb3 100644 --- a/src/commands.c +++ b/src/commands.c @@ -1297,14 +1297,6 @@ void cmd_exec(I3_CMD, char *nosn, char *command) { * */ void cmd_focus_direction(I3_CMD, char *direction) { - if (focused && - focused->type != CT_WORKSPACE && - focused->fullscreen_mode != CF_NONE) { - LOG("Cannot change focus while in fullscreen mode.\n"); - ysuccess(false); - return; - } - DLOG("direction = *%s*\n", direction); if (strcmp(direction, "left") == 0) @@ -1331,14 +1323,6 @@ void cmd_focus_direction(I3_CMD, char *direction) { * */ void cmd_focus_window_mode(I3_CMD, char *window_mode) { - if (focused && - focused->type != CT_WORKSPACE && - focused->fullscreen_mode != CF_NONE) { - LOG("Cannot change focus while in fullscreen mode.\n"); - ysuccess(false); - return; - } - DLOG("window_mode = %s\n", window_mode); Con *ws = con_get_workspace(focused); diff --git a/src/tree.c b/src/tree.c index 157b6671..f233fd69 100644 --- a/src/tree.c +++ b/src/tree.c @@ -466,6 +466,11 @@ static bool _tree_next(Con *con, char way, orientation_t orientation, bool wrap) /* Stop recursing at workspaces after attempting to switch to next * workspace if possible. */ if (con->type == CT_WORKSPACE) { + if (con_get_fullscreen_con(con, CF_GLOBAL) || + con_get_fullscreen_con(con, CF_OUTPUT)) { + DLOG("Cannot change workspace while in fullscreen mode.\n"); + return false; + } Output *current_output = get_output_containing(con->rect.x, con->rect.y); Output *next_output; diff --git a/testcases/t/156-fullscreen-focus.t b/testcases/t/156-fullscreen-focus.t index 29a410d2..23be014a 100644 --- a/testcases/t/156-fullscreen-focus.t +++ b/testcases/t/156-fullscreen-focus.t @@ -18,7 +18,20 @@ # the time of launching the new one. Also make sure that focusing containers # in other workspaces work even when there is a fullscreen container. # -use i3test; +use i3test i3_autostart => 0; + +# Screen setup looks like this: +# +----+----+ +# | S1 | S2 | +# +----+----+ +my $config = <