con_detach(con);
con_attach(con, next, false);
- /* 6: keep focus on the current workspace */
+ /* 6: fix the percentages */
+ con_fix_percent(parent);
+ con_fix_percent(next);
+
+ /* 7: keep focus on the current workspace */
con_focus(focus_next);
- /* 7: check if the parent container is empty now and close it */
+ /* 8: check if the parent container is empty now and close it */
if (parent->type != CT_WORKSPACE &&
TAILQ_EMPTY(&(parent->nodes_head))) {
DLOG("Closing empty parent container\n");
/* 4: switch workspace orientation */
parent->orientation = orientation;
- /* 4: attach the new split container to the workspace */
+ /* 5: attach the new split container to the workspace */
DLOG("Attaching new split to ws\n");
con_attach(new, parent, false);
+ /* 6: fix the percentages */
+ con_fix_percent(new);
+ con_fix_percent(parent);
+
if (old_focused)
con_focus(old_focused);
}
con_detach(focused);
+ con_fix_percent(focused->parent);
focused->parent = next->parent;
TAILQ_INSERT_AFTER(&(next->parent->nodes_head), next, focused, nodes);
}
con_detach(focused);
+ con_fix_percent(focused);
focused->parent = next->parent;
/* After going down in the tree, we insert the container *after*
/* TODO: don’t influence focus handling? */
}
+ /* fix the percentages in the container we moved to */
+ int children = con_num_children(next->parent);
+ if (children == 1)
+ focused->percent = 1.0;
+ else
+ focused->percent = 1.0 / (children - 1);
+ con_fix_percent(next->parent);
+
/* We need to call con_focus() to fix the focus stack "above" the container
* we just inserted the focused container into (otherwise, the parent
* container(s) would still point to the old container(s)). */
DLOG("Old container empty after moving. Let's close it\n");
tree_close(old_parent, false, false);
}
+ else {
+ /* fix the percentages in the container we moved from */
+ con_fix_percent(old_parent);
+ }
tree_flatten(croot);
}