diff options
author | Mike Blumenkrantz <zmike@samsung.com> | 2014-04-23 11:57:06 -0400 |
---|---|---|
committer | Mike Blumenkrantz <zmike@samsung.com> | 2014-04-23 11:59:24 -0400 |
commit | fa44e7f7c1a657ca6fb4ca2268deb34b8908ef9a (patch) | |
tree | 8f743ee9ad49333fe52fabbd2e36505caae9ff55 | |
parent | 13ad0c9c71b0ffbb3be2181eab93089290d15a78 (diff) | |
download | efl-fa44e7f7c1a657ca6fb4ca2268deb34b8908ef9a.tar.gz |
edje_cc now (more) correctly handles text filter inheriting/resettingdevs/discomfitor/lazEDC
-rw-r--r-- | src/bin/edje/edje_cc.h | 1 | ||||
-rw-r--r-- | src/bin/edje/edje_cc_handlers.c | 20 | ||||
-rw-r--r-- | src/bin/edje/edje_cc_out.c | 23 |
3 files changed, 42 insertions, 2 deletions
diff --git a/src/bin/edje/edje_cc.h b/src/bin/edje/edje_cc.h index 5f4a92385e..7c56d7d93a 100644 --- a/src/bin/edje/edje_cc.h +++ b/src/bin/edje/edje_cc.h @@ -174,6 +174,7 @@ void data_queue_part_nest_lookup(Edje_Part_Collection *pc, const char *name, void data_queue_copied_part_nest_lookup(Edje_Part_Collection *pc, int *src, int *dest, char **dest2); void data_queue_part_reallocated_lookup(Edje_Part_Collection *pc, const char *name, unsigned char **base, int offset); +void part_lookup_delete(Edje_Part_Collection *pc, const char *name, int *dest, char **dest2); void data_queue_copied_part_lookup(Edje_Part_Collection *pc, int *src, int *dest); void *data_queue_program_lookup(Edje_Part_Collection *pc, const char *name, int *dest); void program_lookup_rename(void *p, const char *name); diff --git a/src/bin/edje/edje_cc_handlers.c b/src/bin/edje/edje_cc_handlers.c index 05bbbcd0ba..c04ee6a48d 100644 --- a/src/bin/edje/edje_cc_handlers.c +++ b/src/bin/edje/edje_cc_handlers.c @@ -6272,6 +6272,14 @@ st_collections_group_parts_part_description_inherit(void) ted->text.text_class = STRDUP(ted->text.text_class); ted->text.font.str = STRDUP(ted->text.font.str); ted->text.filter.str = STRDUP(ted->text.filter.str); + { + Eina_List *l; + Eina_Stringshare *name; + static int part_key = 0; + + EINA_LIST_FOREACH(ted->text.filter_sources, l, name) + data_queue_part_lookup(pc, name, &part_key); + } data_queue_copied_part_nest_lookup(pc, &(tparent->text.id_source), &(ted->text.id_source), &ted->text.id_source_part); data_queue_copied_part_nest_lookup(pc, &(tparent->text.id_text_source), &(ted->text.id_text_source), &ted->text.id_text_source_part); @@ -8428,13 +8436,21 @@ st_collections_group_parts_part_description_text_filter(void) } ed = (Edje_Part_Description_Text*) current_desc; + pc = eina_list_data_get(eina_list_last(edje_collections)); + if (ed->text.filter.str) + { + EINA_LIST_FREE(ed->text.filter_sources, name) + { + part_lookup_delete(pc, name, &part_key, NULL); + eina_stringshare_del(name); + } + free((void*)ed->text.filter.str); + } ed->text.filter_sources = NULL; ed->text.filter.str = parse_str(0); if (!ed->text.filter.str) return; - pc = eina_list_data_get(eina_list_last(edje_collections)); - // Parse list of buffers that have a source // note: does not support comments code = strdup(ed->text.filter.str); diff --git a/src/bin/edje/edje_cc_out.c b/src/bin/edje/edje_cc_out.c index 1cd500ee16..88bd69c19d 100644 --- a/src/bin/edje/edje_cc_out.c +++ b/src/bin/edje/edje_cc_out.c @@ -2259,6 +2259,29 @@ data_queue_part_reallocated_lookup(Edje_Part_Collection *pc, const char *name, } void +part_lookup_delete(Edje_Part_Collection *pc, const char *name, int *dest, char **dest2) +{ + Part_Lookup_Key key; + Part_Lookup *pl = NULL; + Eina_List *list, *l, *ll; + key.pc = pc; + key.mem.dest = dest; + key.stable = EINA_TRUE; + + pl = eina_hash_find(part_pc_dest_lookup, &key); + if (!pl) return; + list = eina_hash_find(part_dest_lookup, &pl->key); + EINA_LIST_FOREACH_SAFE(list, l, ll, pl) + { + if (strcmp(pl->name, name) || (pl->key.dest2 != dest2)) continue; + free(pl->name); + list = eina_list_remove_list(list, l); + free(pl); + } + eina_hash_set(part_dest_lookup, &pl->key, list); +} + +void data_queue_copied_part_lookup(Edje_Part_Collection *pc, int *src, int *dest) { data_queue_copied_part_nest_lookup(pc, src, dest, NULL); |