*/
Con *con_get_next(Con *con, char way, orientation_t orientation);
+/**
+ * Returns the focused con inside this client, descending the tree as far as
+ * possible. This comes in handy when attaching a con to a workspace at the
+ * currently focused position, for example.
+ *
+ */
+Con *con_descend_focused(Con *con);
+
/**
* Returns a "relative" Rect which contains the amount of pixels that need to
* be added to the original Rect to get the final position (obviously the
return next;
}
+/*
+ * Returns the focused con inside this client, descending the tree as far as
+ * possible. This comes in handy when attaching a con to a workspace at the
+ * currently focused position, for example.
+ *
+ */
+Con *con_descend_focused(Con *con) {
+ Con *next = con;
+ while (!TAILQ_EMPTY(&(next->focus_head)))
+ next = TAILQ_FIRST(&(next->focus_head));
+ return next;
+}
/*
* Returns a "relative" Rect which contains the amount of pixels that need to
TAILQ_REMOVE(&(con->parent->parent->focus_head), con->parent, focused);
tree_close(con->parent, false, false);
- /* 3: re-attach to previous parent */
- con->parent = con_get_workspace(con);
+ /* 3: re-attach to the parent of the currently focused con on the workspace
+ * this floating con was on */
+ Con *focused = con_descend_focused(con_get_workspace(con));
+ con->parent = focused->parent;
/* XXX: We adjust the percentage value to start with a fair value. Floating
* cons always have 1.0 as percent which doesn’t work so well when