}
if (is_leaf(n)) {
+ unsigned int br = 0;
if (n->client == NULL) {
return;
}
unsigned int bw;
+ bool the_only_window = !m->prev && !m->next && d->root->client;
if ((borderless_monocle && d->layout == LAYOUT_MONOCLE && IS_TILED(n->client))
+ || (borderless_singleton && the_only_window)
|| n->client->state == STATE_FULLSCREEN) {
bw = 0;
} else {
}
}
n->client->tiled_rectangle = r;
+ if (!gapless_monocle || 1 != LAYOUT_MONOCLE)
+ br = n->client->border_radius;
/* floating clients */
} else if (s == STATE_FLOATING) {
r = n->client->floating_rectangle;
+ br = n->client->border_radius;
/* fullscreen clients */
} else {
r = m->rectangle;
if (!rect_eq(r, cr)) {
window_move_resize(n->id, r.x, r.y, r.width, r.height);
+ window_rounded_border(n);
if (!grabbing) {
put_status(SBSC_MASK_NODE_GEOMETRY, "node_geometry 0x%08X 0x%08X 0x%08X %ux%u+%i+%i\n", m->id, d->id, n->id, r.width, r.height, r.x, r.y);
}
}
window_border_width(n->id, bw);
+ window_border_radius(n->client, br);
+ window_rounded_border(n);
} else {
xcb_rectangle_t first_rect;
return p;
}
+void set_type(node_t *n, split_type_t typ)
+{
+ if (n == NULL) {
+ return;
+ }
+
+ n->split_type = typ;
+ update_constraints(n);
+ rebuild_constraints_towards_root(n);
+}
+
void set_ratio(node_t *n, double rat)
{
if (n == NULL) {
}
}
- m->sticky_count += sticky_count(n);
-
propagate_flags_upward(m, d, n);
if (d->focus == NULL && is_focusable(n)) {
{
node_t *r = make_node(XCB_NONE);
insert_node(m, d, r, n);
+ put_status(SBSC_MASK_NODE_ADD, "node_add 0x%08X 0x%08X 0x%08X 0x%08X\n", m->id, d->id, n != NULL ? n->id : 0, r->id);
if (single_monocle && d->layout == LAYOUT_MONOCLE && tiled_count(d->root, true) > 1) {
set_layout(m, d, d->user_layout, false);
snprintf(c->class_name, sizeof(c->class_name), "%s", MISSING_VALUE);
snprintf(c->instance_name, sizeof(c->instance_name), "%s", MISSING_VALUE);
c->border_width = border_width;
+ c->border_radius = border_radius;
c->urgent = false;
c->shown = false;
+ c->sets_own_shape = false;
c->wm_flags = 0;
c->icccm_props.input_hint = true;
c->icccm_props.take_focus = false;
void rotate_tree(node_t *n, int deg)
{
rotate_tree_rec(n, deg);
- rebuild_constraints(n);
+ rebuild_constraints_from_leaves(n);
+ rebuild_constraints_towards_root(n);
}
void rotate_tree_rec(node_t *n, int deg)
node_t *p = n->parent;
- if (m->sticky_count > 0) {
- m->sticky_count -= sticky_count(n);
- }
-
if (p == NULL) {
d->root = NULL;
d->focus = NULL;
return;
}
- for (node_t *f = first_extrema(n); f != NULL; f = next_leaf(f, n)) {
- if (f->client != NULL) {
- xcb_kill_client(dpy, f->id);
+ if (IS_RECEPTACLE(n)) {
+ put_status(SBSC_MASK_NODE_REMOVE, "node_remove 0x%08X 0x%08X 0x%08X\n", m->id, d->id, n->id);
+ remove_node(m, d, n);
+ } else {
+ for (node_t *f = first_extrema(n); f != NULL; f = next_leaf(f, n)) {
+ if (f->client != NULL) {
+ xcb_kill_client(dpy, f->id);
+ }
}
}
-
- remove_node(m, d, n);
}
void remove_node(monitor_t *m, desktop_t *d, node_t *n)
history_remove(d, n, true);
remove_stack_node(n);
cancel_presel_in(m, d, n);
+ if (m->sticky_count > 0 && d == m->desk) {
+ m->sticky_count -= sticky_count(n);
+ }
clients_count -= clients_count_in(n);
if (is_descendant(grabbed_node, n)) {
grabbed_node = NULL;
if (d1 != d2) {
arrange(m2, d2);
+ } else {
+ if (pointer_follows_focus && (n1_held_focus || n2_held_focus)) {
+ center_pointer(get_rectangle(m1, d1, d1->focus));
+ }
}
return true;
return false;
}
- if (sticky_still && ms->sticky_count > 0 && sticky_count(ns) > 0 && dd != md->desk) {
+ unsigned int sc = (ms->sticky_count > 0 && ds == ms->desk) ? sticky_count(ns) : 0;
+ if (sticky_still && sc > 0 && dd != md->desk) {
return false;
}
if (ns->client == NULL || monitor_from_client(ns->client) != md) {
adapt_geometry(&ms->rectangle, &md->rectangle, ns);
}
+ ms->sticky_count -= sc;
+ md->sticky_count += sc;
}
if (ds != dd) {
}
}
-void rebuild_constraints(node_t *n)
+void rebuild_constraints_from_leaves(node_t *n)
{
if (n == NULL || is_leaf(n)) {
return;
} else {
- rebuild_constraints(n->first_child);
- rebuild_constraints(n->second_child);
+ rebuild_constraints_from_leaves(n->first_child);
+ rebuild_constraints_from_leaves(n->second_child);
update_constraints(n);
}
}
+void rebuild_constraints_towards_root(node_t *n)
+{
+ if (n == NULL) {
+ return;
+ }
+
+ node_t *p = n->parent;
+
+ if (p != NULL) {
+ update_constraints(p);
+ }
+
+ rebuild_constraints_towards_root(p);
+}
+
void update_constraints(node_t *n)
{
if (n == NULL || is_leaf(n)) {