From 05e52e3c8e7d694b2ec977279655d467db4c07c6 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 8 Jun 2003 21:38:06 +0000 Subject: [PATCH] some more fixes for resizing clients. aspect ratio is not the last thing checked and so rules all, that might need to change.. however, it now uses base-size only for aspect ratios and base-size/min-size for other sizing shit, as per the ICCCM. --- openbox/client.c | 59 ++++++++++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/openbox/client.c b/openbox/client.c index adc6ce0d..ec075b4c 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -1601,7 +1601,6 @@ void client_configure(Client *self, Corner anchor, int x, int y, int w, int h, gboolean user, gboolean final) { gboolean moved = FALSE, resized = FALSE; - int basew, baseh, minw, minh; /* gets the frame's position */ frame_client_gravity(self->frame, &x, &y); @@ -1658,23 +1657,26 @@ void client_configure(Client *self, Corner anchor, int x, int y, int w, int h, } } - /* find the base and min sizes */ - if (self->base_size.width || self->base_size.height) { - basew = self->base_size.width; - baseh = self->base_size.height; - } else { - basew = self->min_size.width; - baseh = self->min_size.height; - } - if (self->min_size.width || self->min_size.height) { - minw = self->min_size.width; - minh = self->min_size.height; - } else { - minw = self->base_size.width; - minh = self->base_size.height; - } - if (!(w == self->area.width && h == self->area.height)) { + int basew, baseh, minw, minh; + + /* base size is substituted with min size if not specified */ + if (self->base_size.width || self->base_size.height) { + basew = self->base_size.width; + baseh = self->base_size.height; + } else { + basew = self->min_size.width; + baseh = self->min_size.height; + } + /* min size is substituted with base size if not specified */ + if (self->min_size.width || self->min_size.height) { + minw = self->min_size.width; + minh = self->min_size.height; + } else { + minw = self->base_size.width; + minh = self->base_size.height; + } + w -= basew; h -= baseh; @@ -1697,19 +1699,13 @@ void client_configure(Client *self, Corner anchor, int x, int y, int w, int h, h += ah; /* if this is a user-requested resize, then check against min/max - sizes and aspect ratios */ + sizes */ /* smaller than min size or bigger than max size? */ if (w > self->max_size.width) w = self->max_size.width; if (w < minw) w = minw; if (h > self->max_size.height) h = self->max_size.height; if (h < minh) h = minh; - - /* adjust the height ot match the width for the aspect ratios */ - if (self->min_ratio) - if (h * self->min_ratio > w) h = (int)(w / self->min_ratio); - if (self->max_ratio) - if (h * self->max_ratio < w) h = (int)(w / self->max_ratio); } /* keep to the increments */ @@ -1728,6 +1724,21 @@ void client_configure(Client *self, Corner anchor, int x, int y, int w, int h, w += basew; h += baseh; + + if (user) { + /* adjust the height to match the width for the aspect ratios. + for this, min size is not substituted for base size ever. */ + w -= self->base_size.width; + h -= self->base_size.height; + + if (self->min_ratio) + if (h * self->min_ratio > w) h = (int)(w / self->min_ratio); + if (self->max_ratio) + if (h * self->max_ratio < w) h = (int)(w / self->max_ratio); + + w += self->base_size.width; + h += self->base_size.height; + } } switch (anchor) { -- 2.39.2