re-insert floating cons next to the currently focused con of the appropriate workspace

This commit is contained in:
Michael Stapelberg 2011-01-27 16:04:17 +01:00
parent 2f5d111936
commit f462a9a215
3 changed files with 24 additions and 2 deletions

View File

@ -152,6 +152,14 @@ Con *con_next_focused(Con *con);
*/ */
Con *con_get_next(Con *con, char way, orientation_t orientation); 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 * 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

View File

@ -627,6 +627,18 @@ Con *con_get_next(Con *con, char way, orientation_t orientation) {
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.
*
*/
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 * Returns a "relative" Rect which contains the amount of pixels that need to

View File

@ -149,8 +149,10 @@ void floating_disable(Con *con, bool automatic) {
TAILQ_REMOVE(&(con->parent->parent->focus_head), con->parent, focused); TAILQ_REMOVE(&(con->parent->parent->focus_head), con->parent, focused);
tree_close(con->parent, false, false); tree_close(con->parent, false, false);
/* 3: re-attach to previous parent */ /* 3: re-attach to the parent of the currently focused con on the workspace
con->parent = con_get_workspace(con); * 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 /* XXX: We adjust the percentage value to start with a fair value. Floating
* cons always have 1.0 as percent which doesnt work so well when * cons always have 1.0 as percent which doesnt work so well when