X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=render%2Ftheme.c;h=f5af79e98595e408ec9ef28fa89a06b7cd0a04e3;hb=2b28aa8c41b71d1f96d8ebf9cd72dd0c2ccd0678;hp=97f5e1f5865df388219777d742fa36814b43e658;hpb=cb7752cd1f48cbb9de4b3fa5062fa44e8d584701;p=chaz%2Fopenbox diff --git a/render/theme.c b/render/theme.c index 97f5e1f5..f5af79e9 100644 --- a/render/theme.c +++ b/render/theme.c @@ -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); @@ -1192,6 +1199,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);