discomfitor pushed a commit to branch efl-1.17.

http://git.enlightenment.org/core/efl.git/commit/?id=1b814173128cf4a30a6b48849ae2837c3b5034b5

commit 1b814173128cf4a30a6b48849ae2837c3b5034b5
Author: Mike Blumenkrantz <zm...@osg.samsung.com>
Date:   Fri Feb 19 13:20:45 2016 -0500

    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
---
 src/lib/edje/edje_embryo.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

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;
 }

-- 


Reply via email to