void remove_desktop(monitor_t *m, desktop_t *d) { put_status(SBSC_MASK_DESKTOP_REMOVE, "desktop_remove %s %s\n", m->name, d->name); bool was_focused = (mon != NULL && d == mon->desk); bool was_active = (d == m->desk); history_remove(d, NULL, false); unlink_desktop(m, d); empty_desktop(m, d); free(d); ewmh_update_current_desktop(); ewmh_update_number_of_desktops(); ewmh_update_desktop_names(); if (mon != NULL && m->desk != NULL) { if (was_focused) { update_focused(); } else if (was_active) { activate_node(m, m->desk, m->desk->focus); } } put_status(SBSC_MASK_REPORT); }
void remove_monitor(monitor_t *m) { while (m->desk_head != NULL) { remove_desktop(m, m->desk_head); } monitor_t *prev = m->prev; monitor_t *next = m->next; monitor_t *last_mon = history_last_monitor(m); if (prev != NULL) { prev->next = next; } if (next != NULL) { next->prev = prev; } if (mon_head == m) { mon_head = next; } if (mon_tail == m) { mon_tail = prev; } if (pri_mon == m) { pri_mon = NULL; } if (mon == m) { mon = (last_mon == NULL ? (prev == NULL ? next : prev) : last_mon); if (mon != NULL && mon->desk != NULL) { update_focused(); } } put_status(SBSC_MASK_MONITOR_REMOVE, "monitor_remove 0x%08X\n", m->id); xcb_destroy_window(dpy, m->root); free(m); put_status(SBSC_MASK_REPORT); }