summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@osg.samsung.com>2015-12-16 15:53:50 -0500
committerMike Blumenkrantz <zmike@osg.samsung.com>2015-12-16 15:53:50 -0500
commitb47d9caf84b0576c71f807e69563ceb606dfb4a9 (patch)
treef1b26a5661056e4c8ecbe59bd600adec51addf20
parente14dc0f11dcebf14c47efe2aef8861d5d1452f95 (diff)
downloadefl-b47d9caf84b0576c71f807e69563ceb606dfb4a9.tar.gz
edje_cc: redo part type setting to be even more correct
when changing the type of a part which already has descriptions, it's necessary to avoid copying any of the previous type-specific desc data this should be the last of them... @fix
-rw-r--r--src/bin/edje/edje_cc_handlers.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/bin/edje/edje_cc_handlers.c b/src/bin/edje/edje_cc_handlers.c
index 14210623ea..b665e0cfd2 100644
--- a/src/bin/edje/edje_cc_handlers.c
+++ b/src/bin/edje/edje_cc_handlers.c
@@ -5061,23 +5061,30 @@ _part_type_set(unsigned int type)
/* handle type change of inherited part */
if (type != current_part->type)
{
- Edje_Part_Description_Common *new, *previous;
+ Edje_Part_Description_Common *new, *previous, *cur;
Edje_Part_Collection *pc;
- Edje_Part *ep;
+ Edje_Part *ep, *dummy;
unsigned int i;
/* we don't free old part as we don't remove all reference to them */
part_description_image_cleanup(current_part);
+ current_part->type = type;
pc = eina_list_data_get(eina_list_last(edje_collections));
ep = current_part;
previous = ep->default_desc;
+ cur = current_desc;
+ dummy = mem_alloc(SZ(Edje_Part));
+ /* ensure type is incompatible with new type */
+ dummy->type = ep->type + 2;
if (previous)
{
new = _edje_part_description_alloc(type, pc->part, ep->name);
eina_hash_add(desc_hash, &new, ep);
+ eina_hash_set(desc_hash, &previous, dummy);
parent_desc = previous;
+ current_desc = new;
new->state.name = strdup(previous->state.name);
new->state.value = previous->state.value;
st_collections_group_parts_part_description_inherit();
@@ -5092,7 +5099,9 @@ _part_type_set(unsigned int type)
previous = ep->other.desc[i];
new = _edje_part_description_alloc(type, pc->part, ep->name);
eina_hash_add(desc_hash, &new, ep);
+ eina_hash_set(desc_hash, &previous, dummy);
parent_desc = previous;
+ current_desc = new;
new->state.name = strdup(previous->state.name);
new->state.value = previous->state.value;
st_collections_group_parts_part_description_inherit();
@@ -5100,9 +5109,9 @@ _part_type_set(unsigned int type)
_part_desc_free(pc, ep, previous);
ep->other.desc[i] = new;
}
+ free(dummy);
+ current_desc = cur;
}
-
- current_part->type = type;
}
static void