rotate_tree(n->second_child, rot);
}
+ void flip_tree(node_t *n, flip_t flp)
+ {
+ if (n == NULL || is_leaf(n))
+ return;
+
+ node_t *tmp;
+
+ if ((flp == FLIP_HORIZONTAL && n->split_type == TYPE_HORIZONTAL)
+ || (flp == FLIP_VERTICAL && n->split_type == TYPE_VERTICAL)) {
+ tmp = n->first_child;
+ n->first_child = n->second_child;
+ n->second_child = tmp;
+ n->split_ratio = 1.0 - n->split_ratio;
+ }
+
+ flip_tree(n->first_child, flp);
+ flip_tree(n->second_child, flp);
+ }
+void list_history(desktop_t *d, char *rsp)
+{
+ char line[MAXLEN];
+ for (node_list_t *a = d->focus_history->head; a != NULL; a = a->prev) {
+ snprintf(line, sizeof(line), "%s %X\n", a->node->client->class_name, a->node->client->window);
+ strncat(rsp, line, REMLEN(rsp));
+ }
+}
+
void arrange(monitor_t *m, desktop_t *d)
{
PRINTF("arrange %s%s%s\n", (num_monitors > 1 ? m->name : ""), (num_monitors > 1 ? " " : ""), d->name);
pointer_state_t *make_pointer_state(void)
{
pointer_state_t *p = malloc(sizeof(pointer_state_t));
+ p->monitor = NULL;
+ p->desktop = NULL;
+ p->node = p->vertical_fence = p->horizontal_fence = NULL;
+ p->client = NULL;
+ p->window = XCB_NONE;
return p;
}
+
+void history_add(focus_history_t *f, node_t *n)
+{
+ node_list_t *a = make_node_list();
+ a->node = n;
+ if (f->head == NULL) {
+ f->head = f->tail = f->position = a;
+ } else {
+ f->head->next = a;
+ a->prev = f->head;
+ f->head = a;
+ }
+}
+
+void history_remove(focus_history_t *f, node_t *n)
+{
+ for(node_list_t *b = f->head; b != NULL; b = b->prev)
+ if (b->node == n) {
+ node_list_t *a = b->prev;
+ node_list_t *c = b->next;
+ if (a != NULL)
+ a->next = c;
+ if (c != NULL)
+ c->prev = a;
+ free(b);
+ return;
+ }
+}