]> git.sur5r.net Git - i3/i3/commitdiff
Merge pull request #3087 from orestisf1993/focus_order
authorIngo Bürk <admin@airblader.de>
Tue, 27 Feb 2018 06:59:37 +0000 (07:59 +0100)
committerGitHub <noreply@github.com>
Tue, 27 Feb 2018 06:59:37 +0000 (07:59 +0100)
 Fix focus order issues when encapsulating workspaces

1  2 
src/workspace.c

diff --combined src/workspace.c
index 4c14e8c1e35118d0d7f877ab49469d8a22afba3e,cbef473b9e0bd520427d8080c6217b8db6798b91..8c46a94917b9f2f3dbc18848e8154d157a99fa06
@@@ -412,7 -412,7 +412,7 @@@ static void _workspace_show(Con *worksp
      if (next->urgent && (int)(config.workspace_urgency_timer * 1000) > 0) {
          /* focus for now… */
          next->urgent = false;
 -        con_activate(next);
 +        con_focus(next);
  
          /* … but immediately reset urgency flags; they will be set to false by
           * the timer callback in case the container is focused at the time of
              ev_timer_again(main_loop, focused->urgency_timer);
          }
      } else
 -        con_activate(next);
 +        con_focus(next);
  
      ipc_send_workspace_event("focus", workspace, current);
  
@@@ -815,9 -815,9 +815,9 @@@ void ws_force_orientation(Con *ws, orie
      /* 2: copy layout from workspace */
      split->layout = ws->layout;
  
-     Con *old_focused = TAILQ_FIRST(&(ws->focus_head));
      /* 3: move the existing cons of this workspace below the new con */
+     Con **focus_order = get_focus_order(ws);
      DLOG("Moving cons\n");
      while (!TAILQ_EMPTY(&(ws->nodes_head))) {
          Con *child = TAILQ_FIRST(&(ws->nodes_head));
          con_attach(child, split, true);
      }
  
+     set_focus_order(split, focus_order);
+     free(focus_order);
      /* 4: switch workspace layout */
      ws->layout = (orientation == HORIZ) ? L_SPLITH : L_SPLITV;
      DLOG("split->layout = %d, ws->layout = %d\n", split->layout, ws->layout);
  
      /* 6: fix the percentages */
      con_fix_percent(ws);
-     if (old_focused)
-         con_activate(old_focused);
  }
  
  /*
@@@ -892,9 -892,10 +892,10 @@@ Con *workspace_encapsulate(Con *ws) 
      new->parent = ws;
      new->layout = ws->layout;
  
+     Con **focus_order = get_focus_order(ws);
      DLOG("Moving children of workspace %p / %s into container %p\n",
           ws, ws->name, new);
      Con *child;
      while (!TAILQ_EMPTY(&(ws->nodes_head))) {
          child = TAILQ_FIRST(&(ws->nodes_head));
          con_attach(child, new, true);
      }
  
+     set_focus_order(new, focus_order);
+     free(focus_order);
      con_attach(new, ws, true);
  
      return new;