forked from enlightenment/efl
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:
parent
0e44209215
commit
2cf1f0e6e3
|
@ -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];
|
rp = ed->table_parts[part_id % ed->table_parts_size];
|
||||||
if (rp)
|
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 */
|
/* there is only ever 1 program acting on a part at any time */
|
||||||
if (rp->program) _edje_program_end(ed, rp->program);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue