]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: Don’t focus new cons when there is a fullscreen con (Thanks dothebart)
authorMichael Stapelberg <michael@stapelberg.de>
Sun, 6 Mar 2011 22:26:02 +0000 (23:26 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Sun, 6 Mar 2011 22:26:02 +0000 (23:26 +0100)
Also, remove the focus_it parameter from tree_open_con, it makes more sense to
call con_focus outside of the function.

include/tree.h
src/cmdparse.y
src/manage.c
src/tree.c

index cdcb4878694c12014f27d697ae29a343e2898567..40d9a5417714a9c76ec1268b641dce8ca52d8919 100644 (file)
@@ -24,7 +24,7 @@ void tree_init();
  * Opens an empty container in the current container
  *
  */
-Con *tree_open_con(Con *con, bool focus_it);
+Con *tree_open_con(Con *con);
 
 /**
  * Splits (horizontally or vertically) the given container by creating a new
index 3372426483e68c359622677b4779561cfc96be02..0abcab08d56cd0086f988da27c5f41fbbe4e9a89 100644 (file)
@@ -403,7 +403,8 @@ open:
     TOK_OPEN
     {
         printf("opening new container\n");
-        Con *con = tree_open_con(NULL, true);
+        Con *con = tree_open_con(NULL);
+        con_focus(con);
         asprintf(&json_output, "{\"success\":true, \"id\":%ld}", (long int)con);
     }
     ;
index 192bcbf3a821438c28037b997c52dcfbb3db612a..789bd8a9029a996d6b8f7318a6b2bdf3f927b470 100644 (file)
@@ -201,7 +201,7 @@ void manage_window(xcb_window_t window, xcb_get_window_attributes_cookie_t cooki
             LOG("using current container, focused = %p, focused->name = %s\n",
                             focused, focused->name);
             nc = focused;
-        } else nc = tree_open_con(NULL, true);
+        } else nc = tree_open_con(NULL);
     } else {
         /* M_ACTIVE are assignments */
         if (match != NULL && match->insert_where == M_ACTIVE) {
@@ -213,13 +213,13 @@ void manage_window(xcb_window_t window, xcb_get_window_attributes_cookie_t cooki
             /* We need to open a new con */
             /* TODO: make a difference between match-once containers (directly assign
              * cwindow) and match-multiple (tree_open_con first) */
-            nc = tree_open_con(nc->parent, true);
+            nc = tree_open_con(nc->parent);
         }
 
         /* M_BELOW inserts the new window as a child of the one which was
          * matched (e.g. dock areas) */
         else if (match != NULL && match->insert_where == M_BELOW) {
-            nc = tree_open_con(nc, !cwindow->dock);
+            nc = tree_open_con(nc);
         }
     }
 
@@ -234,6 +234,18 @@ void manage_window(xcb_window_t window, xcb_get_window_attributes_cookie_t cooki
     x_set_name(nc, name);
     free(name);
 
+    Con *ws = con_get_workspace(nc);
+    Con *fs = (ws ? con_get_fullscreen_con(ws) : NULL);
+
+    if (fs == NULL) {
+        DLOG("Not in fullscreen mode, focusing\n");
+        if (!cwindow->dock)
+            con_focus(nc);
+        else DLOG("dock, not focusing\n");
+    } else {
+        DLOG("fs = %p, ws = %p, not focusing\n", fs, ws);
+    }
+
     /* set floating if necessary */
     bool want_floating = false;
     if (xcb_reply_contains_atom(reply, atoms[_NET_WM_WINDOW_TYPE_DIALOG]) ||
@@ -251,13 +263,10 @@ void manage_window(xcb_window_t window, xcb_get_window_attributes_cookie_t cooki
         LOG("This window is transiert for another window, setting floating\n");
         want_floating = true;
 
-        if (config.popup_during_fullscreen == PDF_LEAVE_FULLSCREEN) {
-            Con *ws, *fs;
-            if ((ws = con_get_workspace(nc)) &&
-                (fs = con_get_fullscreen_con(ws))) {
-                LOG("There is a fullscreen window, leaving fullscreen mode\n");
-                con_toggle_fullscreen(fs);
-            }
+        if (config.popup_during_fullscreen == PDF_LEAVE_FULLSCREEN &&
+            fs != NULL) {
+            LOG("There is a fullscreen window, leaving fullscreen mode\n");
+            con_toggle_fullscreen(fs);
         }
     }
 
index 3c209fbc5a4fb9406c4601b305bd6dda3540b0b1..ef254a8f122300cbaca98b18a7b51a6a2292c305 100644 (file)
@@ -55,7 +55,7 @@ void tree_init() {
  * Opens an empty container in the current container
  *
  */
-Con *tree_open_con(Con *con, bool focus_it) {
+Con *tree_open_con(Con *con) {
     if (con == NULL) {
         /* every focusable Con has a parent (outputs have parent root) */
         con = focused->parent;
@@ -80,10 +80,6 @@ Con *tree_open_con(Con *con, bool focus_it) {
     /* 4: re-calculate child->percent for each child */
     con_fix_percent(con);
 
-    /* 5: focus the new container */
-    if (focus_it)
-        con_focus(new);
-
     return new;
 }