Re: [dwm] resize hints logic patch

From: Anselm R. Garbe <arg_AT_suckless.org>
Date: Tue, 16 Oct 2007 19:08:35 +0200

Applied into hg tip, though I ask others to recheck if this
really does not break anything ;)

Thanks Eric!

Regards,
        Anselm

On Sun, Oct 14, 2007 at 04:04:55AM -0700, Eric Mertens wrote:
> Hello,
>
> When using dwm I noticed that mplayer was not being resized using the
> window hints correctly. I fixed the issue on my local copy of the
> source and I wanted to share
>
> I wasn't sure what the most appropriate way to share this change was,
> so I have included the "hg diff" output and the "hg bundle" output.
> --
> Eric Mertens

> diff -r e50c3eb0f55a dwm.c
> --- a/dwm.c Thu Oct 11 20:50:01 2007 +0200
> +++ b/dwm.c Sun Oct 14 04:01:33 2007 -0700
> @@ -1150,39 +1150,42 @@ resize(Client *c, int x, int y, int w, i
> XWindowChanges wc;
>
> if(sizehints) {
> - if(c->minay > 0 && c->maxay > 0 && (h - c->baseh) > 0 && (w - c->basew) > 0) {
> - dx = (double)(w - c->basew);
> - dy = (double)(h - c->baseh);
> - min = (double)(c->minax) / (double)(c->minay);
> - max = (double)(c->maxax) / (double)(c->maxay);
> - ratio = dx / dy;
> - if(max > 0 && min > 0 && ratio > 0) {
> - if(ratio < min) {
> - dy = (dx * min + dy) / (min * min + 1);
> - dx = dy * min;
> - w = (int)dx + c->basew;
> - h = (int)dy + c->baseh;
> - }
> - else if(ratio > max) {
> - dy = (dx * min + dy) / (max * max + 1);
> - dx = dy * min;
> - w = (int)dx + c->basew;
> - h = (int)dy + c->baseh;
> - }
> - }
> - }
> - if(c->minw && w < c->minw)
> + /* set minimum possible */
> + if (w < 1)
> + w = 1;
> + if (h < 1)
> + h = 1;
> +
> + /* temporarily remove base dimensions */
> + w -= c->basew;
> + h -= c->baseh;
> +
> + /* adjust for aspect limits */
> + if (c->minay > 0 && c->maxay > 0 && c->minax > 0 && c->maxax > 0) {
> + if (w * c->maxay > h * c->maxax)
> + w = h * c->maxax / c->maxay;
> + else if (w * c->minay < h * c->minax)
> + h = w * c->minay / c->minax;
> + }
> +
> + /* adjust for increment value */
> + if(c->incw)
> + w -= w % c->incw;
> + if(c->inch)
> + h -= h % c->inch;
> +
> + /* restore base dimensions */
> + w += c->basew;
> + h += c->baseh;
> +
> + if(c->minw > 0 && w < c->minw)
> w = c->minw;
> - if(c->minh && h < c->minh)
> + if(c->minh > 0 && h < c->minh)
> h = c->minh;
> - if(c->maxw && w > c->maxw)
> + if(c->maxw > 0 && w > c->maxw)
> w = c->maxw;
> - if(c->maxh && h > c->maxh)
> + if(c->maxh > 0 && h > c->maxh)
> h = c->maxh;
> - if(c->incw)
> - w -= (w - c->basew) % c->incw;
> - if(c->inch)
> - h -= (h - c->baseh) % c->inch;
> }
> if(w <= 0 || h <= 0)
> return;

-- 
 Anselm R. Garbe >< http://www.suckless.org/ >< GPG key: 0D73F361
Received on Tue Oct 16 2007 - 19:08:35 UTC

This archive was generated by hypermail 2.2.0 : Sun Jul 13 2008 - 14:59:50 UTC