edje: clear pending programs upon calling stop_programs_on()

pending programs have not started yet, so they are not directly attached
to the part. failing to remove them results in unexpected behavior from programs

ref 71ce70bc3f

@fix
This commit is contained in:
Mike Blumenkrantz 2016-02-19 13:20:45 -05:00
parent 0e44209215
commit 2cf1f0e6e3
1 changed files with 14 additions and 0 deletions

View File

@ -849,8 +849,22 @@ _edje_embryo_fn_stop_programs_on(Embryo_Program *ep, Embryo_Cell *params)
rp = ed->table_parts[part_id % ed->table_parts_size];
if (rp)
{
Eina_List *l, *ll, *lll;
Edje_Pending_Program *pp;
Edje_Program_Target *pt;
/* there is only ever 1 program acting on a part at any time */
if (rp->program) _edje_program_end(ed, rp->program);
EINA_LIST_FOREACH_SAFE(ed->pending_actions, l, ll, pp)
{
EINA_LIST_FOREACH(pp->program->targets, lll, pt)
if (pt->id == part_id)
{
ed->pending_actions = eina_list_remove_list(ed->pending_actions, l);
ecore_timer_del(pp->timer);
free(pp);
break;
}
}
}
return 0;
}