void add_monitor(monitor_t *m) { xcb_rectangle_t r = m->rectangle; if (mon == NULL) { mon = m; mon_head = m; mon_tail = m; } else { monitor_t *a = mon_head; while (a != NULL && rect_cmp(m->rectangle, a->rectangle) > 0) { a = a->next; } if (a != NULL) { monitor_t *b = a->prev; if (b != NULL) { b->next = m; } else { mon_head = m; } m->prev = b; m->next = a; a->prev = m; } else { mon_tail->next = m; m->prev = mon_tail; mon_tail = m; } } put_status(SBSC_MASK_MONITOR_ADD, "monitor_add 0x%08X %s %ux%u+%i+%i\n", m->id, m->name, r.width, r.height, r.x, r.y); put_status(SBSC_MASK_REPORT); }
void reorder_monitor(monitor_t *m) { if (m == NULL) { return; } monitor_t *prev = m->prev; while (prev != NULL && rect_cmp(m->rectangle, prev->rectangle) < 0) { swap_monitors(m, prev); prev = m->prev; } monitor_t *next = m->next; while (next != NULL && rect_cmp(m->rectangle, next->rectangle) > 0) { swap_monitors(m, next); next = m->next; } }