]> git.sur5r.net Git - i3/i3/commitdiff
Fix fullscreen focus bug and corresponding test flaw
authorDeiz <silverwraithii@gmail.com>
Sat, 6 Oct 2012 20:41:04 +0000 (16:41 -0400)
committerMichael Stapelberg <michael@stapelberg.de>
Tue, 9 Oct 2012 19:24:04 +0000 (21:24 +0200)
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
src/tree.c
testcases/t/156-fullscreen-focus.t

index e323a6eccdd191a3e006f1a9e90fc9b59a0a9332..2b429cb32f469f48f3dd7deb9bc93c7813af7523 100644 (file)
@@ -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);
index 157b6671ad81a33d3f5f81b86aa56e2947aee300..f233fd691c5e93bca775b0f83498c19384208461 100644 (file)
@@ -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;
 
index 29a410d2295c6aa61fe3115141431cb92a4b6048..23be014a8acc21dd998f25ed3968bf202f57569e 100644 (file)
 # 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 = <<EOT;
+# i3 config file (v4)
+font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
+
+fake-outputs 1024x768+0+0,1024x768+1024+0
+EOT
+
+my $pid = launch_with_config($config);
 
 my $i3 = i3(get_socket_path());
 
@@ -305,4 +318,6 @@ verify_move(2, 'prevented move to workspace by position');
 
 # TODO: Tests for "move to output" and "move workspace to output".
 
+exit_gracefully($pid);
+
 done_testing;