edje_cc: delete anonymous lookup during program removal

Summary:
program_remove attribute allows to remove program inherited from
parent group, but if its action is EDJE_ACTION_TYPE_SCRIPT,
anonymous lookup also should be deleted.

@fix

Reviewers: cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D3875

Signed-off-by: Cedric Bail <cedric@osg.samsung.com>
This commit is contained in:
Jee-Yong Um 2016-04-15 11:14:31 -07:00 committed by Cedric Bail
parent fdaedf2bff
commit 974daa5f98
3 changed files with 26 additions and 0 deletions

View File

@ -181,6 +181,7 @@ void *data_queue_program_lookup(Edje_Part_Collection *pc, const char *name, in
void program_lookup_rename(void *p, const char *name);
void copied_program_lookup_delete(Edje_Part_Collection *pc, const char *name);
void data_queue_copied_program_lookup(Edje_Part_Collection *pc, int *src, int *dest);
void copied_program_anonymous_lookup_delete(Edje_Part_Collection *pc, int *dest);
void data_queue_anonymous_lookup(Edje_Part_Collection *pc, Edje_Program *ep, int *dest);
void data_queue_copied_anonymous_lookup(Edje_Part_Collection *pc, int *src, int *dest);
void data_queue_image_lookup(char *name, int *dest, Eina_Bool *set);

View File

@ -166,6 +166,7 @@ Eina_Bool current_group_inherit = EINA_FALSE;
Eina_Bool script_override = EINA_FALSE;
static Edje_Program *sequencing = NULL;
static Eina_List *sequencing_lookups = NULL;
static int *anonymous_delete = NULL;
Eina_List *po_files;
@ -5745,6 +5746,11 @@ _program_remove(const char *name, Edje_Program **pgrms, unsigned int count)
_edje_program_remove(pc, pr);
if (pr->action == EDJE_ACTION_TYPE_SCRIPT)
{
anonymous_delete = &pr->id;
}
_program_free(pr);
return EINA_TRUE;
}
@ -5794,6 +5800,11 @@ st_collections_group_program_remove(void)
success |= _program_remove(name, pc->programs.nocmp, pc->programs.nocmp_count);
copied_program_lookup_delete(pc, name);
if (anonymous_delete)
{
copied_program_anonymous_lookup_delete(pc, anonymous_delete);
anonymous_delete = NULL;
}
if (!success)
{
ERR("Attempted removal of nonexistent program '%s' in group '%s'.",

View File

@ -2942,6 +2942,20 @@ data_queue_anonymous_lookup(Edje_Part_Collection *pc, Edje_Program *ep, int *des
}
}
void
copied_program_anonymous_lookup_delete(Edje_Part_Collection *pc, int *dest)
{
Program_Lookup *pl;
Eina_List *l, *ll;
EINA_LIST_FOREACH_SAFE(program_lookups, l, ll, pl)
{
if ((!pl->anonymous) || (pl->pc != pc) || (dest != &pl->u.ep->id)) continue;
program_lookups = eina_list_remove_list(program_lookups, l);
free(pl);
}
}
void
data_queue_copied_anonymous_lookup(Edje_Part_Collection *pc, int *src, int *dest)
{