From fa44e7f7c1a657ca6fb4ca2268deb34b8908ef9a Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 23 Apr 2014 11:57:06 -0400 Subject: edje_cc now (more) correctly handles text filter inheriting/resetting --- src/bin/edje/edje_cc.h | 1 + src/bin/edje/edje_cc_handlers.c | 20 ++++++++++++++++++-- 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 @@ -2258,6 +2258,29 @@ data_queue_part_reallocated_lookup(Edje_Part_Collection *pc, const char *name, eina_hash_set(part_dest_lookup, &pl->key, list); } +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) { -- cgit v1.2.1