From 2fa326e6a4b62ee9319a49fd30ede6b1b5ee25a9 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 18 Jul 2011 06:51:45 +0000 Subject: [PATCH] more elm_config features! theme list will now autoselect your current theme(s) on load. it might even select them correctly! overlay themes sometimes don't get applied to the sample for some reason, but they will still be applied when 'use theme' is clicked SVN revision: 61466 --- legacy/elementary/src/bin/config.c | 53 ++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/legacy/elementary/src/bin/config.c b/legacy/elementary/src/bin/config.c index 0d3209c520..0059ee3e89 100644 --- a/legacy/elementary/src/bin/config.c +++ b/legacy/elementary/src/bin/config.c @@ -1073,17 +1073,19 @@ _theme_use(void *data __UNUSED__, } static void -_theme_sel(void *data, +_theme_sel(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) { - Theme *t = data; Evas_Object *win = elm_object_top_widget_get(obj); Evas_Object *sample = evas_object_data_get(win, "theme_preview"); Elm_Theme *th, *sth; - const char *defth, *rest; + Elm_List_Item *it; + const char *defth; Eina_Strbuf *newth; + Eina_List *l; + if (!sample) return; tsel = elm_list_selected_items_get(obj); sth = elm_object_theme_get(sample); defth = elm_theme_get(sth); @@ -1095,15 +1097,13 @@ _theme_sel(void *data, eina_strbuf_free(newth); return; } - if (eina_list_count(tsel) > 1) - eina_strbuf_append_printf(newth, "%s:%s", t->name, defth); - else + EINA_LIST_REVERSE_FOREACH((Eina_List*)tsel, l, it) { - rest = strchr(defth, ':'); - if (!rest) - eina_strbuf_append(newth, t->name); - else - eina_strbuf_append_printf(newth, "%s%s", t->name, rest); + Theme *t = elm_list_item_data_get(it); + eina_strbuf_append_printf(newth, "%s:", t->name); + if ((!l->prev) && strcmp(t->name, "default")) + /* ensure default theme is always there for fallback */ + eina_strbuf_append(newth, "default"); } elm_theme_set(th, eina_strbuf_string_get(newth)); eina_strbuf_free(newth); @@ -1266,6 +1266,10 @@ _status_config_themes(Evas_Object *win, Evas_Object *tb, *rc, *sc, *sp, *li, *pd, *fr, *bt, *sample; Eina_List *list, *l; char *th, *s, *ext; + Elm_Theme *d; + Elm_List_Item *it, *def_it; + const char *theme_name, *sep[20]; + unsigned int x; tb = elm_table_add(win); evas_object_size_hint_weight_set(tb, 1.0, 1.0); @@ -1298,10 +1302,18 @@ _status_config_themes(Evas_Object *win, evas_object_show(li); list = elm_theme_name_available_list_new(); + d = elm_theme_default_get(); + theme_name = elm_theme_get(d); + for (x = 1, sep[0] = theme_name; x < sizeof(sep) / sizeof(sep[0]); x++) + { + sep[x] = strchr(sep[x - 1] + 1, ':'); + if (!sep[x]) break; + } EINA_LIST_FOREACH(list, l, th) { Theme *t; - + int y; + t = calloc(1, sizeof(Theme)); t->name = eina_stringshare_add(th); s = elm_theme_list_item_path_get(th, &(t->in_search_path)); @@ -1337,8 +1349,23 @@ _status_config_themes(Evas_Object *win, t->label = eina_stringshare_add(s); } themes = eina_list_append(themes, t); - elm_list_item_append(li, t->label, NULL, NULL, _theme_sel, t); + it = elm_list_item_append(li, t->label, NULL, NULL, NULL, t); + if (!strcmp(t->name, "default")) def_it = it; + for (y = x - 1 /* ignore default e theme */; y > 0; y--) + { + const char *start = (sep[y - 1][0] == ':') ? sep[y - 1] + 1 : sep[y - 1]; + unsigned int len = (unsigned int)(sep[y] - start); + if (strncmp(start , t->name, len) || (strlen(t->name) != len)) continue; + + if (!elm_list_item_selected_get(it)) + elm_list_item_selected_set(it, EINA_TRUE); + break; + } } + if (!elm_list_selected_items_get(li)) + elm_list_item_selected_set(def_it, EINA_TRUE); + evas_object_smart_callback_add(li, "selected", _theme_sel, NULL); + evas_object_smart_callback_add(li, "unselected", _theme_sel, NULL); elm_theme_name_available_list_free(list); elm_list_go(li);