edje_cc now (more) correctly handles text filter inheriting/resetting

This commit is contained in:
Mike Blumenkrantz 2014-04-23 11:57:06 -04:00
parent e6f0deca27
commit b35dfc5f05
3 changed files with 42 additions and 2 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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)
{