JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
fixed configurerequest according to the problem Jukka reported
authorAnselm R. Garbe <arg@suckless.org>
Mon, 19 Feb 2007 10:03:27 +0000 (11:03 +0100)
committerAnselm R. Garbe <arg@suckless.org>
Mon, 19 Feb 2007 10:03:27 +0000 (11:03 +0100)
event.c

diff --git a/event.c b/event.c
index e20a60a..fbce631 100644 (file)
--- a/event.c
+++ b/event.c
@@ -165,6 +165,7 @@ buttonpress(XEvent *e) {
 
 static void
 configurerequest(XEvent *e) {
+       int x, y, w, h;
        Client *c;
        XConfigureRequestEvent *ev = &e->xconfigurerequest;
        XWindowChanges wc;
@@ -174,20 +175,24 @@ configurerequest(XEvent *e) {
                if(ev->value_mask & CWBorderWidth)
                        c->border = ev->border_width;
                if(c->isfixed || c->isfloat || (arrange == dofloat)) {
-                       if(ev->value_mask & CWX)
-                               c->x = ev->x;
-                       if(ev->value_mask & CWY)
-                               c->y = ev->y;
-                       if(ev->value_mask & CWWidth)
-                               c->w = ev->width;
-                       if(ev->value_mask & CWHeight)
-                               c->h = ev->height;
+                       x = (ev->value_mask & CWX) ? ev->x : c->x;
+                       y = (ev->value_mask & CWY) ? ev->y : c->y;
+                       w = (ev->value_mask & CWWidth) ? ev->width : c->w;
+                       h = (ev->value_mask & CWHeight) ? ev->height : c->h;
                        if((ev->value_mask & (CWX | CWY))
                        && !(ev->value_mask & (CWWidth | CWHeight)))
+                       {
+                               c->x = x;
+                               c->y = y;
                                configure(c);
-                       resize(c, c->x, c->y, c->w, c->h, False);
-                       if(!isvisible(c))
-                               ban(c);
+                               if(isvisible(c))
+                                       XMoveWindow(dpy, c->win, c->x, c->y);
+                       }
+                       else {
+                               resize(c, x, y, w, h, False);
+                               if(!isvisible(c))
+                                       ban(c);
+                       }
                }
                else
                        configure(c);