edje: clear pending programs upon calling stop_programs_on()
authorMike Blumenkrantz <zmike@osg.samsung.com>
Fri, 19 Feb 2016 18:20:45 +0000 (13:20 -0500)
committerMike Blumenkrantz <zmike@osg.samsung.com>
Fri, 19 Feb 2016 18:24:30 +0000 (13:24 -0500)
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

index a3fd566..41e0354 100644 (file)
@@ -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;
 }