for (child = TAILQ_FIRST(&(con->focus_head)); child;) {
nextchild = TAILQ_NEXT(child, focused);
DLOG("killing child = %p.\n", child);
- tree_close_internal(child, kill_window, false, false);
+ tree_close_internal(child, kill_window, false);
child = nextchild;
}
return;
}
- tree_close_internal(con, kill_window, false, false);
+ tree_close_internal(con, kill_window, false);
}
/*
return (con != NULL && con->window != NULL && con->window->id != XCB_WINDOW_NONE && con_get_workspace(con) != NULL);
}
-/**
+/*
* Returns true if this node has regular or floating children.
*
*/
return fs;
}
-/**
+/*
* Returns true if the container is internal, such as __i3_scratch
*
*/
return children;
}
-/**
+/*
* Returns the number of visible non-floating children of this container.
* For example, if the container contains a hsplit which has two children,
* this will return 2 instead of 1.
num += con_num_windows(current);
}
+ TAILQ_FOREACH(current, &(con->floating_head), floating_windows) {
+ num += con_num_windows(current);
+ }
+
return num;
}
target = target->parent;
}
- /* 3: if the target container is floating, we get the workspace instead.
- * Only tiling windows need to get inserted next to the current container.
- * */
- Con *floatingcon = con_inside_floating(target);
- if (floatingcon != NULL) {
+ /* 3: if the original target is the direct child of a floating container, we
+ * can't move con next to it - floating containers have only one child - so
+ * we get the workspace instead. */
+ if (target->type == CT_FLOATING_CON) {
DLOG("floatingcon, going up even further\n");
- target = floatingcon->parent;
+ orig_target = target;
+ target = target->parent;
}
if (con->type == CT_FLOATING_CON) {
DLOG("selecting workspace for dock client\n");
return con_descend_focused(output_get_content(con->parent->parent));
}
+ if (con_is_floating(con)) {
+ con = con->parent;
+ }
/* if 'con' is not the first entry in the focus stack, use the first one as
* it’s currently focused already */
*
*/
int con_border_style(Con *con) {
- Con *fs = con_get_fullscreen_con(con->parent, CF_OUTPUT);
- if (fs == con) {
+ if (con->fullscreen_mode == CF_OUTPUT || con->fullscreen_mode == CF_GLOBAL) {
DLOG("this one is fullscreen! overriding BS_NONE\n");
return BS_NONE;
}
if (TAILQ_EMPTY(&(con->focus_head)) && !workspace_is_visible(con)) {
LOG("Closing old workspace (%p / %s), it is empty\n", con, con->name);
yajl_gen gen = ipc_marshal_workspace_event("empty", con, NULL);
- tree_close_internal(con, DONT_KILL_WINDOW, false, false);
+ tree_close_internal(con, DONT_KILL_WINDOW, false);
const unsigned char *payload;
ylength length;
int children = con_num_children(con);
if (children == 0) {
DLOG("Container empty, closing\n");
- tree_close_internal(con, DONT_KILL_WINDOW, false, false);
+ tree_close_internal(con, DONT_KILL_WINDOW, false);
return;
}
}