void mons_coljoin(void)
{
Monitor* mon = pickmon();
- Column* col = pickcol(mon->cspace->columns, PtrX);
- if (col->next)
+ Column* dest = pickcol(mon->cspace->columns, PtrX);
+ Column* dead = dest->next;
+ if (!dead)
+ {
+ dead = dest;
+ dest = list_prev(mon->cspace->columns, dead);
+ }
+
+ if (dest && dead)
{
/* add the clients to the current col */
- for (Client* c = col->next->clients; c;)
+ for (Client* c = dead->clients; c;)
{
Client* next = c->next;
- if (col->focused)
+ if (dest->focused)
{
- monocled_add(mon, col, c);
+ monocled_add(mon, dest, c);
}
else
{
- stacked_add(mon, col, c);
+ stacked_add(mon, dest, c);
}
c = next;
}
- Column* dead = col->next;
- col->next = dead->next;
- col->width += dead->width;
+ dest->next = dead->next;
+ dest->width += dead->width;
free(dead);
- adjust_all(col, 0);
+ adjust_all(dest, 0);
}
}