]> Dogcows Code - chaz/openbox/commitdiff
don't let the user toggle decorations on widnows that don't have any decorations...
authorDana Jansens <danakj@orodu.net>
Thu, 17 May 2007 02:29:13 +0000 (02:29 +0000)
committerDana Jansens <danakj@orodu.net>
Thu, 17 May 2007 02:29:13 +0000 (02:29 +0000)
openbox/client.c
openbox/client.h
openbox/client_menu.c

index bca2261c6eb393248f202650d4630de8782bf6ab..addaed44f8c1f14fd531bb1570c6766446c3d1ae 100644 (file)
@@ -1585,7 +1585,8 @@ void client_setup_decor_and_functions(ObClient *self)
          OB_CLIENT_FUNC_SHADE |
          OB_CLIENT_FUNC_CLOSE |
          OB_CLIENT_FUNC_BELOW |
-         OB_CLIENT_FUNC_ABOVE);
+         OB_CLIENT_FUNC_ABOVE |
+         OB_CLIENT_FUNC_UNDECORATE);
 
     if (!(self->min_size.width < self->max_size.width ||
           self->min_size.height < self->max_size.height))
@@ -1684,6 +1685,11 @@ void client_setup_decor_and_functions(ObClient *self)
     if (self->max_vert && self->max_horz)
         self->decorations &= ~(OB_FRAME_DECOR_HANDLE | OB_FRAME_DECOR_GRIPS);
 
+    /* If there are no decorations to remove, don't allow the user to try
+       toggle the state */
+    if (self->decorations == 0)
+        self->functions &= ~OB_CLIENT_FUNC_UNDECORATE;
+
     /* finally, the user can have requested no decorations, which overrides
        everything (but doesnt give it a border if it doesnt have one) */
     if (self->undecorated) {
@@ -3571,7 +3577,11 @@ void client_set_layer(ObClient *self, gint layer)
 
 void client_set_undecorated(ObClient *self, gboolean undecorated)
 {
-    if (self->undecorated != undecorated) {
+    if (self->undecorated != undecorated &&
+        /* don't let it undecorate if the function is missing, but let 
+           it redecorate */
+        (self->functions & OB_CLIENT_FUNC_UNDECORATE || !undecorated))
+    {
         self->undecorated = undecorated;
         client_setup_decor_and_functions(self);
         client_change_state(self); /* reflect this in the state hints */
index 2cc64a5c26fb8b3d90a58b16d386b452f91a0072..05153eb0008fa14dc0523a1d431c97382bf537c4 100644 (file)
@@ -73,7 +73,8 @@ typedef enum
     OB_CLIENT_FUNC_FULLSCREEN = 1 << 5, /*!< Allow to be made fullscreen */
     OB_CLIENT_FUNC_CLOSE      = 1 << 6, /*!< Allow to be closed */
     OB_CLIENT_FUNC_ABOVE      = 1 << 7, /*!< Allow to be put in lower layer */
-    OB_CLIENT_FUNC_BELOW      = 1 << 8  /*!< Allow to be put in higher layer */
+    OB_CLIENT_FUNC_BELOW      = 1 << 8, /*!< Allow to be put in higher layer */
+    OB_CLIENT_FUNC_UNDECORATE = 1 << 9  /*!< Allow to be undecorated */
 } ObFunctions;
 
 struct _ObClient
index 310462458d7bea0762bfecccf214bcee96c67807..6fa744c41b8545790886c873251a921e4b4f7b6a 100644 (file)
@@ -91,7 +91,7 @@ static gboolean client_menu_update(ObMenuFrame *frame, gpointer data)
                 *en = c->functions & OB_CLIENT_FUNC_CLOSE;
                 break;
             case CLIENT_DECORATE:
-                *en = client_normal(c);
+                *en = c->functions & OB_CLIENT_FUNC_UNDECORATE;
                 break;
             default:
                 *en = TRUE;
This page took 0.030729 seconds and 4 git commands to generate.