summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-06-08 21:38:06 +0000
committerDana Jansens <danakj@orodu.net>2003-06-08 21:38:06 +0000
commit05e52e3c8e7d694b2ec977279655d467db4c07c6 (patch)
treee1c4630e349d949cb9c0dc3086a07d4e52f61387
parentbda9e6aaf969e3536e23c3efb771d7d828ddfae8 (diff)
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.
-rw-r--r--openbox/client.c59
1 files 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) {