summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@samsung.com>2014-04-23 11:57:06 -0400
committerMike Blumenkrantz <zmike@samsung.com>2014-04-23 11:59:24 -0400
commitfa44e7f7c1a657ca6fb4ca2268deb34b8908ef9a (patch)
tree8f743ee9ad49333fe52fabbd2e36505caae9ff55
parent13ad0c9c71b0ffbb3be2181eab93089290d15a78 (diff)
downloadefl-devs/discomfitor/lazEDC.tar.gz
edje_cc now (more) correctly handles text filter inheriting/resettingdevs/discomfitor/lazEDC
-rw-r--r--src/bin/edje/edje_cc.h1
-rw-r--r--src/bin/edje/edje_cc_handlers.c20
-rw-r--r--src/bin/edje/edje_cc_out.c23
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);