discomfitor pushed a commit to branch devs/discomfitor/comp-border.
commit ca1ea2b0f93ce8d365ef3ddf6d511ea90878c10f
Author: Mike Blumenkrantz <[email protected]>
Date: Mon Mar 4 08:02:34 2013 +0000
expose e_theme_collection_items_find() as a useful function
---
src/bin/e_theme.c | 152 ++++++++++++++++++++++++++++--------------------------
src/bin/e_theme.h | 1 +
2 files changed, 80 insertions(+), 73 deletions(-)
diff --git a/src/bin/e_theme.c b/src/bin/e_theme.c
index 8ed8686..7d12515 100644
--- a/src/bin/e_theme.c
+++ b/src/bin/e_theme.c
@@ -14,7 +14,6 @@ static Eina_Bool _e_theme_mappings_free_cb(const Eina_Hash
*hash, const void *k
static Eina_Bool _e_theme_mappings_quickfind_free_cb(const Eina_Hash *hash,
const void *key, void *data, void *fdata);
static void _e_theme_category_register(const char *category);
static Eina_List *_e_theme_collection_item_register(Eina_List *list, const
char *name);
-static Eina_List *_e_theme_collection_items_find(const char *base, const char
*collname);
static void e_theme_handler_set(void *data __UNUSED__, Evas_Object *obj
__UNUSED__, const char *path);
static int e_theme_handler_test(void *data __UNUSED__, Evas_Object *obj
__UNUSED__, const char *path);
@@ -86,6 +85,77 @@ e_theme_shutdown(void)
}
/**
+ * Return a list of all the groups matching a category and prefix
+ *
+ * @param base The category to look under
+ * @param collname The group to match
+ * @return A list of stringshared groups which must be freed
+ */
+
+EAPI Eina_List *
+e_theme_collection_items_find(const char *base, const char *collname)
+{
+ Eina_List *list = NULL;
+ E_Theme_Result *res;
+ char *category, *p;
+
+ category = alloca(strlen(base) + 1);
+ strcpy(category, base);
+ do
+ {
+ res = eina_hash_find(mappings, category);
+ if (res)
+ {
+ const char *str;
+
+ /* if found check cached path */
+ str = res->cache;
+ if (!str)
+ {
+ /* no cached path */
+ str = res->file;
+ /* if its not an absolute path find it */
+ if (str[0] != '/') str = e_path_find(path_themes, str);
+ /* save cached value */
+ if (str) res->cache = str;
+ }
+ if (str)
+ {
+ Eina_List *coll;
+ Eina_Stringshare *c;
+ int collname_len;
+
+ coll = edje_file_collection_list(str);
+ if (coll) collname_len = strlen(collname);
+ EINA_LIST_FREE(coll, c)
+ {
+ if (!strncmp(c, collname, collname_len))
+ {
+ char *trans, *p2;
+
+ trans = strdupa(c);
+ p = trans + collname_len + 1;
+ if (*p)
+ {
+ p2 = strchr(p, '/');
+ if (p2) *p2 = 0;
+ list =
_e_theme_collection_item_register(list, p);
+ }
+ }
+ eina_stringshare_del(c);
+ }
+ }
+ }
+ p = strrchr(category, '/');
+ if (p) *p = 0;
+ }
+ while (p);
+
+ list = eina_list_sort(list, 0, EINA_COMPARE_CB(strcmp));
+ return list;
+}
+
+/**
* Assigns a edje group from the current theme to
* a recently created edje object
*
@@ -419,7 +489,7 @@ e_theme_transition_find(const char *transition)
const char *str;
trans =
- _e_theme_collection_items_find("base/theme/transitions", "e/transitions");
+ e_theme_collection_items_find("base/theme/transitions", "e/transitions");
if (eina_list_search_sorted(trans, EINA_COMPARE_CB(strcmp), transition))
found = 1;
@@ -433,7 +503,7 @@ e_theme_transition_find(const char *transition)
EAPI Eina_List *
e_theme_transition_list(void)
{
- return _e_theme_collection_items_find("base/theme/transitions",
+ return e_theme_collection_items_find("base/theme/transitions",
"e/transitions");
}
@@ -445,7 +515,7 @@ e_theme_border_find(const char *border)
const char *str;
bds =
- _e_theme_collection_items_find("base/theme/borders", "e/widgets/border");
+ e_theme_collection_items_find("base/theme/borders", "e/widgets/border");
if (eina_list_search_sorted(bds, EINA_COMPARE_CB(strcmp), border))
found = 1;
@@ -459,7 +529,7 @@ e_theme_border_find(const char *border)
EAPI Eina_List *
e_theme_border_list(void)
{
- return _e_theme_collection_items_find("base/theme/borders",
+ return e_theme_collection_items_find("base/theme/borders",
"e/widgets/border");
}
@@ -471,7 +541,7 @@ e_theme_shelf_find(const char *shelf)
const char *str;
shelfs =
- _e_theme_collection_items_find("base/theme/shelf", "e/shelf");
+ e_theme_collection_items_find("base/theme/shelf", "e/shelf");
if (eina_list_search_sorted(shelfs, EINA_COMPARE_CB(strcmp), shelf))
found = 1;
@@ -485,7 +555,7 @@ e_theme_shelf_find(const char *shelf)
EAPI Eina_List *
e_theme_shelf_list(void)
{
- return _e_theme_collection_items_find("base/theme/shelf", "e/shelf");
+ return e_theme_collection_items_find("base/theme/shelf", "e/shelf");
}
EAPI int
@@ -495,7 +565,7 @@ e_theme_comp_border_find(const char *comp)
int found = 0;
const char *str;
- comps = _e_theme_collection_items_find("base/theme/borders",
"e/comp/border");
+ comps = e_theme_collection_items_find("base/theme/borders",
"e/comp/border");
if (eina_list_search_sorted(comps, EINA_COMPARE_CB(strcmp), comp))
found = 1;
@@ -509,7 +579,7 @@ e_theme_comp_border_find(const char *comp)
EAPI Eina_List *
e_theme_comp_border_list(void)
{
- return _e_theme_collection_items_find("base/theme/borders",
"e/comp/border");
+ return e_theme_collection_items_find("base/theme/borders", "e/comp/border");
}
/* local subsystem functions */
@@ -625,67 +695,3 @@ _e_theme_collection_item_register(Eina_List *list, const
char *name)
list = eina_list_append(list, eina_stringshare_add(name));
return list;
}
-
-static Eina_List *
-_e_theme_collection_items_find(const char *base, const char *collname)
-{
- Eina_List *list = NULL;
- E_Theme_Result *res;
- char *category, *p;
-
- category = alloca(strlen(base) + 1);
- strcpy(category, base);
- do
- {
- res = eina_hash_find(mappings, category);
- if (res)
- {
- const char *str;
-
- /* if found check cached path */
- str = res->cache;
- if (!str)
- {
- /* no cached path */
- str = res->file;
- /* if its not an absolute path find it */
- if (str[0] != '/') str = e_path_find(path_themes, str);
- /* save cached value */
- if (str) res->cache = str;
- }
- if (str)
- {
- Eina_List *coll;
- Eina_Stringshare *c;
- int collname_len;
-
- coll = edje_file_collection_list(str);
- if (coll) collname_len = strlen(collname);
- EINA_LIST_FREE(coll, c)
- {
- if (!strncmp(c, collname, collname_len))
- {
- char *trans, *p2;
-
- trans = strdupa(c);
- p = trans + collname_len + 1;
- if (*p)
- {
- p2 = strchr(p, '/');
- if (p2) *p2 = 0;
- list =
_e_theme_collection_item_register(list, p);
- }
- }
- eina_stringshare_del(c);
- }
- }
- }
- p = strrchr(category, '/');
- if (p) *p = 0;
- }
- while (p);
-
- list = eina_list_sort(list, 0, EINA_COMPARE_CB(strcmp));
- return list;
-}
-
diff --git a/src/bin/e_theme.h b/src/bin/e_theme.h
index 0396175..bf87689 100644
--- a/src/bin/e_theme.h
+++ b/src/bin/e_theme.h
@@ -6,6 +6,7 @@
EINTERN int e_theme_init(void);
EINTERN int e_theme_shutdown(void);
+EAPI Eina_List *e_theme_collection_items_find(const char *category, const char
*grp);
EAPI int e_theme_edje_object_set(Evas_Object *o, const char *category,
const char *group);
EAPI const char *e_theme_edje_file_get(const char *category, const char
*group);
EAPI const char *e_theme_edje_icon_fallback_file_get(const char *group);
--
------------------------------------------------------------------------------
Symantec Endpoint Protection 12 positioned as A LEADER in The Forrester
Wave(TM): Endpoint Security, Q1 2013 and "remains a good choice" in the
endpoint security space. For insight on selecting the right partner to
tackle endpoint security challenges, access the full report.
http://p.sf.net/sfu/symantec-dev2dev