hermet pushed a commit to branch master.

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

commit 1d2be3fc4cefabb3459a6f0099af33573ea80045
Author: Jee-Yong Um <con...@gmail.com>
Date:   Thu Sep 1 20:08:55 2016 +0900

    edje_cc: add lookup for inherited after program
    
    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          | 2 +-
 src/bin/edje/edje_cc_handlers.c | 3 ++-
 src/bin/edje/edje_cc_out.c      | 8 ++++++--
 3 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/bin/edje/edje_cc.h b/src/bin/edje/edje_cc.h
index e73ba01..91371ba 100644
--- a/src/bin/edje/edje_cc.h
+++ b/src/bin/edje/edje_cc.h
@@ -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);
diff --git a/src/bin/edje/edje_cc_handlers.c b/src/bin/edje/edje_cc_handlers.c
index 18697ee..4c8b26b 100644
--- a/src/bin/edje/edje_cc_handlers.c
+++ b/src/bin/edje/edje_cc_handlers.c
@@ -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);
diff --git a/src/bin/edje/edje_cc_out.c b/src/bin/edje/edje_cc_out.c
index 3ec1de3..90a8e41 100644
--- a/src/bin/edje/edje_cc_out.c
+++ b/src/bin/edje/edje_cc_out.c
@@ -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

-- 


Reply via email to