void tree_close_con();
void tree_next(char way, orientation_t orientation);
void tree_move(char way, orientation_t orientation);
-void tree_close(Con *con);
+void tree_close(Con *con, bool kill_window);
bool tree_restore();
#endif
printf("killing!\n");
/* check if the match is empty, not if the result is empty */
if (match_is_empty(¤t_match))
- tree_close(focused);
+ tree_close(focused, true);
else {
TAILQ_FOREACH(current, &owindows, owindows) {
printf("matching: %p / %s\n", current->con, current->con->name);
- tree_close(current->con);
+ tree_close(current->con, true);
}
}
/* 2: kill parent container */
TAILQ_REMOVE(&(con->parent->parent->floating_head), con->parent, floating_windows);
- tree_close(con->parent);
+ tree_close(con->parent, false);
/* 3: re-attach to previous parent */
con->parent = con->old_parent;
return 1;
}
- tree_close(con);
+ tree_close(con, false);
tree_render();
x_push_changes(croot);
return 1;
* Closes the given container including all children
*
*/
-void tree_close(Con *con) {
+void tree_close(Con *con, bool kill_window) {
/* TODO: check floating clients and adjust old_parent if necessary */
/* Get the container which is next focused */
* in their parent’s nodes_head */
while (!TAILQ_EMPTY(&(con->nodes_head))) {
child = TAILQ_FIRST(&(con->nodes_head));
- tree_close(child);
+ tree_close(child, kill_window);
+ }
+
+ if (con->window != NULL) {
+ if (kill_window)
+ x_window_kill(con->window->id);
+ else {
+ /* un-parent the window */
+ xcb_reparent_window(conn, con->window->id, root, 0, 0);
+ /* TODO: client_unmap to set state to withdrawn */
+
+ }
+ free(con->window);
}
/* kill the X11 part of this container */
con_detach(con);
con_fix_percent(con->parent, WINDOW_REMOVE);
- if (con->window != NULL) {
- x_window_kill(con->window->id);
- free(con->window);
- }
free(con->name);
TAILQ_REMOVE(&all_cons, con, all_cons);
free(con);
}
/* Kill con */
- tree_close(focused);
+ tree_close(focused, true);
}
/*
if (TAILQ_EMPTY(&(old->nodes_head))) {
LOG("Closing old workspace (%p / %s), it is empty\n", old, old->name);
- tree_close(old);
+ tree_close(old, false);
}
con_focus(next);