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
This commit is contained in:
Mike Blumenkrantz 2015-12-16 15:53:50 -05:00
parent e14dc0f11d
commit b47d9caf84
1 changed files with 13 additions and 4 deletions

View File

@ -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