]> git.sur5r.net Git - i3/i3/commitdiff
Merge pull request #3448 from orestisf1993/sticky
authorIngo Bürk <admin@airblader.de>
Tue, 23 Oct 2018 13:31:57 +0000 (15:31 +0200)
committerGitHub <noreply@github.com>
Tue, 23 Oct 2018 13:31:57 +0000 (15:31 +0200)
Fix sticky focus when switching to workspace on different output

1  2 
src/workspace.c

diff --combined src/workspace.c
index 882dac5449fca7c0a5f64f346be1406050431e6b,6fe9a1280d93fd51194ef71a973fb704f0ace034..a2d9b0e8ae469068d8a92bffc20708cb81ce51e8
@@@ -308,7 -308,7 +308,7 @@@ bool workspace_is_visible(Con *ws) 
   * XXX: we need to clean up all this recursive walking code.
   *
   */
 -Con *_get_sticky(Con *con, const char *sticky_group, Con *exclude) {
 +static Con *_get_sticky(Con *con, const char *sticky_group, Con *exclude) {
      Con *current;
  
      TAILQ_FOREACH(current, &(con->nodes_head), nodes) {
@@@ -410,7 -410,6 +410,6 @@@ static void workspace_defer_update_urge
   */
  void workspace_show(Con *workspace) {
      Con *current, *old = NULL;
-     Con *old_focus = focused;
  
      /* safe-guard against showing i3-internal workspaces like __i3_scratch */
      if (con_is_internal(workspace))
          return;
      }
  
+     /* Used to correctly update focus when pushing sticky windows. Holds the
+      * previously focused container in the same output as workspace. For
+      * example, if a sticky window is focused and then we switch focus to a
+      * workspace in another output and then switch to a third workspace in the
+      * first output, the sticky window needs to be refocused. */
+     Con *old_focus = old ? con_descend_focused(old) : NULL;
      /* Remember currently focused workspace for switching back to it later with
       * the 'workspace back_and_forth' command.
       * NOTE: We have to duplicate the name as the original will be freed when
@@@ -914,7 -920,7 +920,7 @@@ Con *workspace_attach_to(Con *ws) 
      return new;
  }
  
 -/**
 +/*
   * Creates a new container and re-parents all of children from the given
   * workspace into it.
   *
@@@ -949,7 -955,7 +955,7 @@@ Con *workspace_encapsulate(Con *ws) 
      return new;
  }
  
 -/**
 +/*
   * Move the given workspace to the specified output.
   * This returns true if and only if moving the workspace was successful.
   */