summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@osg.samsung.com>2015-12-16 14:35:19 -0500
committerMike Blumenkrantz <zmike@osg.samsung.com>2015-12-16 15:03:40 -0500
commite14dc0f11dcebf14c47efe2aef8861d5d1452f95 (patch)
treef3fb8a610b8938d518d795c83b32297e10611caa
parent6eff8ab5bac7e77ba3a42203636ceb61f5724a69 (diff)
downloadefl-e14dc0f11dcebf14c47efe2aef8861d5d1452f95.tar.gz
edje_cc: correctly copy part descriptions when setting part type
in the case where a part is inherited, changing the type will lead to broken part/program lookups for the part during resolving in write-out; memcpy alone is not enough to fix this. @fix
-rw-r--r--src/bin/edje/edje_cc_handlers.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/bin/edje/edje_cc_handlers.c b/src/bin/edje/edje_cc_handlers.c
index 3e2c5e37dc..14210623ea 100644
--- a/src/bin/edje/edje_cc_handlers.c
+++ b/src/bin/edje/edje_cc_handlers.c
@@ -5076,8 +5076,13 @@ _part_type_set(unsigned int type)
if (previous)
{
new = _edje_part_description_alloc(type, pc->part, ep->name);
- memcpy(new, previous, sizeof (Edje_Part_Description_Common));
eina_hash_add(desc_hash, &new, ep);
+ parent_desc = previous;
+ new->state.name = strdup(previous->state.name);
+ new->state.value = previous->state.value;
+ st_collections_group_parts_part_description_inherit();
+ parent_desc = NULL;
+ _part_desc_free(pc, ep, previous);
ep->default_desc = new;
}
@@ -5086,8 +5091,13 @@ _part_type_set(unsigned int type)
{
previous = ep->other.desc[i];
new = _edje_part_description_alloc(type, pc->part, ep->name);
- memcpy(new, previous, sizeof (Edje_Part_Description_Common));
eina_hash_add(desc_hash, &new, ep);
+ parent_desc = previous;
+ new->state.name = strdup(previous->state.name);
+ new->state.value = previous->state.value;
+ st_collections_group_parts_part_description_inherit();
+ parent_desc = NULL;
+ _part_desc_free(pc, ep, previous);
ep->other.desc[i] = new;
}
}