]> Dogcows Code - chaz/openbox/blobdiff - openbox/client.c
a couple frame layout bugfixes hidden inside all this.. wee
[chaz/openbox] / openbox / client.c
index 1f1d80328e5bbeb21cbf492a332fea937f669ac4..685545a640a184194de2ba9bae26e75271104067 100644 (file)
@@ -1114,12 +1114,13 @@ void client_setup_decor_and_functions(ObClient *self)
     client_change_allowed_actions(self);
 
     if (self->frame) {
-        /* this makes sure that these windows appear on all desktops */
-        if (self->type == OB_CLIENT_TYPE_DESKTOP &&
-            self->desktop != DESKTOP_ALL)
-            client_set_desktop(self, DESKTOP_ALL, FALSE);
-
-       /* adjust the client's decorations, etc. */
+        if (self->decorations != self->frame->decorations)
+            /* adjust the client's decorations, etc. */
+            client_reconfigure(self);
+        /* we actually have to do this twice :P
+           the first time it removes the decorations, but now it may need to
+           be reconstrained for being maximized etc, so calling this again
+           will work with the new setup of decorations on the window */
        client_reconfigure(self);
     } else {
         /* this makes sure that these windows appear on all desktops */
@@ -1711,6 +1712,11 @@ void client_configure_full(ObClient *self, ObCorner anchor,
 {
     gboolean moved = FALSE, resized = FALSE;
 
+    /* make the frame recalculate its dimentions n shit without changing
+       anything visible for real, this way the constraints below can work with
+       the updated frame dimensions. */
+    frame_adjust_area(self->frame, TRUE, TRUE, TRUE);
+
     /* gets the frame's position */
     frame_client_gravity(self->frame, &x, &y);
 
@@ -1756,8 +1762,8 @@ void client_configure_full(ObClient *self, ObCorner anchor,
 
         /* set the size and position if maximized */
         if (self->max_horz) {
-            x = a->x - self->frame->size.left;
-            w = a->width;
+            x = a->x;
+            w = a->width - self->frame->size.left - self->frame->size.right;
         }
         if (self->max_vert) {
             y = a->y;
@@ -1899,7 +1905,7 @@ void client_configure_full(ObClient *self, ObCorner anchor,
             moved = resized = TRUE;
 
         if (moved || resized)
-            frame_adjust_area(self->frame, moved, resized);
+            frame_adjust_area(self->frame, moved, resized, FALSE);
 
         if (!resized && (force_reply || ((!user && moved) || (user && final))))
         {
@@ -2169,7 +2175,7 @@ void client_shade(ObClient *self, gboolean shade)
     self->shaded = shade;
     client_change_state(self);
     /* resize the frame to just the titlebar */
-    frame_adjust_area(self->frame, FALSE, FALSE);
+    frame_adjust_area(self->frame, FALSE, FALSE, FALSE);
 }
 
 void client_close(ObClient *self)
This page took 0.025116 seconds and 4 git commands to generate.