]> Dogcows Code - chaz/openbox/blobdiff - render/theme.c
remove the title separator width thing.
[chaz/openbox] / render / theme.c
index 97f5e1f5865df388219777d742fa36814b43e658..3e0f9d13d3cb9f49388212a422fc52c42f6413e1 100644 (file)
@@ -64,7 +64,8 @@ static gboolean find_appearance(ParseState *ps, xmlNodePtr n, const gchar *names
 /* shortcut to the various find_* functions */
 #define FIND(type, args...) find_##type(&ps, root, args)
 
-RrTheme* RrThemeNew(const RrInstance *inst, gchar *name,
+RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
+                    gboolean allow_fallback,
                     RrFont *active_window_font, RrFont *inactive_window_font,
                     RrFont *menu_title_font, RrFont *menu_item_font,
                     RrFont *osd_font)
@@ -79,22 +80,28 @@ RrTheme* RrThemeNew(const RrInstance *inst, gchar *name,
     if (name) {
         if (!parse_load_theme(name, &ps.doc, &root, &ps.path)) {
             g_message("Unable to load the theme '%s'", name);
-            g_message("Falling back to the default theme '%s'",
-                      DEFAULT_THEME);
+            if (allow_fallback)
+                g_message("Falling back to the default theme '%s'",
+                          DEFAULT_THEME);
             /* make it fall back to default theme */
             name = NULL;
         }
     }
-    if (!name) {
-        if (!parse_load_theme(DEFAULT_THEME, &ps.doc, &root, &ps.path)) {
-            g_message("Unable to load the theme '%s'", DEFAULT_THEME);
+    if (name == NULL) {
+        if (allow_fallback) {
+            if (!parse_load_theme(DEFAULT_THEME, &ps.doc, &root, &ps.path)) {
+                g_message("Unable to load the theme '%s'", DEFAULT_THEME);
+                return NULL;
+            }
+        } else
             return NULL;
-        }
     }
+
     ps.inst = inst;
 
     theme = g_new0(RrTheme, 1);
     theme->inst = inst;
+    theme->name = g_strdup(name ? name : DEFAULT_THEME);
 
     theme->a_disabled_focused_max = RrAppearanceNew(inst, 1);
     theme->a_disabled_unfocused_max = RrAppearanceNew(inst, 1);
@@ -214,6 +221,13 @@ RrTheme* RrThemeNew(const RrInstance *inst, gchar *name,
     if (!FIND(color, L("window","active","border"),
               &theme->frame_focused_border_color, NULL))
         theme->frame_focused_border_color = RrColorNew(inst, 0, 0, 0);
+    /* title separator focused color inherits from focused boder color */
+    if (!FIND(color, L("window","active","titleseparator"),
+              &theme->title_separator_focused_color, NULL))
+        theme->title_separator_focused_color =
+            RrColorNew(inst, theme->frame_focused_border_color->r,
+                       theme->frame_focused_border_color->g,
+                       theme->frame_focused_border_color->b);
     /* frame unfocused border color inherits from frame focused border color */
     if (!FIND(color, L("window","inactive","border"),
               &theme->frame_unfocused_border_color, NULL))
@@ -222,6 +236,13 @@ RrTheme* RrThemeNew(const RrInstance *inst, gchar *name,
                        theme->frame_focused_border_color->r,
                        theme->frame_focused_border_color->g,
                        theme->frame_focused_border_color->b);
+    /* title separator unfocused color inherits from unfocused boder color */
+    if (!FIND(color, L("window","inactive","titleseparator"),
+              &theme->title_separator_unfocused_color, NULL))
+        theme->title_separator_unfocused_color =
+            RrColorNew(inst, theme->frame_unfocused_border_color->r,
+                       theme->frame_unfocused_border_color->g,
+                       theme->frame_unfocused_border_color->b);
 
     /* menu border color inherits from frame focused border color */
     if (!FIND(color, L("menu","border"),
@@ -348,7 +369,7 @@ RrTheme* RrThemeNew(const RrInstance *inst, gchar *name,
     if (!FIND(color, L("menu","disabled","primary"),
               &theme->menu_disabled_color, NULL))
         theme->menu_disabled_color = RrColorNew(inst, 0, 0, 0);
-    if (!FIND(color, L("menu","activedisabled","text","primary"),
+    if (!FIND(color, L("menu","active-disabled","text","primary"),
               &theme->menu_disabled_selected_color, NULL))
         theme->menu_disabled_selected_color =
             RrColorNew(inst,
@@ -413,7 +434,7 @@ RrTheme* RrThemeNew(const RrInstance *inst, gchar *name,
         theme->menu_text_disabled_shadow_alpha = 
             theme->menu_text_normal_shadow_alpha;
     }
-    if (!FIND(color, L("menu","activedisabled","shadow","primary"),
+    if (!FIND(color, L("menu","active-disabled","shadow","primary"),
               &theme->menu_text_disabled_selected_shadow_color,
               &theme->menu_text_disabled_selected_shadow_alpha))
     {
@@ -576,7 +597,7 @@ RrTheme* RrThemeNew(const RrInstance *inst, gchar *name,
         set_default_appearance(theme->a_menu_title);
     if (!FIND(appearance, L("menu", "active"), theme->a_menu_selected, TRUE))
         set_default_appearance(theme->a_menu_selected);
-    if (!FIND(appearance, L("menu", "activedisabled"),
+    if (!FIND(appearance, L("menu", "active-disabled"),
               theme->a_menu_disabled_selected, TRUE))
         theme->a_menu_disabled_selected =
             RrAppearanceCopy(theme->a_menu_selected);
@@ -876,7 +897,7 @@ RrTheme* RrThemeNew(const RrInstance *inst, gchar *name,
         theme->a_menu_text_disabled->texture[0].data.text.shadow_offset_x =
             theme->a_menu_text_disabled->texture[0].data.text.shadow_offset_y =
             0;
-    if (!FIND(shadow, L("menu","activedisabled","shadow","offset"),
+    if (!FIND(shadow, L("menu","active-disabled","shadow","offset"),
               theme->a_menu_text_disabled_selected))
         theme->a_menu_text_disabled_selected->
             texture[0].data.text.shadow_offset_x = 0;
@@ -1192,6 +1213,8 @@ RrTheme* RrThemeNew(const RrInstance *inst, gchar *name,
 void RrThemeFree(RrTheme *theme)
 {
     if (theme) {
+        g_free(theme->name);
+
         RrColorFree(theme->menu_border_color);
         RrColorFree(theme->frame_focused_border_color);
         RrColorFree(theme->frame_unfocused_border_color);
This page took 0.027147 seconds and 4 git commands to generate.