diff options
author | Mike Blumenkrantz <zmike@osg.samsung.com> | 2016-02-19 13:20:45 -0500 |
---|---|---|
committer | Mike Blumenkrantz <zmike@osg.samsung.com> | 2016-02-19 13:24:30 -0500 |
commit | 2cf1f0e6e358ff306fcc7ccc37b8289a52768a52 (patch) | |
tree | 5b64be8667184c6f6a445aaf3511570bd9609363 | |
parent | 0e44209215a89d84e7e755178d439471a51bb4e7 (diff) | |
download | efl-2cf1f0e6e358ff306fcc7ccc37b8289a52768a52.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.c | 14 |
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; } |