diff --git a/src/dwm.c b/src/dwm.c index 0113532..e78c3d9 100644 --- a/src/dwm.c +++ b/src/dwm.c @@ -289,31 +289,40 @@ int applysizehints( int bw, int interact ) { - int baseismin; Monitor *m = c->mon; /* set minimum possible */ *w = MAX(1, *w); *h = MAX(1, *h); + if (interact) { - if (*x > sw) + if (*x > sw) { *x = sw - WIDTH(c); - if (*y > sh) + } + if (*y > sh) { *y = sh - HEIGHT(c); - if (*x + *w + 2 * bw < 0) + } + if (*x + *w + 2 * bw < 0) { *x = 0; - if (*y + *h + 2 * bw < 0) + } + if (*y + *h + 2 * bw < 0) { *y = 0; + } } else { - if (*x >= m->wx + m->ww) + if (*x >= m->wx + m->ww) { *x = m->wx + m->ww - WIDTH(c); - if (*y >= m->wy + m->wh) + } + if (*y >= m->wy + m->wh) { *y = m->wy + m->wh - HEIGHT(c); - if (*x + *w + 2 * bw <= m->wx) + } + if (*x + *w + 2 * bw <= m->wx) { *x = m->wx; - if (*y + *h + 2 * bw <= m->wy) + } + if (*y + *h + 2 * bw <= m->wy) { *y = m->wy; + } } + if ( c->isfloating || @@ -324,35 +333,49 @@ int applysizehints( ) ) { /* see last two sentences in ICCCM 4.1.2.3 */ - baseismin = c->basew == c->minw && c->baseh == c->minh; - if (!baseismin) { /* temporarily remove base dimensions */ + const int baseismin = c->basew == c->minw && c->baseh == c->minh; + + /* temporarily remove base dimensions */ + if (!baseismin) { *w -= c->basew; *h -= c->baseh; } + /* adjust for aspect limits */ if (c->mina > 0 && c->maxa > 0) { - if (c->maxa < (float)*w / *h) + if (c->maxa < (float)*w / *h) { *w = *h * c->maxa + 0.5; - else if (c->mina < (float)*h / *w) + } else if (c->mina < (float)*h / *w) { *h = *w * c->mina + 0.5; + } } - if (baseismin) { /* increment calculation requires this */ + + /* increment calculation requires this */ + if (baseismin) { *w -= c->basew; *h -= c->baseh; } + /* adjust for increment value */ - if (c->incw) + if (c->incw) { *w -= *w % c->incw; - if (c->inch) + } + if (c->inch) { *h -= *h % c->inch; + } + /* restore base dimensions */ *w = MAX(*w + c->basew, c->minw); *h = MAX(*h + c->baseh, c->minh); - if (c->maxw) + + if (c->maxw) { *w = MIN(*w, c->maxw); - if (c->maxh) + } + if (c->maxh) { *h = MIN(*h, c->maxh); + } } + return *x != c->x || *y != c->y || *w != c->w || *h != c->h || bw != c->bw; }