void ewmh_update_client_list(bool stacking) { if (clients_count == 0) { xcb_ewmh_set_client_list(ewmh, default_screen, 0, NULL); xcb_ewmh_set_client_list_stacking(ewmh, default_screen, 0, NULL); return; } xcb_window_t wins[clients_count]; unsigned int i = 0; if (stacking) { for (stacking_list_t *s = stack_head; s != NULL; s = s->next) { wins[i++] = s->node->id; } xcb_ewmh_set_client_list_stacking(ewmh, default_screen, clients_count, wins); } else { for (monitor_t *m = mon_head; m != NULL; m = m->next) { for (desktop_t *d = m->desk_head; d != NULL; d = d->next) { for (node_t *n = first_extrema(d->root); n != NULL; n = next_leaf(n, d->root)) { if (n->client == NULL) { continue; } wins[i++] = n->id; } } } xcb_ewmh_set_client_list(ewmh, default_screen, clients_count, wins); } }
void ewmh_update_client_list(void) { if (num_clients == 0) { xcb_ewmh_set_client_list(ewmh, default_screen, 0, NULL); xcb_ewmh_set_client_list_stacking(ewmh, default_screen, 0, NULL); return; } xcb_window_t wins[num_clients]; unsigned int i = 0; for (monitor_t *m = mon_head; m != NULL; m = m->next) for (desktop_t *d = m->desk_head; d != NULL; d = d->next) for (node_t *n = first_extrema(d->root); n != NULL; n = next_leaf(n, d->root)) wins[i++] = n->client->window; if (i != num_clients) return; xcb_ewmh_set_client_list(ewmh, default_screen, num_clients, wins); xcb_ewmh_set_client_list_stacking(ewmh, default_screen, num_clients, wins); }