]> Dogcows Code - chaz/openbox/blobdiff - openbox/client.c
add a shaded button
[chaz/openbox] / openbox / client.c
index 95d1e97e1539613eb1c7b4c19a33017fac88fa2d..361d57cd8a01a9fbb034a3e798bebcc9fb180750 100644 (file)
@@ -747,7 +747,8 @@ void client_setup_decor_and_functions(Client *self)
 {
     /* start with everything (cept fullscreen) */
     self->decorations = Decor_Titlebar | Decor_Handle | Decor_Border |
-       Decor_Icon | Decor_AllDesktops | Decor_Iconify | Decor_Maximize;
+       Decor_Icon | Decor_AllDesktops | Decor_Iconify | Decor_Maximize |
+        Decor_Shade;
     self->functions = Func_Resize | Func_Move | Func_Iconify | Func_Maximize |
        Func_Shade;
     if (self->delete_window) {
@@ -842,6 +843,8 @@ void client_setup_decor_and_functions(Client *self)
        self->decorations &= ~Decor_Maximize;
     if (self->disabled_decorations & Decor_AllDesktops)
        self->decorations &= ~Decor_AllDesktops;
+    if (self->disabled_decorations & Decor_Shade)
+       self->decorations &= ~Decor_Shade;
     if (self->disabled_decorations & Decor_Close)
        self->decorations &= ~Decor_Close;
 
@@ -1316,6 +1319,11 @@ void client_configure(Client *self, Corner anchor, int x, int y, int w, int h,
 {
     gboolean moved = FALSE, resized = FALSE;
 
+    /* gets the frame's position */
+    frame_client_gravity(self->frame, &x, &y);
+
+    /* these positions are frame positions, not client positions */
+
     /* set the size and position if fullscreen */
     if (self->fullscreen) {
        x = 0;
@@ -1335,6 +1343,9 @@ void client_configure(Client *self, Corner anchor, int x, int y, int w, int h,
         }
     }
 
+    /* gets the client's position */
+    frame_frame_gravity(self->frame, &x, &y);
+
     /* these override the above states! if you cant move you can't move! */
     if (user) {
         if (!(self->functions & Func_Move)) {
@@ -1605,13 +1616,6 @@ void client_maximize(Client *self, gboolean max, int dir, gboolean savearea)
            PROP_SET32A(self->window, openbox_premax, cardinal,
                        dimensions, 4);
        }
-
-        /* pass the client's current position info. the client_configure
-           will move/size stuff as appropriate for a maximized window */
-        x = self->area.x;
-        y = self->area.y;
-        w = self->area.width;
-        h = self->area.height;
     } else {
        long *dimensions;
 
@@ -1658,7 +1662,7 @@ void client_maximize(Client *self, gboolean max, int dir, gboolean savearea)
 
 void client_shade(Client *self, gboolean shade)
 {
-    if (!(self->functions & Func_Shade) || /* can't */
+    if ((!(self->functions & Func_Shade) && shade) || /* can't shade */
        self->shaded == shade) return;     /* already done */
 
     /* when we're iconic, don't change the wmstate */
This page took 0.023208 seconds and 4 git commands to generate.