When making floating cons tiling, re-insert next to the next focused *tiling* con (Thanks mseed)
Fixes: #337 and #350
This commit is contained in:
parent
76e978bfb3
commit
b484ed5f9d
|
@ -167,6 +167,16 @@ Con *con_get_next(Con *con, char way, orientation_t orientation);
|
||||||
*/
|
*/
|
||||||
Con *con_descend_focused(Con *con);
|
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
|
* 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
|
* be added to the original Rect to get the final position (obviously the
|
||||||
|
|
26
src/con.c
26
src/con.c
|
@ -694,6 +694,32 @@ Con *con_descend_focused(Con *con) {
|
||||||
return next;
|
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
|
* 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
|
* be added to the original Rect to get the final position (obviously the
|
||||||
|
|
|
@ -175,7 +175,8 @@ void floating_disable(Con *con, bool automatic) {
|
||||||
|
|
||||||
/* 3: re-attach to the parent of the currently focused con on the workspace
|
/* 3: re-attach to the parent of the currently focused con on the workspace
|
||||||
* this floating con was on */
|
* 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
|
/* if there is no other container on this workspace, focused will be the
|
||||||
* workspace itself */
|
* workspace itself */
|
||||||
if (focused->type == CT_WORKSPACE)
|
if (focused->type == CT_WORKSPACE)
|
||||||
|
|
Loading…
Reference in New Issue