X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=client.c;h=c20c517e32ab9fc8275e6307fcd54ece44762df0;hb=cd8d8e120857329800e93e22572e35560d1b0e80;hp=34c69aa11e455b0952b9730f90267f55a209620f;hpb=72707c2fae68f5eba6ea97cbf356bfb968c8a15d;p=dwm.git diff --git a/client.c b/client.c index 34c69aa..c20c517 100644 --- a/client.c +++ b/client.c @@ -284,6 +284,7 @@ pop(Client *c) c->next->prev = c->prev; *l = c->next; + c->prev = NULL; if(clients) clients->prev = c; c->next = clients; @@ -292,30 +293,30 @@ pop(Client *c) } void -resize(Client *c, Bool inc, Corner sticky) +resize(Client *c, Bool sizehints, Corner sticky) { int bottom = c->y + c->h; int right = c->x + c->w; XConfigureEvent e; - if(inc) { + if(sizehints) { if(c->incw) c->w -= (c->w - c->basew) % c->incw; if(c->inch) c->h -= (c->h - c->baseh) % c->inch; + if(c->minw && c->w < c->minw) + c->w = c->minw; + if(c->minh && c->h < c->minh) + c->h = c->minh; + if(c->maxw && c->w > c->maxw) + c->w = c->maxw; + if(c->maxh && c->h > c->maxh) + c->h = c->maxh; } if(c->x > sw) /* might happen on restart */ c->x = sw - c->w; if(c->y > sh) c->y = sh - c->h; - if(c->minw && c->w < c->minw) - c->w = c->minw; - if(c->minh && c->h < c->minh) - c->h = c->minh; - if(c->maxw && c->w > c->maxw) - c->w = c->maxw; - if(c->maxh && c->h > c->maxh) - c->h = c->maxh; if(sticky == TopRight || sticky == BotRight) c->x = right - c->w; if(sticky == BotLeft || sticky == BotRight) @@ -475,7 +476,7 @@ unmanage(Client *c) void zoom(Arg *arg) { - Client *c; + Client *c, **l; if(!sel) return; @@ -485,6 +486,19 @@ zoom(Arg *arg) sel = c; } - pop(sel); + /* pop */ + for(l = &clients; *l && *l != sel; l = &(*l)->next); + if(sel->prev) + sel->prev->next = sel->next; + if(sel->next) + sel->next->prev = sel->prev; + *l = sel->next; + + sel->prev = NULL; + if(clients) + clients->prev = sel; + sel->next = clients; + clients = sel; + arrange(NULL); focus(sel); }