X-Git-Url: https://git.xinqibao.xyz/dwm.git/blobdiff_plain/06bae9dfb7902c97877f3493cf4b489ccf531089..0b7c0f10eeee1c473b1adcee3a8b90db61b854e9:/view.c diff --git a/view.c b/view.c index 2143d70..b72e4d5 100644 --- a/view.c +++ b/view.c @@ -32,17 +32,21 @@ pop(Client *c) { static void swap(Client *c1, Client *c2) { Client tmp = *c1; - Client *cp = c1->prev; - Client *cn = c1->next; + Client *c1p = c1->prev; + Client *c1n = c1->next; + Client *c1s = c1->snext; + Client *c2p = c2->prev; + Client *c2n = c2->next; + Client *c2s = c2->snext; *c1 = *c2; - c1->prev = cp; - c1->next = cn; - cp = c2->prev; - cn = c2->next; *c2 = tmp; - c2->prev = cp; - c2->next = cn; + c1->prev = c1p; + c1->next = c1n; + c1->snext = c1s; + c2->prev = c2p; + c2->next = c2n; + c2->snext = c2s; } static void @@ -192,7 +196,7 @@ focusprev(Arg *arg) { void incnmaster(Arg *arg) { - if(nmaster + arg->i < 1) + if((nmaster + arg->i < 1) || (wah / (nmaster + arg->i) < bh)) return; nmaster += arg->i; arrange(); @@ -302,10 +306,13 @@ zoom(Arg *arg) { } for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next)) n++; - if(n <= nmaster || (arrange == dofloat)) - return; - if(ismaster((c = sel))) { + c = sel; + if(arrange == dofloat) + return; + else if(n <= nmaster) + pop(c); + else if(ismaster(sel)) { if(!(c = topofstack())) return; swap(c, sel);