add a config option hideDisabled in the theme section that hides disabled buttons...
authorMikael Magnusson <mikachu@comhem.se>
Thu, 14 Jul 2005 13:44:33 +0000 (13:44 +0000)
committerMikael Magnusson <mikachu@comhem.se>
Thu, 14 Jul 2005 13:44:33 +0000 (13:44 +0000)
data/rc.xsd
openbox/config.c
openbox/config.h
openbox/frame.c

index 7cdc590..3c6c47b 100644 (file)
             <xs:element name="name" type="xs:string"/>
             <xs:element name="titlelayout" type="xs:string"/>
             <xs:element name="keepBorder" type="ob:yesorno"/>
+            <xs:element name="hideDisabled" type="ob:yesorno"/>
         </xs:sequence>
     </xs:complexType>
     <xs:complexType name="desktops">
index 8c86b97..c43db93 100644 (file)
@@ -35,6 +35,7 @@ ObPlacePolicy config_place_policy;
 
 gchar   *config_theme;
 gboolean config_theme_keepborder;
+gboolean config_theme_hidedisabled;
 
 gchar *config_title_layout;
 
@@ -256,6 +257,8 @@ static void parse_theme(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
     }
     if ((n = parse_find_node("keepBorder", node)))
         config_theme_keepborder = parse_bool(doc, n);
+    if ((n = parse_find_node("hideDisabled", node)))
+        config_theme_hidedisabled = parse_bool(doc, n);
 }
 
 static void parse_desktops(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
@@ -556,6 +559,7 @@ void config_startup(ObParseInst *i)
 
     config_title_layout = g_strdup("NLIMC");
     config_theme_keepborder = TRUE;
+    config_theme_hidedisabled = FALSE;
 
     parse_register(i, "theme", parse_theme, NULL);
 
index b04d06a..5be26ef 100644 (file)
@@ -84,6 +84,8 @@ extern gchar *config_theme;
 
 /* Show the onepixel border after toggleDecor */
 extern gboolean config_theme_keepborder;
+/* Hide window frame buttons that the window doesn't allow */
+extern gboolean config_theme_hidedisabled;
 /* Titlebar button layout */
 extern gchar *config_title_layout;
 
index fcad427..f390887 100644 (file)
@@ -579,18 +579,24 @@ static void layout_title(ObFrame *self)
             break;
         case 'D':
             if (d) { *lc = ' '; break; }
+            if (!(self->decorations & OB_FRAME_DECOR_ALLDESKTOPS) && config_theme_hidedisabled)
+                break;
             d = TRUE;
             self->label_width -= (ob_rr_theme->button_size +
                                   ob_rr_theme->padding + 1);
             break;
         case 'S':
             if (s) { *lc = ' '; break; }
+            if (!(self->decorations & OB_FRAME_DECOR_SHADE) && config_theme_hidedisabled)
+                break;
             s = TRUE;
             self->label_width -= (ob_rr_theme->button_size +
                                   ob_rr_theme->padding + 1);
             break;
         case 'I':
             if (i) { *lc = ' '; break; }
+            if (!(self->decorations & OB_FRAME_DECOR_ICONIFY) && config_theme_hidedisabled)
+                break;
             i = TRUE;
             self->label_width -= (ob_rr_theme->button_size +
                                   ob_rr_theme->padding + 1);
@@ -601,12 +607,16 @@ static void layout_title(ObFrame *self)
             break;
         case 'M':
             if (m) { *lc = ' '; break; }
+            if (!(self->decorations & OB_FRAME_DECOR_MAXIMIZE) && config_theme_hidedisabled)
+                break;
             m = TRUE;
             self->label_width -= (ob_rr_theme->button_size +
                                   ob_rr_theme->padding + 1);
             break;
         case 'C':
             if (c) { *lc = ' '; break; }
+            if (!(self->decorations & OB_FRAME_DECOR_CLOSE) && config_theme_hidedisabled)
+                break;
             c = TRUE;
             self->label_width -= (ob_rr_theme->button_size +
                                   ob_rr_theme->padding + 1);