summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@osg.samsung.com>2016-02-19 13:20:45 -0500
committerMike Blumenkrantz <zmike@osg.samsung.com>2016-03-02 13:29:30 -0500
commit1b814173128cf4a30a6b48849ae2837c3b5034b5 (patch)
tree6ec8d474a2a6bc446303e8a74afc59e13a7c7bec
parentcf2e35bcaa1d4053cd7a436b75fd64c68304a193 (diff)
downloadefl-1b814173128cf4a30a6b48849ae2837c3b5034b5.tar.gz
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 71ce70bc3f97853f3cfeb07ab0a9d8c213e322b1 @fix
-rw-r--r--src/lib/edje/edje_embryo.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/lib/edje/edje_embryo.c b/src/lib/edje/edje_embryo.c
index a3fd566273..41e035483f 100644
--- a/src/lib/edje/edje_embryo.c
+++ b/src/lib/edje/edje_embryo.c
@@ -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;
}