void transfer_desktop(monitor_t *ms, monitor_t *md, desktop_t *d) { if (ms == md) return; desktop_t *dd = ms->desk; unlink_desktop(ms, d); insert_desktop(md, d); if (d == dd) { if (ms->desk != NULL) show_desktop(ms->desk); if (md->desk != d) hide_desktop(d); } for (node_t *n = first_extrema(d->root); n != NULL; n = next_leaf(n, d->root)) translate_client(ms, md, n->client); arrange(md, d); if (d != dd && md->desk == d) show_desktop(d); history_transfer_desktop(md, d); ewmh_update_wm_desktops(); ewmh_update_desktop_names(); ewmh_update_current_desktop(); put_status(); }
void add_desktop(monitor_t *m, desktop_t *d) { put_status(SBSC_MASK_DESKTOP_ADD, "desktop_add %s %s\n", m->name, d->name); insert_desktop(m, d); ewmh_update_number_of_desktops(); ewmh_update_desktop_names(); ewmh_update_wm_desktops(); put_status(SBSC_MASK_REPORT); }
void add_desktop(monitor_t *m, desktop_t *d) { put_status(SBSC_MASK_DESKTOP_ADD, "desktop_add 0x%08X %s 0x%08X\n", d->id, d->name, m->id); d->border_width = m->border_width; d->window_gap = m->window_gap; insert_desktop(m, d); ewmh_update_number_of_desktops(); ewmh_update_desktop_names(); ewmh_update_wm_desktops(); put_status(SBSC_MASK_REPORT); }
bool transfer_desktop(monitor_t *ms, monitor_t *md, desktop_t *d) { if (ms == NULL || md == NULL || d == NULL || ms == md) { return false; } bool was_active = (d == ms->desk); unlink_desktop(ms, d); if (md->desk != NULL) { hide_desktop(d); } insert_desktop(md, d); history_transfer_desktop(md, d); if (was_active) { if (mon == ms) { focus_node(ms, NULL, NULL); } else { activate_node(ms, NULL, NULL); } } if (ms->sticky_count > 0 && was_active) { sticky_still = false; transfer_sticky_nodes(ms, d, ms->desk, d->root); sticky_still = true; } adapt_geometry(&ms->rectangle, &md->rectangle, d->root); arrange(md, d); if (md->desk == d) { if (mon == md) { focus_node(md, d, d->focus); } else { activate_node(md, d, d->focus); } } ewmh_update_wm_desktops(); ewmh_update_desktop_names(); ewmh_update_current_desktop(); put_status(SBSC_MASK_DESKTOP_TRANSFER, "desktop_transfer 0x%08X 0x%08X 0x%08X\n", ms->id, d->id, md->id); put_status(SBSC_MASK_REPORT); return true; }
bool swap_monitors(monitor_t *m1, monitor_t *m2) { if (m1 == NULL || m2 == NULL || m1 == m2) { return false; } put_status(SBSC_MASK_MONITOR_SWAP, "monitor_swap 0x%08X 0x%08X\n", m1->id, m2->id); if (mon_head == m1) { mon_head = m2; } else if (mon_head == m2) { mon_head = m1; } if (mon_tail == m1) { mon_tail = m2; } else if (mon_tail == m2) { mon_tail = m1; } monitor_t *p1 = m1->prev; monitor_t *n1 = m1->next; monitor_t *p2 = m2->prev; monitor_t *n2 = m2->next; if (p1 != NULL && p1 != m2) { p1->next = m2; } if (n1 != NULL && n1 != m2) { n1->prev = m2; } if (p2 != NULL && p2 != m1) { p2->next = m1; } if (n2 != NULL && n2 != m1) { n2->prev = m1; } m1->prev = p2 == m1 ? m2 : p2; m1->next = n2 == m1 ? m2 : n2; m2->prev = p1 == m2 ? m1 : p1; m2->next = n1 == m2 ? m1 : n1; ewmh_update_wm_desktops(); ewmh_update_desktop_names(); ewmh_update_desktop_viewport(); ewmh_update_current_desktop(); put_status(SBSC_MASK_REPORT); return true; }
void swap_monitors(monitor_t *m1, monitor_t *m2) { if (m1 == NULL || m2 == NULL || m1 == m2) { return; } if (mon_head == m1) { mon_head = m2; } else if (mon_head == m2) { mon_head = m1; } if (mon_tail == m1) { mon_tail = m2; } else if (mon_tail == m2) { mon_tail = m1; } monitor_t *p1 = m1->prev; monitor_t *n1 = m1->next; monitor_t *p2 = m2->prev; monitor_t *n2 = m2->next; if (p1 != NULL && p1 != m2) { p1->next = m2; } if (n1 != NULL && n1 != m2) { n1->prev = m2; } if (p2 != NULL && p2 != m1) { p2->next = m1; } if (n2 != NULL && n2 != m1) { n2->prev = m1; } m1->prev = p2 == m1 ? m2 : p2; m1->next = n2 == m1 ? m2 : n2; m2->prev = p1 == m2 ? m1 : p1; m2->next = n1 == m2 ? m1 : n1; ewmh_update_wm_desktops(); ewmh_update_desktop_names(); ewmh_update_current_desktop(); put_status(SBSC_MASK_REPORT); }
void swap_monitors(monitor_t *m1, monitor_t *m2) { if (m1 == NULL || m2 == NULL || m1 == m2) return; if (mon_head == m1) mon_head = m2; else if (mon_head == m2) mon_head = m1; if (mon_tail == m1) mon_tail = m2; else if (mon_tail == m2) mon_tail = m1; monitor_t *p1 = m1->prev; monitor_t *n1 = m1->next; monitor_t *p2 = m2->prev; monitor_t *n2 = m2->next; if (p1 != NULL && p1 != m2) p1->next = m2; if (n1 != NULL && n1 != m2) n1->prev = m2; if (p2 != NULL && p2 != m1) p2->next = m1; if (n2 != NULL && n2 != m1) n2->prev = m1; m1->prev = p2 == m1 ? m2 : p2; m1->next = n2 == m1 ? m2 : n2; m2->prev = p1 == m2 ? m1 : p1; m2->next = n1 == m2 ? m1 : n1; ewmh_update_wm_desktops(); ewmh_update_desktop_names(); ewmh_update_current_desktop(); put_status(); }
bool swap_desktops(monitor_t *m1, desktop_t *d1, monitor_t *m2, desktop_t *d2) { if (d1 == NULL || d2 == NULL || d1 == d2 || (m1->desk == d1 && m1->sticky_count > 0) || (m2->desk == d2 && m2->sticky_count > 0)) { return false; } put_status(SBSC_MASK_DESKTOP_SWAP, "desktop_swap 0x%08X 0x%08X 0x%08X 0x%08X\n", m1->id, d1->id, m2->id, d2->id); bool d1_focused = (m1->desk == d1); bool d2_focused = (m2->desk == d2); if (m1 != m2) { if (m1->desk == d1) { m1->desk = d2; } if (m1->desk_head == d1) { m1->desk_head = d2; } if (m1->desk_tail == d1) { m1->desk_tail = d2; } if (m2->desk == d2) { m2->desk = d1; } if (m2->desk_head == d2) { m2->desk_head = d1; } if (m2->desk_tail == d2) { m2->desk_tail = d1; } } else { if (m1->desk == d1) { m1->desk = d2; } else if (m1->desk == d2) { m1->desk = d1; } if (m1->desk_head == d1) { m1->desk_head = d2; } else if (m1->desk_head == d2) { m1->desk_head = d1; } if (m1->desk_tail == d1) { m1->desk_tail = d2; } else if (m1->desk_tail == d2) { m1->desk_tail = d1; } } desktop_t *p1 = d1->prev; desktop_t *n1 = d1->next; desktop_t *p2 = d2->prev; desktop_t *n2 = d2->next; if (p1 != NULL && p1 != d2) { p1->next = d2; } if (n1 != NULL && n1 != d2) { n1->prev = d2; } if (p2 != NULL && p2 != d1) { p2->next = d1; } if (n2 != NULL && n2 != d1) { n2->prev = d1; } d1->prev = p2 == d1 ? d2 : p2; d1->next = n2 == d1 ? d2 : n2; d2->prev = p1 == d2 ? d1 : p1; d2->next = n1 == d2 ? d1 : n1; if (m1 != m2) { adapt_geometry(&m1->rectangle, &m2->rectangle, d1->root); adapt_geometry(&m2->rectangle, &m1->rectangle, d2->root); history_swap_desktops(m1, d1, m2, d2); arrange(m1, d2); arrange(m2, d1); } if (d1_focused && !d2_focused) { hide_desktop(d1); show_desktop(d2); } else if (!d1_focused && d2_focused) { show_desktop(d1); hide_desktop(d2); } if (d1 == mon->desk) { focus_node(m2, d1, d1->focus); } else if (d1 == m2->desk) { activate_node(m2, d1, d1->focus); } if (d2 == mon->desk) { focus_node(m1, d2, d2->focus); } else if (d2 == m1->desk) { activate_node(m1, d2, d2->focus); } ewmh_update_wm_desktops(); ewmh_update_desktop_names(); ewmh_update_current_desktop(); put_status(SBSC_MASK_REPORT); return true; }
void swap_desktops(monitor_t *m1, desktop_t *d1, monitor_t *m2, desktop_t *d2) { if (d1 == NULL || d2 == NULL || d1 == d2) return; PRINTF("swap desktops %s %s\n", d1->name, d2->name); bool d1_focused = (m1->desk == d1); bool d2_focused = (m2->desk == d2); if (m1 != m2) { if (m1->desk == d1) m1->desk = d2; if (m1->desk_head == d1) m1->desk_head = d2; if (m1->desk_tail == d1) m1->desk_tail = d2; if (m2->desk == d2) m2->desk = d1; if (m2->desk_head == d2) m2->desk_head = d1; if (m2->desk_tail == d2) m2->desk_tail = d1; } else { if (m1->desk_head == d1) m1->desk_head = d2; else if (m1->desk_head == d2) m1->desk_head = d1; if (m1->desk_tail == d1) m1->desk_tail = d2; else if (m1->desk_tail == d2) m1->desk_tail = d1; } desktop_t *p1 = d1->prev; desktop_t *n1 = d1->next; desktop_t *p2 = d2->prev; desktop_t *n2 = d2->next; if (p1 != NULL && p1 != d2) p1->next = d2; if (n1 != NULL && n1 != d2) n1->prev = d2; if (p2 != NULL && p2 != d1) p2->next = d1; if (n2 != NULL && n2 != d1) n2->prev = d1; d1->prev = p2 == d1 ? d2 : p2; d1->next = n2 == d1 ? d2 : n2; d2->prev = p1 == d2 ? d1 : p1; d2->next = n1 == d2 ? d1 : n1; if (m1 != m2) { for (node_t *n = first_extrema(d1->root); n != NULL; n = next_leaf(n, d1->root)) translate_client(m1, m2, n->client); for (node_t *n = first_extrema(d2->root); n != NULL; n = next_leaf(n, d2->root)) translate_client(m2, m1, n->client); history_swap_desktops(m1, d1, m2, d2); arrange(m1, d2); arrange(m2, d1); if (d1_focused && !d2_focused) { hide_desktop(d1); show_desktop(d2); } else if (!d1_focused && d2_focused) { show_desktop(d1); hide_desktop(d2); } } update_input_focus(); ewmh_update_wm_desktops(); ewmh_update_desktop_names(); ewmh_update_current_desktop(); put_status(); }