]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: Don’t use ->old_parent for floating cons (Thanks eelvex)
authorMichael Stapelberg <michael@stapelberg.de>
Fri, 7 Jan 2011 23:44:03 +0000 (00:44 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Fri, 7 Jan 2011 23:44:03 +0000 (00:44 +0100)
Instead, we attach them to their workspace when toggling back to tiling. This
makes more sense; afterall, floating clients are always directly below a
CT_WORKSPACE container.

include/data.h
src/floating.c
src/tree.c

index 91f4afcdae08d905dda2b900cd4d17772c01453a..fb6ae4e0a9e0b5c29ecf4e4de23f4e46cbe3270c 100644 (file)
@@ -275,8 +275,6 @@ struct Con {
     enum { CT_ROOT = 0, CT_OUTPUT = 1, CT_CON = 2, CT_FLOATING_CON = 3, CT_WORKSPACE = 4 } type;
     orientation_t orientation;
     struct Con *parent;
-    /* parent before setting it to floating */
-    struct Con *old_parent;
 
     struct Rect rect;
     struct Rect window_rect;
index b342c56e167197cc74e7c745e4672289234fa954..3cf8ab5fc1d5ddf65d39fac093330b64296dcc4f 100644 (file)
@@ -99,7 +99,6 @@ void floating_enable(Con *con, bool automatic) {
     TAILQ_INSERT_TAIL(&(nc->parent->focus_head), nc, focused);
 
     /* 3: attach the child to the new parent container */
-    con->old_parent = con->parent;
     con->parent = nc;
     con->floating = FLOATING_USER_ON;
 
@@ -134,8 +133,6 @@ void floating_disable(Con *con, bool automatic) {
         return;
     }
 
-    assert(con->old_parent != NULL);
-
     /* 1: detach from parent container */
     TAILQ_REMOVE(&(con->parent->nodes_head), con, nodes);
     TAILQ_REMOVE(&(con->parent->focus_head), con, focused);
@@ -146,7 +143,7 @@ void floating_disable(Con *con, bool automatic) {
     tree_close(con->parent, false, false);
 
     /* 3: re-attach to previous parent */
-    con->parent = con->old_parent;
+    con->parent = con_get_workspace(con);
     TAILQ_INSERT_TAIL(&(con->parent->nodes_head), con, nodes);
     TAILQ_INSERT_TAIL(&(con->parent->focus_head), con, focused);
 
index b601cdd49fecfbb756879587e167d7a296985cac..3e8be5247854cf13f5e4cadc4691958824e565b6 100644 (file)
@@ -81,27 +81,6 @@ Con *tree_open_con(Con *con) {
     return new;
 }
 
-/*
- * vanishing is the container that is about to be closed (so any floating
- * client which has old_parent == vanishing needs to be "re-parented").
- *
- */
-static void fix_floating_parent(Con *con, Con *vanishing) {
-    Con *child;
-
-    if (con->old_parent == vanishing) {
-        LOG("Fixing vanishing old_parent (%p) of container %p to be %p\n",
-                vanishing, con, vanishing->parent);
-        con->old_parent = vanishing->parent;
-    }
-
-    TAILQ_FOREACH(child, &(con->floating_head), floating_windows)
-        fix_floating_parent(child, vanishing);
-
-    TAILQ_FOREACH(child, &(con->nodes_head), nodes)
-        fix_floating_parent(child, vanishing);
-}
-
 static bool _is_con_mapped(Con *con) {
     Con *child;
 
@@ -127,9 +106,6 @@ void tree_close(Con *con, bool kill_window, bool dont_kill_parent) {
         was_mapped = _is_con_mapped(con);
     }
 
-    /* check floating clients and adjust old_parent if necessary */
-    fix_floating_parent(croot, con);
-
     /* Get the container which is next focused */
     Con *next = con_next_focused(con);
     DLOG("next = %p, focused = %p\n", next, focused);