#include <xcb/xcb_event.h>
#include "settings.h"
#include "helpers.h"
-#include "utils.h"
+#include "misc.h"
#include "window.h"
#include "types.h"
#include "bspwm.h"
rotate_tree(n->second_child, rot);
}
+void magnetise_tree(node_t *n, corner_t corner)
+{
+ if (n == NULL || is_leaf(n))
+ return;
+
+ PUTS("magnetise tree");
+
+ switch (n->split_type) {
+ case TYPE_HORIZONTAL:
+ if (corner == TOP_LEFT || corner == TOP_RIGHT)
+ change_split_ratio(n, CHANGE_DECREASE);
+ else
+ change_split_ratio(n, CHANGE_INCREASE);
+ break;
+ case TYPE_VERTICAL:
+ if (corner == TOP_LEFT || corner == BOTTOM_LEFT)
+ change_split_ratio(n, CHANGE_DECREASE);
+ else
+ change_split_ratio(n, CHANGE_INCREASE);
+ break;
+ default:
+ break;
+ }
+
+ magnetise_tree(n->first_child, corner);
+ magnetise_tree(n->second_child, corner);
+}
+
void dump_tree(desktop_t *d, node_t *n, char *rsp, int depth)
{
if (n == NULL)
if (is_leaf(n)) {
if (n->client->fullscreen)
return;
+
+ if (n == d->root || (d->layout == LAYOUT_MONOCLE && !is_floating(n->client)))
+ n->client->border_width = 0;
+ else
+ n->client->border_width = border_width;
+
xcb_rectangle_t r;
if (is_tiled(n->client)) {
if (d->layout == LAYOUT_TILED)
r = rect;
else if (d->layout == LAYOUT_MONOCLE)
r = root_rect;
- int bleed = window_gap + 2 * border_width;
+ int bleed = window_gap + 2 * n->client->border_width;
r.width = (bleed < r.width ? r.width - bleed : 1);
r.height = (bleed < r.height ? r.height - bleed : 1);
n->client->tiled_rectangle = r;
}
window_move_resize(n->client->window, r.x, r.y, r.width, r.height);
- window_border_width(n->client->window, border_width);
+ window_border_width(n->client->window, n->client->border_width);
window_draw_border(n, n == d->focus);
if (d->layout == LAYOUT_MONOCLE && n == d->focus)
if (fopar == NULL) {
dad->first_child = n;
dad->second_child = focus;
- dad->split_type = TYPE_VERTICAL;
+ if (focus->rectangle.width > focus->rectangle.height)
+ dad->split_type = TYPE_VERTICAL;
+ else
+ dad->split_type = TYPE_HORIZONTAL;
focus->parent = dad;
d->root = dad;
} else {
split_mode = MODE_AUTOMATIC;
break;
}
+ if (focus->vacant)
+ update_vacant_state(fopar);
}
}
d->focus = (n_first_child ? first_extrema(b) : second_extrema(b));
d->last_focus = NULL;
}
+
+ update_vacant_state(b->parent);
}
}