edje_cc: add lookup for inherited after program
authorJee-Yong Um <conr2d@gmail.com>
Thu, 1 Sep 2016 11:08:55 +0000 (20:08 +0900)
committerHermet Park <hermet@hermet.pe.kr>
Thu, 1 Sep 2016 11:08:56 +0000 (20:08 +0900)
Summary:
"after" program inherited from inherit_only group does not have original
program lookup, but _edje_program_copy() doesn't consider this case.
When it fails to copy program lookup, new program lookup should be appeded.

@fix

Test Plan: make attached program and run

Reviewers: cedric, jpeg, Hermet

Reviewed By: Hermet

Subscribers: taxi2se

Differential Revision: https://phab.enlightenment.org/D4253

src/bin/edje/edje_cc.h
src/bin/edje/edje_cc_handlers.c
src/bin/edje/edje_cc_out.c

index e73ba01..91371ba 100644 (file)
@@ -180,7 +180,7 @@ void    data_queue_copied_part_lookup(Edje_Part_Collection *pc, int *src, int *d
 void   *data_queue_program_lookup(Edje_Part_Collection *pc, const char *name, int *dest);
 void    program_lookup_rename(void *p, const char *name);
 void    copied_program_lookup_delete(Edje_Part_Collection *pc, const char *name);
-void    data_queue_copied_program_lookup(Edje_Part_Collection *pc, int *src, int *dest);
+Eina_Bool     data_queue_copied_program_lookup(Edje_Part_Collection *pc, int *src, int *dest);
 void    copied_program_anonymous_lookup_delete(Edje_Part_Collection *pc, int *dest);
 void    data_queue_anonymous_lookup(Edje_Part_Collection *pc, Edje_Program *ep, int *dest);
 void    data_queue_copied_anonymous_lookup(Edje_Part_Collection *pc, int *src, int *dest);
index 18697ee..4c8b26b 100644 (file)
@@ -2093,7 +2093,8 @@ _edje_program_copy(Edje_Program *ep, Edje_Program *ep2)
         ep->after = eina_list_append(ep->after, pa);
         copy = (char*) (pa + 1);
         memcpy(copy, name, strlen(name) + 1);
-        data_queue_copied_program_lookup(pc, &(pa2->id), &(pa->id));
+        if (!data_queue_copied_program_lookup(pc, &(pa2->id), &(pa->id)))
+          data_queue_program_lookup(pc, copy, &(pa->id));
      }
 
    ep->api.name = STRDUP(ep2->api.name);
index 3ec1de3..90a8e41 100644 (file)
@@ -3181,7 +3181,7 @@ copied_program_lookup_delete(Edje_Part_Collection *pc, const char *name)
      }
 }
 
-void
+Eina_Bool
 data_queue_copied_program_lookup(Edje_Part_Collection *pc, int *src, int *dest)
 {
    Eina_List *l;
@@ -3190,8 +3190,12 @@ data_queue_copied_program_lookup(Edje_Part_Collection *pc, int *src, int *dest)
    EINA_LIST_FOREACH(program_lookups, l, pl)
      {
         if (pl->dest == src)
-          data_queue_program_lookup(pc, pl->u.name, dest);
+          {
+             data_queue_program_lookup(pc, pl->u.name, dest);
+             return EINA_TRUE;
+          }
      }
+   return EINA_FALSE;
 }
 
 void