From: Mike Blumenkrantz Date: Fri, 19 Feb 2016 18:20:45 +0000 (-0500) Subject: edje: clear pending programs upon calling stop_programs_on() X-Git-Tag: upstream/1.20.0~7390 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2cf1f0e6e358ff306fcc7ccc37b8289a52768a52;p=platform%2Fupstream%2Fefl.git 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 --- diff --git a/src/lib/edje/edje_embryo.c b/src/lib/edje/edje_embryo.c index a3fd566..41e0354 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; }