*/
Con *con_descend_focused(Con *con);
+/**
+ * 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.
+ *
+ * Works like con_descend_focused but considers only tiling cons.
+ *
+ */
+Con *con_descend_tiling_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.
+ *
+ * Works like con_descend_focused but considers only tiling cons.
+ *
+ */
+Con *con_descend_tiling_focused(Con *con) {
+ Con *next = con;
+ Con *before;
+ Con *child;
+ do {
+ before = next;
+ TAILQ_FOREACH(child, &(next->focus_head), focused) {
+ if (child->type == CT_FLOATING_CON)
+ continue;
+
+ next = child;
+ break;
+ }
+ } while (before != next);
+ return next;
+}
+
+
/*
* 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
/* 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 *focused = con_descend_tiling_focused(con_get_workspace(con));
+
/* if there is no other container on this workspace, focused will be the
* workspace itself */
if (focused->type == CT_WORKSPACE)