less configure events on mapping
authorDana Jansens <danakj@orodu.net>
Fri, 1 Jun 2007 05:21:09 +0000 (05:21 +0000)
committerDana Jansens <danakj@orodu.net>
Fri, 1 Jun 2007 05:21:09 +0000 (05:21 +0000)
openbox/client.c
openbox/frame.c

index 14d2210..e5666c0 100644 (file)
@@ -2566,6 +2566,8 @@ static void client_apply_startup_state(ObClient *self,
     gboolean demands_attention = self->demands_attention;
     gboolean max_horz = self->max_horz;
     gboolean max_vert = self->max_vert;
+    Rect oldarea;
+    gint l;
 
     /* turn them all off in the client, so they won't affect the window
        being placed */
@@ -2581,10 +2583,12 @@ static void client_apply_startup_state(ObClient *self,
        do this before applying the states so they have the correct
        pre-max/pre-fullscreen values
     */
-    client_configure(self, x, y, w, h, FALSE, TRUE);
+    client_try_configure(self, &x, &y, &w, &h, &l, &l, FALSE);
     ob_debug("placed window 0x%x at %d, %d with size %d x %d\n",
              self->window, self->area.x, self->area.y,
              self->area.width, self->area.height);
+    oldarea = self->area;              /* save the area */
+    RECT_SET(self->area, x, y, w, h);  /* put where it should be for the premax stuff */
 
     /* apply the states. these are in a carefully crafted order.. */
 
@@ -2606,6 +2610,12 @@ static void client_apply_startup_state(ObClient *self,
     else if (max_horz)
         client_maximize(self, TRUE, 1);
 
+    /* if the window hasn't been configured yet, then do so now */
+    if (!fullscreen && !max_vert && !max_horz) {
+        self->area = oldarea;
+        client_configure(self, x, y, w, h, FALSE, TRUE);
+    }
+
     /* set the desktop hint, to make sure that it always exists */
     PROP_SET32(self->window, net_wm_desktop, cardinal, self->desktop);
 
@@ -2931,13 +2941,6 @@ void client_configure(ObClient *self, gint x, gint y, gint w, gint h,
                           self->frame->size.left, self->frame->size.top, w, h);
     }
 
-    if (!resized) {
-        /* when the client has StaticGravity, it likes to move around.
-           also this correctly positions the client when it maps */
-        XMoveWindow(ob_display, self->window,
-                    self->frame->size.left, self->frame->size.top);
-    }
-
     XFlush(ob_display);
 }
 
index a8391e4..89358ac 100644 (file)
@@ -764,6 +764,11 @@ void frame_adjust_area(ObFrame *self, gboolean moved,
                               self->area.width,
                               self->area.height);
 
+        /* when the client has StaticGravity, it likes to move around.
+           also this correctly positions the client when it maps */
+        XMoveWindow(ob_display, self->client->window,
+                    self->size.left, self->size.top);
+
         if (resized) {
             framerender_frame(self);
             frame_adjust_shape(self);