From 1d2be3fc4cefabb3459a6f0099af33573ea80045 Mon Sep 17 00:00:00 2001 From: Jee-Yong Um Date: Thu, 1 Sep 2016 20:08:55 +0900 Subject: [PATCH] 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 -- 2.7.4