Simplify tree_close_internal
This commit makes multiple changes in tree_close_internal. I didn't split them because they are not completely independent. - Remove force_set_focus parameter This parameter was always set to `false` throughout the code base except for one case where it was set to `(con == focused)`, when killing a floating con's parent (the one with type CT_FLOATING_CON). But this case is not needed anymore since the special handling of CT_FLOATING_CONs in con_next_focused was removed in #2941. - Assume that con_next_focused does not returned a container of type CT_DOCKAREA. This is reasonable since con_next_focused uses the focus_head stack and has special handling of CT_DOCKAREA containers. - Remove is_mapped This variable was only used in the if block towards the end of tree_close_internal. Ignoring the, now removed, dockarea code and the use of force_set_focus this block performed only one useful action: focus the `next` container when `con == focused`. `con == focused` was a necessary and sufficient condition for the con_activate call: if `con != focused` we could reach the inner if blocks because of the other conditions but would never focus another container. If `con == focused` then all other conditions would be irrelevant. - Remove special handling of floating containers Since the `next` focused container is calculated through the parent for floating containers, I moved this code to con_next_focused. Also, because of the removal of force_set_focus, it appears that we can call con_on_remove_child for floating containers as well.
This commit is contained in:
@ -991,7 +991,7 @@ void randr_disable_output(Output *output) {
|
||||
if (current != next && TAILQ_EMPTY(&(current->focus_head))) {
|
||||
/* the workspace is empty and not focused, get rid of it */
|
||||
DLOG("Getting rid of current = %p / %s (empty, unfocused)\n", current, current->name);
|
||||
tree_close_internal(current, DONT_KILL_WINDOW, false, false);
|
||||
tree_close_internal(current, DONT_KILL_WINDOW, false);
|
||||
continue;
|
||||
}
|
||||
DLOG("Detaching current = %p / %s\n", current, current->name);
|
||||
@ -1037,7 +1037,7 @@ void randr_disable_output(Output *output) {
|
||||
Con *con = output->con;
|
||||
/* clear the pointer before calling tree_close_internal in which the memory is freed */
|
||||
output->con = NULL;
|
||||
tree_close_internal(con, DONT_KILL_WINDOW, true, false);
|
||||
tree_close_internal(con, DONT_KILL_WINDOW, true);
|
||||
DLOG("Done. Should be fine now\n");
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user