/* 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)
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);
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))
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"),
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,
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))
{
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);
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;
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);