do try_configure to find out what width the window will actually be, before adjust...
authorDana Jansens <danakj@orodu.net>
Mon, 28 May 2007 01:42:50 +0000 (01:42 +0000)
committerDana Jansens <danakj@orodu.net>
Mon, 28 May 2007 01:42:50 +0000 (01:42 +0000)
openbox/event.c

index 105d6ab..f3ed676 100644 (file)
@@ -1008,8 +1008,12 @@ static void event_handle_client(ObClient *client, XEvent *e)
         RECT_TO_DIMS(client->area, x, y, w, h);
         b = client->border_width;
 
-        ob_debug("ConfigureRequest desktop %d wmstate %d visibile %d\n",
-                 screen_desktop, client->wmstate, client->frame->visible);
+        ob_debug("ConfigureRequest for \"%s\" desktop %d wmstate %d "
+                 "visibile %d\n"
+                 "                     x %d y %d w %d h %d b %d\n",
+                 client->title,
+                 screen_desktop, client->wmstate, client->frame->visible,
+                 x, y, w, h, b);
 
         if (e->xconfigurerequest.value_mask & CWBorderWidth)
             if (client->border_width != e->xconfigurerequest.border_width) {
@@ -1038,10 +1042,10 @@ static void event_handle_client(ObClient *client, XEvent *e)
             move = TRUE;
         }
 
-        if (e->xconfigurerequest.value_mask & CWX ||
-            e->xconfigurerequest.value_mask & CWY ||
-            e->xconfigurerequest.value_mask & CWWidth ||
-            e->xconfigurerequest.value_mask & CWHeight)
+        if ((e->xconfigurerequest.value_mask & CWX) ||
+            (e->xconfigurerequest.value_mask & CWY) ||
+            (e->xconfigurerequest.value_mask & CWWidth) ||
+            (e->xconfigurerequest.value_mask & CWHeight))
         {
             if (e->xconfigurerequest.value_mask & CWX) {
                 /* don't allow clients to move shaded windows (fvwm does this)
@@ -1061,20 +1065,10 @@ static void event_handle_client(ObClient *client, XEvent *e)
             if (e->xconfigurerequest.value_mask & CWWidth) {
                 w = e->xconfigurerequest.width;
                 resize = TRUE;
-
-                /* if x was not given, then use gravity to figure out the new
-                   x.  the reference point should not be moved */
-                if (!(e->xconfigurerequest.value_mask & CWX))
-                    client_gravity_resize_w(client, &x, client->area.width, w);
             }
             if (e->xconfigurerequest.value_mask & CWHeight) {
                 h = e->xconfigurerequest.height;
                 resize = TRUE;
-
-                /* if y was not given, then use gravity to figure out the new
-                   y.  the reference point should not be moved */
-                if (!(e->xconfigurerequest.value_mask & CWY))
-                    client_gravity_resize_h(client, &y, client->area.height,h);
             }
         }
 
@@ -1118,8 +1112,20 @@ static void event_handle_client(ObClient *client, XEvent *e)
             gint lw,lh;
 
             if (move || resize) {
-                client_find_onscreen(client, &x, &y, w, h, FALSE);
                 client_try_configure(client, &x, &y, &w, &h, &lw, &lh, FALSE);
+
+                /* if x was not given, then use gravity to figure out the new
+                   x.  the reference point should not be moved */
+                if ((e->xconfigurerequest.value_mask & CWWidth &&
+                     !(e->xconfigurerequest.value_mask & CWX)))
+                    client_gravity_resize_w(client, &x, client->area.width, w);
+                /* if y was not given, then use gravity to figure out the new
+                   y.  the reference point should not be moved */
+                if ((e->xconfigurerequest.value_mask & CWHeight &&
+                     !(e->xconfigurerequest.value_mask & CWY)))
+                    client_gravity_resize_h(client, &y, client->area.height,h);
+
+                client_find_onscreen(client, &x, &y, w, h, FALSE);
             }
             /* if they requested something that moves the window, or if
                the window is actually being changed then configure it and
@@ -1127,7 +1133,9 @@ static void event_handle_client(ObClient *client, XEvent *e)
             if (move || !RECT_EQUAL_DIMS(client->area, x, y, w, h) ||
                 border)
             {
-                ob_debug("Doing configure\n");
+                ob_debug("Granting ConfigureRequest x %d y %d w %d h %d "
+                         "b %d\n",
+                         x, y, w, h, b);
                 client_configure(client, x, y, w, h, b, FALSE, TRUE);
             }