forked from enlightenment/enlightenment
* e_theme: Cleanup and use sorted list for faster looking.
SVN revision: 39551
This commit is contained in:
parent
15b8d85967
commit
1ef42062db
|
@ -35,6 +35,7 @@ static E_Fm2_Mime_Handler *theme_hdl = NULL;
|
|||
EAPI int
|
||||
e_theme_init(void)
|
||||
{
|
||||
E_Config_Theme *et;
|
||||
Eina_List *l = NULL;
|
||||
|
||||
/* Register mime handler */
|
||||
|
@ -47,13 +48,11 @@ e_theme_init(void)
|
|||
/* always fall back to the default theme. the rest after this are config */
|
||||
/* values users can set */
|
||||
e_theme_file_set("base", "default.edj");
|
||||
|
||||
for (l = e_config->themes; l; l = l->next)
|
||||
|
||||
EINA_LIST_FOREACH(e_config->themes, l, et)
|
||||
{
|
||||
E_Config_Theme *et;
|
||||
char buf[256];
|
||||
|
||||
et = l->data;
|
||||
|
||||
snprintf(buf, sizeof(buf), "base/%s", et->category);
|
||||
e_theme_file_set(buf, et->file);
|
||||
}
|
||||
|
@ -72,6 +71,8 @@ e_theme_init(void)
|
|||
EAPI int
|
||||
e_theme_shutdown(void)
|
||||
{
|
||||
const char *str;
|
||||
|
||||
if (theme_hdl)
|
||||
{
|
||||
e_fm2_mime_handler_glob_del(theme_hdl, "*.edj");
|
||||
|
@ -88,26 +89,14 @@ e_theme_shutdown(void)
|
|||
eina_hash_free(group_cache);
|
||||
group_cache = NULL;
|
||||
}
|
||||
while (categories)
|
||||
{
|
||||
eina_stringshare_del(categories->data);
|
||||
categories = eina_list_remove_list(categories, categories);
|
||||
}
|
||||
while (transitions)
|
||||
{
|
||||
eina_stringshare_del(transitions->data);
|
||||
transitions = eina_list_remove_list(transitions, transitions);
|
||||
}
|
||||
while (borders)
|
||||
{
|
||||
eina_stringshare_del(borders->data);
|
||||
borders = eina_list_remove_list(borders, borders);
|
||||
}
|
||||
while (shelfs)
|
||||
{
|
||||
eina_stringshare_del(shelfs->data);
|
||||
shelfs = eina_list_remove_list(shelfs, shelfs);
|
||||
}
|
||||
EINA_LIST_FREE(categories, str)
|
||||
eina_stringshare_del(str);
|
||||
EINA_LIST_FREE(transitions, str)
|
||||
eina_stringshare_del(str);
|
||||
EINA_LIST_FREE(borders, str)
|
||||
eina_stringshare_del(str);
|
||||
EINA_LIST_FREE(shelfs, str)
|
||||
eina_stringshare_del(str);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -216,12 +205,14 @@ e_theme_edje_file_get(const char *category, const char *group)
|
|||
/* if the group exists - return */
|
||||
if (!res->quickfind)
|
||||
{
|
||||
const char *col;
|
||||
|
||||
res->quickfind = eina_hash_string_superfast_new(NULL);
|
||||
/* great a quick find hash of all group entires */
|
||||
coll = edje_file_collection_list(str);
|
||||
for (l = coll; l; l = l->next)
|
||||
EINA_LIST_FOREACH(coll, l, col)
|
||||
{
|
||||
q = eina_stringshare_add(l->data);
|
||||
q = eina_stringshare_add(col);
|
||||
eina_hash_direct_add(res->quickfind, q, q);
|
||||
}
|
||||
if (coll) edje_file_collection_list_free(coll);
|
||||
|
@ -333,9 +324,8 @@ e_theme_config_set(const char *category, const char *file)
|
|||
#endif
|
||||
|
||||
/* search for the category */
|
||||
for (next = e_config->themes; next; next = next->next)
|
||||
EINA_LIST_FOREACH(e_config->themes, next, ect)
|
||||
{
|
||||
ect = eina_list_data_get(next);
|
||||
if (!strcmp(ect->category, category))
|
||||
{
|
||||
if (ect->file) eina_stringshare_del(ect->file);
|
||||
|
@ -363,9 +353,8 @@ e_theme_config_get(const char *category)
|
|||
Eina_List *next;
|
||||
|
||||
/* search for the category */
|
||||
for (next = e_config->themes; next; next = next->next)
|
||||
EINA_LIST_FOREACH(e_config->themes, next, ect)
|
||||
{
|
||||
ect = eina_list_data_get(next);
|
||||
if (!strcmp(ect->category, category))
|
||||
return ect;
|
||||
}
|
||||
|
@ -377,11 +366,10 @@ e_theme_config_remove(const char *category)
|
|||
{
|
||||
E_Config_Theme *ect;
|
||||
Eina_List *next;
|
||||
|
||||
|
||||
/* search for the category */
|
||||
for (next = e_config->themes; next; next = next->next)
|
||||
EINA_LIST_FOREACH(e_config->themes, next, ect)
|
||||
{
|
||||
ect = eina_list_data_get(next);
|
||||
if (!strcmp(ect->category, category))
|
||||
{
|
||||
e_config->themes = eina_list_remove_list(e_config->themes, next);
|
||||
|
@ -403,13 +391,8 @@ e_theme_config_list(void)
|
|||
EAPI int
|
||||
e_theme_category_find(const char *category)
|
||||
{
|
||||
Eina_List *l;
|
||||
|
||||
for (l = categories; l; l = l->next)
|
||||
{
|
||||
if (!strcmp(category, l->data))
|
||||
return 1;
|
||||
}
|
||||
if (eina_list_search_sorted(categories, EINA_COMPARE_CB(strcmp), category))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -422,13 +405,8 @@ e_theme_category_list(void)
|
|||
EAPI int
|
||||
e_theme_transition_find(const char *transition)
|
||||
{
|
||||
Eina_List *l;
|
||||
|
||||
for (l = transitions; l; l = l->next)
|
||||
{
|
||||
if (!strcmp(transition, l->data))
|
||||
return 1;
|
||||
}
|
||||
if (eina_list_search_sorted(transitions, EINA_COMPARE_CB(strcmp), transition))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -441,13 +419,8 @@ e_theme_transition_list(void)
|
|||
EAPI int
|
||||
e_theme_border_find(const char *border)
|
||||
{
|
||||
Eina_List *l;
|
||||
|
||||
for (l = borders; l; l = l->next)
|
||||
{
|
||||
if (!strcmp(border, l->data))
|
||||
return 1;
|
||||
}
|
||||
if (eina_list_search_sorted(borders, EINA_COMPARE_CB(strcmp), border))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -460,13 +433,8 @@ e_theme_border_list(void)
|
|||
EAPI int
|
||||
e_theme_shelf_find(const char *shelf)
|
||||
{
|
||||
Eina_List *l;
|
||||
|
||||
for (l = shelfs; l; l = l->next)
|
||||
{
|
||||
if (!strcmp(shelf, l->data))
|
||||
return 1;
|
||||
}
|
||||
if (eina_list_search_sorted(shelfs, EINA_COMPARE_CB(strcmp), shelf))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -525,24 +493,34 @@ _e_theme_mappings_quickfind_free_cb(const Eina_Hash *hash, const void *key, void
|
|||
static void
|
||||
_e_theme_category_register(const char *category)
|
||||
{
|
||||
const char *c;
|
||||
Eina_List *l;
|
||||
int ret;
|
||||
|
||||
for (l = categories; l; l = l->next)
|
||||
{
|
||||
if (!strcmp(category, l->data)) return;
|
||||
}
|
||||
if (!categories)
|
||||
categories = eina_list_append(categories, eina_stringshare_add(category));
|
||||
|
||||
categories = eina_list_append(categories, eina_stringshare_add(category));
|
||||
l = eina_list_search_sorted_near_list(categories, EINA_COMPARE_CB(strcmp), category);
|
||||
c = eina_list_data_get(l);
|
||||
|
||||
ret = strcmp(c, category);
|
||||
if (!ret) return;
|
||||
|
||||
if (ret < 0)
|
||||
categories = eina_list_append_relative_list(categories, eina_stringshare_add(category), l);
|
||||
else
|
||||
categories = eina_list_prepend_relative_list(categories, eina_stringshare_add(category), l);
|
||||
}
|
||||
|
||||
static Eina_List *
|
||||
_e_theme_collection_item_register(Eina_List *list, const char *name)
|
||||
{
|
||||
const char *item;
|
||||
Eina_List *l;
|
||||
|
||||
for (l = list; l; l = l->next)
|
||||
EINA_LIST_FOREACH(list, l, item)
|
||||
{
|
||||
if (!strcmp(name, l->data)) return list;
|
||||
if (!strcmp(name, item)) return list;
|
||||
}
|
||||
list = eina_list_append(list, eina_stringshare_add(name));
|
||||
return list;
|
||||
|
@ -584,13 +562,15 @@ _e_theme_collection_items_find(const char *base, const char *collname)
|
|||
coll = edje_file_collection_list(str);
|
||||
if (coll)
|
||||
{
|
||||
for (l = coll; l; l = l->next)
|
||||
const char *c;
|
||||
|
||||
EINA_LIST_FOREACH(coll, l, c)
|
||||
{
|
||||
if (!strncmp(l->data, collname, collname_len))
|
||||
if (!strncmp(c, collname, collname_len))
|
||||
{
|
||||
char *trans;
|
||||
|
||||
trans = strdup(l->data);
|
||||
|
||||
trans = strdup(c);
|
||||
p = trans + collname_len + 1;
|
||||
if (*p)
|
||||
{
|
||||
|
@ -609,5 +589,7 @@ _e_theme_collection_items_find(const char *base, const char *collname)
|
|||
if (p) *p = 0;
|
||||
}
|
||||
while (p);
|
||||
|
||||
list = eina_list_sort(list, 0, EINA_COMPARE_CB(strcmp));
|
||||
return list;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue