forked from enlightenment/efl
edje: change 'user_defined' member of Edje struct to be a hash
Summary: this is where all user-added data (e.g., swallowed objects, table/box packs, text strings) are stored. with this patch, it is now a hash by part name, storing a list of user-defined data for that part this simplifies a bit of code by deconstructing some list walks, and should end up being slightly faster for large edje objects with lots of user-defined data ideally no functional changes Depends on D9206 Reviewers: cedric Reviewed By: cedric Subscribers: #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D9208
This commit is contained in:
parent
662572ecfe
commit
aa921c553b
|
@ -153,7 +153,7 @@ static Eina_Bool _edje_collection_free_prog_cache_matches_free_cb(const Eina_Ha
|
||||||
static void _edje_object_pack_item_hints_set(Evas_Object *obj, Edje_Pack_Element *it);
|
static void _edje_object_pack_item_hints_set(Evas_Object *obj, Edje_Pack_Element *it);
|
||||||
static void _cb_signal_repeat(void *data, Evas_Object *obj, const char *signal, const char *source);
|
static void _cb_signal_repeat(void *data, Evas_Object *obj, const char *signal, const char *source);
|
||||||
|
|
||||||
static Eina_List *_edje_object_collect(Edje *ed);
|
static Eina_Hash *_edje_object_collect(Edje *ed);
|
||||||
|
|
||||||
static int _sort_defined_boxes(const void *a, const void *b);
|
static int _sort_defined_boxes(const void *a, const void *b);
|
||||||
|
|
||||||
|
@ -773,7 +773,7 @@ _edje_object_file_set_internal(Evas_Object *obj, const Eina_File *file, const ch
|
||||||
Eina_List *textblocks = NULL;
|
Eina_List *textblocks = NULL;
|
||||||
Eina_List *sources = NULL;
|
Eina_List *sources = NULL;
|
||||||
Eina_List *externals = NULL;
|
Eina_List *externals = NULL;
|
||||||
Eina_List *collect = NULL;
|
Eina_Hash *collect = NULL;
|
||||||
unsigned int n;
|
unsigned int n;
|
||||||
Eina_Array parts;
|
Eina_Array parts;
|
||||||
int group_path_started = 0;
|
int group_path_started = 0;
|
||||||
|
@ -1592,132 +1592,138 @@ _edje_object_file_set_internal(Evas_Object *obj, const Eina_File *file, const ch
|
||||||
{
|
{
|
||||||
Edje_User_Defined *eud;
|
Edje_User_Defined *eud;
|
||||||
Eina_List *boxes = NULL;
|
Eina_List *boxes = NULL;
|
||||||
|
Eina_Iterator *it;
|
||||||
|
Eina_List *l, *ll;
|
||||||
|
|
||||||
EINA_LIST_FREE(collect, eud)
|
it = eina_hash_iterator_data_new(collect);
|
||||||
|
/* the eud structs get manually freed below */
|
||||||
|
eina_hash_free_cb_set(collect, (void*)eina_list_free);
|
||||||
|
EINA_ITERATOR_FOREACH(it, l)
|
||||||
{
|
{
|
||||||
Evas_Object *child = NULL;
|
EINA_LIST_FOREACH(l, ll, eud)
|
||||||
|
|
||||||
if (!eina_hash_find(part_match, eud->part))
|
|
||||||
{
|
{
|
||||||
/* part no longer exists */
|
Evas_Object *child = NULL;
|
||||||
switch (eud->type)
|
|
||||||
|
if (!eina_hash_find(part_match, eud->part))
|
||||||
{
|
{
|
||||||
case EDJE_USER_SWALLOW:
|
/* part no longer exists */
|
||||||
child = eud->u.swallow.child;
|
switch (eud->type)
|
||||||
break;
|
|
||||||
case EDJE_USER_BOX_PACK:
|
|
||||||
child = eud->u.box.child;
|
|
||||||
break;
|
|
||||||
case EDJE_USER_TABLE_PACK:
|
|
||||||
child = eud->u.table.child;
|
|
||||||
break;
|
|
||||||
case EDJE_USER_STRING:
|
|
||||||
case EDJE_USER_DRAG_STEP:
|
|
||||||
case EDJE_USER_DRAG_PAGE:
|
|
||||||
case EDJE_USER_DRAG_VALUE:
|
|
||||||
case EDJE_USER_DRAG_SIZE:
|
|
||||||
case EDJE_USER_TEXT_STYLE:
|
|
||||||
case EDJE_USER_TEXT_EXPAND:
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (child)
|
|
||||||
{
|
|
||||||
WRN("Container part '%s' no longer exists, hiding previously-contained child object", eud->part);
|
|
||||||
evas_object_hide(child);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
switch (eud->type)
|
|
||||||
{
|
|
||||||
case EDJE_USER_SWALLOW:
|
|
||||||
edje_object_part_swallow(obj, eud->part, eud->u.swallow.child);
|
|
||||||
child = eud->u.swallow.child;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EDJE_USER_BOX_PACK:
|
|
||||||
boxes = eina_list_append(boxes, eud);
|
|
||||||
eud = NULL;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EDJE_USER_TABLE_PACK:
|
|
||||||
edje_object_part_table_pack(obj, eud->part, eud->u.table.child,
|
|
||||||
eud->u.table.col, eud->u.table.row,
|
|
||||||
eud->u.table.colspan, eud->u.table.rowspan);
|
|
||||||
child = eud->u.table.child;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EDJE_USER_DRAG_STEP:
|
|
||||||
edje_object_part_drag_step_set(obj, eud->part,
|
|
||||||
eud->u.drag_position.x,
|
|
||||||
eud->u.drag_position.y);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EDJE_USER_DRAG_PAGE:
|
|
||||||
edje_object_part_drag_page_set(obj, eud->part,
|
|
||||||
eud->u.drag_position.x,
|
|
||||||
eud->u.drag_position.y);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EDJE_USER_DRAG_VALUE:
|
|
||||||
edje_object_part_drag_value_set(obj, eud->part,
|
|
||||||
eud->u.drag_position.x,
|
|
||||||
eud->u.drag_position.y);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EDJE_USER_DRAG_SIZE:
|
|
||||||
edje_object_part_drag_size_set(obj, eud->part,
|
|
||||||
eud->u.drag_size.w,
|
|
||||||
eud->u.drag_size.h);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EDJE_USER_STRING:
|
|
||||||
switch (eud->u.string.type)
|
|
||||||
{
|
{
|
||||||
case EDJE_TEXT_TYPE_NORMAL:
|
case EDJE_USER_SWALLOW:
|
||||||
edje_object_part_text_set(obj, eud->part, eud->u.string.text);
|
child = eud->u.swallow.child;
|
||||||
break;
|
break;
|
||||||
case EDJE_TEXT_TYPE_ESCAPED:
|
case EDJE_USER_BOX_PACK:
|
||||||
edje_object_part_text_escaped_set(obj, eud->part, eud->u.string.text);
|
child = eud->u.box.child;
|
||||||
break;
|
break;
|
||||||
case EDJE_TEXT_TYPE_UNESCAPED:
|
case EDJE_USER_TABLE_PACK:
|
||||||
edje_object_part_text_unescaped_set(obj, eud->part, eud->u.string.text);
|
child = eud->u.table.child;
|
||||||
|
break;
|
||||||
|
case EDJE_USER_STRING:
|
||||||
|
case EDJE_USER_DRAG_STEP:
|
||||||
|
case EDJE_USER_DRAG_PAGE:
|
||||||
|
case EDJE_USER_DRAG_VALUE:
|
||||||
|
case EDJE_USER_DRAG_SIZE:
|
||||||
|
case EDJE_USER_TEXT_STYLE:
|
||||||
|
case EDJE_USER_TEXT_EXPAND:
|
||||||
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
eina_stringshare_del(eud->u.string.text);
|
if (child)
|
||||||
break;
|
|
||||||
|
|
||||||
case EDJE_USER_TEXT_STYLE:
|
|
||||||
{
|
{
|
||||||
Edje_Part_Text_Prop *prop;
|
WRN("Container part '%s' no longer exists, hiding previously-contained child object", eud->part);
|
||||||
EINA_LIST_FREE(eud->u.text_style.props, prop)
|
evas_object_hide(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
switch (eud->type)
|
||||||
|
{
|
||||||
|
case EDJE_USER_SWALLOW:
|
||||||
|
edje_object_part_swallow(obj, eud->part, eud->u.swallow.child);
|
||||||
|
child = eud->u.swallow.child;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EDJE_USER_BOX_PACK:
|
||||||
|
boxes = eina_list_append(boxes, eud);
|
||||||
|
eud = NULL;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EDJE_USER_TABLE_PACK:
|
||||||
|
edje_object_part_table_pack(obj, eud->part, eud->u.table.child,
|
||||||
|
eud->u.table.col, eud->u.table.row,
|
||||||
|
eud->u.table.colspan, eud->u.table.rowspan);
|
||||||
|
child = eud->u.table.child;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EDJE_USER_DRAG_STEP:
|
||||||
|
edje_object_part_drag_step_set(obj, eud->part,
|
||||||
|
eud->u.drag_position.x,
|
||||||
|
eud->u.drag_position.y);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EDJE_USER_DRAG_PAGE:
|
||||||
|
edje_object_part_drag_page_set(obj, eud->part,
|
||||||
|
eud->u.drag_position.x,
|
||||||
|
eud->u.drag_position.y);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EDJE_USER_DRAG_VALUE:
|
||||||
|
edje_object_part_drag_value_set(obj, eud->part,
|
||||||
|
eud->u.drag_position.x,
|
||||||
|
eud->u.drag_position.y);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EDJE_USER_DRAG_SIZE:
|
||||||
|
edje_object_part_drag_size_set(obj, eud->part,
|
||||||
|
eud->u.drag_size.w,
|
||||||
|
eud->u.drag_size.h);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EDJE_USER_STRING:
|
||||||
|
switch (eud->u.string.type)
|
||||||
{
|
{
|
||||||
_canvas_layout_user_text_apply(eud, obj,
|
case EDJE_TEXT_TYPE_NORMAL:
|
||||||
prop);
|
edje_object_part_text_set(obj, eud->part, eud->u.string.text);
|
||||||
free(prop);
|
break;
|
||||||
|
case EDJE_TEXT_TYPE_ESCAPED:
|
||||||
|
edje_object_part_text_escaped_set(obj, eud->part, eud->u.string.text);
|
||||||
|
break;
|
||||||
|
case EDJE_TEXT_TYPE_UNESCAPED:
|
||||||
|
edje_object_part_text_unescaped_set(obj, eud->part, eud->u.string.text);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
eina_stringshare_del(eud->u.string.text);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EDJE_USER_TEXT_STYLE:
|
||||||
|
{
|
||||||
|
Edje_Part_Text_Prop *prop;
|
||||||
|
EINA_LIST_FREE(eud->u.text_style.props, prop)
|
||||||
|
{
|
||||||
|
_canvas_layout_user_text_apply(eud, obj,
|
||||||
|
prop);
|
||||||
|
free(prop);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EDJE_USER_TEXT_EXPAND:
|
||||||
|
{
|
||||||
|
efl_canvas_layout_part_text_expand_set(
|
||||||
|
efl_part(obj, eud->part),
|
||||||
|
eud->u.text_expand.expand);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
case EDJE_USER_TEXT_EXPAND:
|
|
||||||
{
|
|
||||||
efl_canvas_layout_part_text_expand_set(
|
|
||||||
efl_part(obj, eud->part),
|
|
||||||
eud->u.text_expand.expand);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (eud) _edje_user_definition_remove(eud, child);
|
|
||||||
}
|
}
|
||||||
|
eina_iterator_free(it);
|
||||||
|
|
||||||
boxes = eina_list_sort(boxes, -1, _sort_defined_boxes);
|
boxes = eina_list_sort(boxes, -1, _sort_defined_boxes);
|
||||||
EINA_LIST_FREE(boxes, eud)
|
EINA_LIST_FREE(boxes, eud)
|
||||||
{
|
edje_object_part_box_append(obj, eud->part, eud->u.box.child);
|
||||||
edje_object_part_box_append(obj, eud->part, eud->u.box.child);
|
|
||||||
_edje_user_definition_remove(eud, eud->u.box.child);
|
|
||||||
}
|
|
||||||
eina_hash_free(part_match);
|
eina_hash_free(part_match);
|
||||||
|
eina_hash_free(collect);
|
||||||
}
|
}
|
||||||
if (_edje_language)
|
if (_edje_language)
|
||||||
snprintf(lang, sizeof(lang), "edje,language,%s", _edje_language);
|
snprintf(lang, sizeof(lang), "edje,language,%s", _edje_language);
|
||||||
|
@ -1833,88 +1839,94 @@ _sort_defined_boxes(const void *a, const void *b)
|
||||||
return euda->u.box.index - eudb->u.box.index;
|
return euda->u.box.index - eudb->u.box.index;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_List *
|
static Eina_Hash *
|
||||||
_edje_object_collect(Edje *ed)
|
_edje_object_collect(Edje *ed)
|
||||||
{
|
{
|
||||||
Edje_User_Defined *eud;
|
Edje_User_Defined *eud;
|
||||||
Eina_List *collect;
|
Eina_Hash *collect;
|
||||||
Eina_List *l;
|
Eina_List *l, *ll;
|
||||||
|
Eina_Iterator *it;
|
||||||
|
|
||||||
collect = ed->user_defined;
|
collect = ed->user_defined;
|
||||||
ed->user_defined = NULL;
|
ed->user_defined = NULL;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(collect, l, eud)
|
it = eina_hash_iterator_data_new(collect);
|
||||||
|
EINA_ITERATOR_FOREACH(it, l)
|
||||||
{
|
{
|
||||||
switch (eud->type)
|
EINA_LIST_FOREACH(l, ll, eud)
|
||||||
{
|
{
|
||||||
case EDJE_USER_STRING:
|
switch (eud->type)
|
||||||
eud->u.string.text = eina_stringshare_ref(eud->u.string.text);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EDJE_USER_BOX_PACK:
|
|
||||||
if (eud->u.box.index == -1)
|
|
||||||
{
|
{
|
||||||
Edje_User_Defined *search;
|
case EDJE_USER_STRING:
|
||||||
Edje_Real_Part *rp;
|
eud->u.string.text = eina_stringshare_ref(eud->u.string.text);
|
||||||
Eina_List *children;
|
break;
|
||||||
Eina_List *ls;
|
|
||||||
Evas_Object *child;
|
|
||||||
int idx = 0;
|
|
||||||
|
|
||||||
rp = _edje_real_part_recursive_get(&ed, eud->part);
|
case EDJE_USER_BOX_PACK:
|
||||||
if (rp)
|
if (eud->u.box.index == -1)
|
||||||
{
|
{
|
||||||
if (rp->part->type != EDJE_PART_TYPE_BOX) continue;
|
Edje_User_Defined *search;
|
||||||
|
Edje_Real_Part *rp;
|
||||||
|
Eina_List *children;
|
||||||
|
Eina_List *ls;
|
||||||
|
Evas_Object *child;
|
||||||
|
int idx = 0;
|
||||||
|
|
||||||
children = evas_object_box_children_get(rp->object);
|
rp = _edje_real_part_recursive_get(&ed, eud->part);
|
||||||
EINA_LIST_FREE(children, child)
|
if (rp)
|
||||||
if (!evas_object_data_get(child, "\377 edje.box_item"))
|
{
|
||||||
{
|
if (rp->part->type != EDJE_PART_TYPE_BOX) continue;
|
||||||
EINA_LIST_FOREACH(l, ls, search)
|
|
||||||
|
children = evas_object_box_children_get(rp->object);
|
||||||
|
EINA_LIST_FREE(children, child)
|
||||||
|
if (!evas_object_data_get(child, "\377 edje.box_item"))
|
||||||
{
|
{
|
||||||
if (search->type == EDJE_USER_BOX_PACK &&
|
EINA_LIST_FOREACH(l, ls, search)
|
||||||
search->u.box.child == child &&
|
|
||||||
search->part == eud->part /* beauty of stringshare ! */)
|
|
||||||
{
|
{
|
||||||
search->u.box.index = idx++;
|
if (search->type == EDJE_USER_BOX_PACK &&
|
||||||
break;
|
search->u.box.child == child &&
|
||||||
|
search->part == eud->part /* beauty of stringshare ! */)
|
||||||
|
{
|
||||||
|
search->u.box.index = idx++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
_edje_real_part_box_remove(eud->ed, rp, child);
|
||||||
}
|
}
|
||||||
_edje_real_part_box_remove(eud->ed, rp, child);
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case EDJE_USER_TABLE_PACK:
|
case EDJE_USER_TABLE_PACK:
|
||||||
{
|
|
||||||
Edje_Real_Part *rp;
|
|
||||||
|
|
||||||
rp = _edje_real_part_recursive_get(&ed, eud->part);
|
|
||||||
if (rp)
|
|
||||||
{
|
{
|
||||||
if (rp->part->type != EDJE_PART_TYPE_TABLE) continue;
|
Edje_Real_Part *rp;
|
||||||
_edje_real_part_table_unpack(eud->ed, rp, eud->u.table.child);
|
|
||||||
|
rp = _edje_real_part_recursive_get(&ed, eud->part);
|
||||||
|
if (rp)
|
||||||
|
{
|
||||||
|
if (rp->part->type != EDJE_PART_TYPE_TABLE) continue;
|
||||||
|
_edje_real_part_table_unpack(eud->ed, rp, eud->u.table.child);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case EDJE_USER_SWALLOW:
|
case EDJE_USER_SWALLOW:
|
||||||
edje_object_part_unswallow(NULL, eud->u.swallow.child);
|
edje_object_part_unswallow(NULL, eud->u.swallow.child);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EDJE_USER_TEXT_STYLE:
|
case EDJE_USER_TEXT_STYLE:
|
||||||
_canvas_layout_user_text_collect(ed, eud);
|
_canvas_layout_user_text_collect(ed, eud);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EDJE_USER_DRAG_STEP:
|
case EDJE_USER_DRAG_STEP:
|
||||||
case EDJE_USER_DRAG_PAGE:
|
case EDJE_USER_DRAG_PAGE:
|
||||||
case EDJE_USER_DRAG_VALUE:
|
case EDJE_USER_DRAG_VALUE:
|
||||||
case EDJE_USER_DRAG_SIZE:
|
case EDJE_USER_DRAG_SIZE:
|
||||||
case EDJE_USER_TEXT_EXPAND:
|
case EDJE_USER_TEXT_EXPAND:
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
eina_iterator_free(it);
|
||||||
|
|
||||||
return collect;
|
return collect;
|
||||||
}
|
}
|
||||||
|
@ -1938,7 +1950,6 @@ _edje_file_callbacks_del(Edje *ed, Evas *e)
|
||||||
void
|
void
|
||||||
_edje_file_del(Edje *ed)
|
_edje_file_del(Edje *ed)
|
||||||
{
|
{
|
||||||
Edje_User_Defined *eud;
|
|
||||||
Evas *tev = NULL;
|
Evas *tev = NULL;
|
||||||
|
|
||||||
if (ed->obj && (!efl_invalidated_get(ed->obj)))
|
if (ed->obj && (!efl_invalidated_get(ed->obj)))
|
||||||
|
@ -1972,11 +1983,8 @@ _edje_file_del(Edje *ed)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (ed->user_defined)
|
eina_hash_free(ed->user_defined);
|
||||||
{
|
ed->user_defined = NULL;
|
||||||
eud = eina_list_data_get(ed->user_defined);
|
|
||||||
_edje_user_definition_free(eud);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ed->table_parts)
|
if (ed->table_parts)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1738,7 +1738,7 @@ struct _Edje
|
||||||
#endif
|
#endif
|
||||||
double duration_scale;
|
double duration_scale;
|
||||||
double paused_at;
|
double paused_at;
|
||||||
Eina_List *user_defined;
|
Eina_Hash *user_defined;
|
||||||
lua_State *L;
|
lua_State *L;
|
||||||
Eina_Inlist *lua_objs;
|
Eina_Inlist *lua_objs;
|
||||||
|
|
||||||
|
|
|
@ -61,44 +61,67 @@ static void _edje_child_remove(Edje *ed, Edje_Real_Part *rp, Evas_Object *c
|
||||||
|
|
||||||
Edje_Real_Part *_edje_real_part_recursive_get_helper(Edje **ed, char **path);
|
Edje_Real_Part *_edje_real_part_recursive_get_helper(Edje **ed, char **path);
|
||||||
|
|
||||||
|
static void
|
||||||
|
_edje_user_definition_free_internal(Edje_User_Defined *eud)
|
||||||
|
{
|
||||||
|
Evas_Object *child = NULL;
|
||||||
|
switch (eud->type)
|
||||||
|
{
|
||||||
|
case EDJE_USER_SWALLOW:
|
||||||
|
child = eud->u.swallow.child;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EDJE_USER_BOX_PACK:
|
||||||
|
child = eud->u.box.child;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EDJE_USER_TABLE_PACK:
|
||||||
|
child = eud->u.table.child;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
if (child) evas_object_event_callback_del_full(child, EVAS_CALLBACK_DEL, _edje_user_def_del_cb, eud);
|
||||||
|
eina_stringshare_del(eud->part);
|
||||||
|
free(eud);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_edje_user_definition_list_free_internal(Eina_List *l)
|
||||||
|
{
|
||||||
|
Edje_User_Defined *eud;
|
||||||
|
EINA_LIST_FREE(l, eud)
|
||||||
|
_edje_user_definition_free_internal(eud);
|
||||||
|
}
|
||||||
|
|
||||||
static Edje_User_Defined *
|
static Edje_User_Defined *
|
||||||
_edje_user_definition_new(Edje_User_Defined_Type type, const char *part, Edje *ed)
|
_edje_user_definition_new(Edje_User_Defined_Type type, const char *part, Edje *ed)
|
||||||
{
|
{
|
||||||
Edje_User_Defined *eud;
|
Edje_User_Defined *eud;
|
||||||
|
|
||||||
|
if (!ed->user_defined)
|
||||||
|
ed->user_defined = eina_hash_string_superfast_new((Eina_Free_Cb)_edje_user_definition_list_free_internal);
|
||||||
|
EINA_SAFETY_ON_NULL_RETURN_VAL(ed->user_defined, NULL);
|
||||||
|
|
||||||
eud = malloc(sizeof (Edje_User_Defined));
|
eud = malloc(sizeof (Edje_User_Defined));
|
||||||
if (!eud) return NULL;
|
if (!eud) return NULL;
|
||||||
|
|
||||||
eud->type = type;
|
eud->type = type;
|
||||||
eud->part = eina_stringshare_add(part);
|
eud->part = eina_stringshare_add(part);
|
||||||
eud->ed = ed;
|
eud->ed = ed;
|
||||||
ed->user_defined = eina_list_append(ed->user_defined, eud);
|
eina_hash_list_direct_append(ed->user_defined, eud->part, eud);
|
||||||
|
|
||||||
return eud;
|
return eud;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
_edje_user_definition_remove(Edje_User_Defined *eud, Evas_Object *child)
|
|
||||||
{
|
|
||||||
eud->ed->user_defined = eina_list_remove(eud->ed->user_defined, eud);
|
|
||||||
|
|
||||||
if (child) evas_object_event_callback_del_full(child, EVAS_CALLBACK_DEL, _edje_user_def_del_cb, eud);
|
|
||||||
eina_stringshare_del(eud->part);
|
|
||||||
free(eud);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
_edje_user_definition_free(Edje_User_Defined *eud)
|
_edje_user_definition_free(Edje_User_Defined *eud)
|
||||||
{
|
{
|
||||||
Evas_Object *child = NULL;
|
|
||||||
Edje_Real_Part *rp;
|
Edje_Real_Part *rp;
|
||||||
|
|
||||||
eud->ed->user_defined = eina_list_remove(eud->ed->user_defined, eud);
|
|
||||||
|
|
||||||
switch (eud->type)
|
switch (eud->type)
|
||||||
{
|
{
|
||||||
case EDJE_USER_SWALLOW:
|
case EDJE_USER_SWALLOW:
|
||||||
child = eud->u.swallow.child;
|
|
||||||
rp = _edje_real_part_recursive_get(&eud->ed, eud->part);
|
rp = _edje_real_part_recursive_get(&eud->ed, eud->part);
|
||||||
if (rp)
|
if (rp)
|
||||||
{
|
{
|
||||||
|
@ -125,15 +148,13 @@ _edje_user_definition_free(Edje_User_Defined *eud)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EDJE_USER_BOX_PACK:
|
case EDJE_USER_BOX_PACK:
|
||||||
child = eud->u.box.child;
|
|
||||||
rp = _edje_real_part_recursive_get(&eud->ed, eud->part);
|
rp = _edje_real_part_recursive_get(&eud->ed, eud->part);
|
||||||
if (rp) _edje_child_remove(eud->ed, rp, child);
|
if (rp) _edje_child_remove(eud->ed, rp, eud->u.box.child);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EDJE_USER_TABLE_PACK:
|
case EDJE_USER_TABLE_PACK:
|
||||||
child = eud->u.table.child;
|
|
||||||
rp = _edje_real_part_recursive_get(&eud->ed, eud->part);
|
rp = _edje_real_part_recursive_get(&eud->ed, eud->part);
|
||||||
if (rp) _edje_child_remove(eud->ed, rp, child);
|
if (rp) _edje_child_remove(eud->ed, rp, eud->u.table.child);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EDJE_USER_TEXT_STYLE:
|
case EDJE_USER_TEXT_STYLE:
|
||||||
|
@ -155,7 +176,8 @@ _edje_user_definition_free(Edje_User_Defined *eud)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
_edje_user_definition_remove(eud, child);
|
eina_hash_list_remove(eud->ed->user_defined, eud->part, eud);
|
||||||
|
_edje_user_definition_free_internal(eud);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -2007,15 +2029,11 @@ Edje_User_Defined *
|
||||||
_edje_user_text_style_definition_fetch(Edje *ed, const char *part)
|
_edje_user_text_style_definition_fetch(Edje *ed, const char *part)
|
||||||
{
|
{
|
||||||
Edje_User_Defined *eud;
|
Edje_User_Defined *eud;
|
||||||
Eina_List *l;
|
Eina_List *l, *ll;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(ed->user_defined, l, eud)
|
l = eina_hash_find(ed->user_defined, part);
|
||||||
{
|
EINA_LIST_FOREACH(l, ll, eud)
|
||||||
if (eud->type == EDJE_USER_TEXT_STYLE && !strcmp(eud->part, part))
|
if (eud->type == EDJE_USER_TEXT_STYLE) break;
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!eud)
|
if (!eud)
|
||||||
{
|
{
|
||||||
|
@ -2032,15 +2050,11 @@ Edje_User_Defined *
|
||||||
_edje_user_text_expand_definition_fetch(Edje *ed, const char *part)
|
_edje_user_text_expand_definition_fetch(Edje *ed, const char *part)
|
||||||
{
|
{
|
||||||
Edje_User_Defined *eud;
|
Edje_User_Defined *eud;
|
||||||
Eina_List *l;
|
Eina_List *l, *ll;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(ed->user_defined, l, eud)
|
l = eina_hash_find(ed->user_defined, part);
|
||||||
{
|
EINA_LIST_FOREACH(l, ll, eud)
|
||||||
if (eud->type == EDJE_USER_TEXT_EXPAND && !strcmp(eud->part, part))
|
if (eud->type == EDJE_USER_TEXT_EXPAND) break;
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!eud)
|
if (!eud)
|
||||||
{
|
{
|
||||||
|
@ -2059,10 +2073,11 @@ _edje_user_define_string(Edje *ed, const char *part, const char *raw_text, Edje_
|
||||||
rp. So on edje_object_file_set, we should first ref it, before destroying the old
|
rp. So on edje_object_file_set, we should first ref it, before destroying the old
|
||||||
layout. */
|
layout. */
|
||||||
Edje_User_Defined *eud;
|
Edje_User_Defined *eud;
|
||||||
Eina_List *l;
|
Eina_List *l, *ll;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(ed->user_defined, l, eud)
|
l = eina_hash_find(ed->user_defined, part);
|
||||||
if (eud->type == EDJE_USER_STRING && !strcmp(eud->part, part))
|
EINA_LIST_FOREACH(l, ll, eud)
|
||||||
|
if (eud->type == EDJE_USER_STRING)
|
||||||
{
|
{
|
||||||
if (!raw_text)
|
if (!raw_text)
|
||||||
{
|
{
|
||||||
|
@ -3349,18 +3364,24 @@ _efl_canvas_layout_content_remove(Eo *obj EINA_UNUSED, Edje *ed, Evas_Object *ob
|
||||||
{
|
{
|
||||||
Edje_Real_Part *rp;
|
Edje_Real_Part *rp;
|
||||||
Edje_User_Defined *eud;
|
Edje_User_Defined *eud;
|
||||||
Eina_List *l;
|
Eina_Iterator *it;
|
||||||
|
Eina_List *l, *ll;
|
||||||
|
|
||||||
rp = _swallow_real_part_get(obj_swallow);
|
rp = _swallow_real_part_get(obj_swallow);
|
||||||
if (!rp) return EINA_FALSE;
|
if (!rp) return EINA_FALSE;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(ed->user_defined, l, eud)
|
it = eina_hash_iterator_data_new(ed->user_defined);
|
||||||
if ((eud->type == EDJE_USER_SWALLOW) && (eud->u.swallow.child == obj_swallow))
|
EINA_ITERATOR_FOREACH(it, l)
|
||||||
{
|
{
|
||||||
_edje_user_definition_free(eud);
|
EINA_LIST_FOREACH(l, ll, eud)
|
||||||
return EINA_TRUE;
|
if ((eud->type == EDJE_USER_SWALLOW) && (eud->u.swallow.child == obj_swallow))
|
||||||
}
|
{
|
||||||
|
_edje_user_definition_free(eud);
|
||||||
|
eina_iterator_free(it);
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
eina_iterator_free(it);
|
||||||
_edje_real_part_swallow_clear(ed, rp);
|
_edje_real_part_swallow_clear(ed, rp);
|
||||||
rp->typedata.swallow->swallowed_object = NULL;
|
rp->typedata.swallow->swallowed_object = NULL;
|
||||||
rp->typedata.swallow->swallow_params.min.w = 0;
|
rp->typedata.swallow->swallow_params.min.w = 0;
|
||||||
|
@ -3899,15 +3920,16 @@ _edje_object_part_drag_value_set(Edje *ed, const char *part, double dx, double d
|
||||||
{
|
{
|
||||||
Edje_Real_Part *rp;
|
Edje_Real_Part *rp;
|
||||||
Edje_User_Defined *eud;
|
Edje_User_Defined *eud;
|
||||||
Eina_List *l;
|
Eina_List *l, *ll;
|
||||||
|
|
||||||
if ((!ed) || (!part)) return EINA_FALSE;
|
if ((!ed) || (!part)) return EINA_FALSE;
|
||||||
rp = _edje_real_part_recursive_get(&ed, part);
|
rp = _edje_real_part_recursive_get(&ed, part);
|
||||||
if (!rp) return EINA_FALSE;
|
if (!rp) return EINA_FALSE;
|
||||||
if (!rp->drag) return EINA_FALSE;
|
if (!rp->drag) return EINA_FALSE;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(ed->user_defined, l, eud)
|
l = eina_hash_find(ed->user_defined, part);
|
||||||
if (eud->type == EDJE_USER_DRAG_VALUE && !strcmp(part, eud->part))
|
EINA_LIST_FOREACH(l, ll, eud)
|
||||||
|
if (eud->type == EDJE_USER_DRAG_VALUE)
|
||||||
{
|
{
|
||||||
eud->u.drag_position.x = dx;
|
eud->u.drag_position.x = dx;
|
||||||
eud->u.drag_position.y = dy;
|
eud->u.drag_position.y = dy;
|
||||||
|
@ -3984,15 +4006,16 @@ _edje_object_part_drag_size_set(Edje *ed, const char *part, double dw, double dh
|
||||||
{
|
{
|
||||||
Edje_Real_Part *rp;
|
Edje_Real_Part *rp;
|
||||||
Edje_User_Defined *eud;
|
Edje_User_Defined *eud;
|
||||||
Eina_List *l;
|
Eina_List *l, *ll;
|
||||||
|
|
||||||
if ((!ed) || (!part)) return EINA_FALSE;
|
if ((!ed) || (!part)) return EINA_FALSE;
|
||||||
rp = _edje_real_part_recursive_get(&ed, part);
|
rp = _edje_real_part_recursive_get(&ed, part);
|
||||||
if (!rp) return EINA_FALSE;
|
if (!rp) return EINA_FALSE;
|
||||||
if (!rp->drag) return EINA_FALSE;
|
if (!rp->drag) return EINA_FALSE;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(ed->user_defined, l, eud)
|
l = eina_hash_find(ed->user_defined, part);
|
||||||
if (eud->type == EDJE_USER_DRAG_SIZE && !strcmp(part, eud->part))
|
EINA_LIST_FOREACH(l, ll, eud)
|
||||||
|
if (eud->type == EDJE_USER_DRAG_SIZE)
|
||||||
{
|
{
|
||||||
eud->u.drag_size.w = dw;
|
eud->u.drag_size.w = dw;
|
||||||
eud->u.drag_size.h = dh;
|
eud->u.drag_size.h = dh;
|
||||||
|
@ -4063,15 +4086,16 @@ _edje_object_part_drag_step_set(Edje *ed, const char *part, double dx, double dy
|
||||||
{
|
{
|
||||||
Edje_Real_Part *rp;
|
Edje_Real_Part *rp;
|
||||||
Edje_User_Defined *eud;
|
Edje_User_Defined *eud;
|
||||||
Eina_List *l;
|
Eina_List *l, *ll;
|
||||||
|
|
||||||
if ((!ed) || (!part)) return EINA_FALSE;
|
if ((!ed) || (!part)) return EINA_FALSE;
|
||||||
rp = _edje_real_part_recursive_get(&ed, part);
|
rp = _edje_real_part_recursive_get(&ed, part);
|
||||||
if (!rp) return EINA_FALSE;
|
if (!rp) return EINA_FALSE;
|
||||||
if (!rp->drag) return EINA_FALSE;
|
if (!rp->drag) return EINA_FALSE;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(ed->user_defined, l, eud)
|
l = eina_hash_find(ed->user_defined, part);
|
||||||
if (eud->type == EDJE_USER_DRAG_STEP && !strcmp(part, eud->part))
|
EINA_LIST_FOREACH(l, ll, eud)
|
||||||
|
if (eud->type == EDJE_USER_DRAG_STEP)
|
||||||
{
|
{
|
||||||
eud->u.drag_position.x = dx;
|
eud->u.drag_position.x = dx;
|
||||||
eud->u.drag_position.y = dy;
|
eud->u.drag_position.y = dy;
|
||||||
|
@ -4135,15 +4159,16 @@ _edje_object_part_drag_page_set(Edje *ed, const char *part, double dx, double dy
|
||||||
{
|
{
|
||||||
Edje_Real_Part *rp;
|
Edje_Real_Part *rp;
|
||||||
Edje_User_Defined *eud;
|
Edje_User_Defined *eud;
|
||||||
Eina_List *l;
|
Eina_List *l, *ll;
|
||||||
|
|
||||||
if ((!ed) || (!part)) return EINA_FALSE;
|
if ((!ed) || (!part)) return EINA_FALSE;
|
||||||
rp = _edje_real_part_recursive_get(&ed, part);
|
rp = _edje_real_part_recursive_get(&ed, part);
|
||||||
if (!rp) return EINA_FALSE;
|
if (!rp) return EINA_FALSE;
|
||||||
if (!rp->drag) return EINA_FALSE;
|
if (!rp->drag) return EINA_FALSE;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(ed->user_defined, l, eud)
|
l = eina_hash_find(ed->user_defined, part);
|
||||||
if (eud->type == EDJE_USER_DRAG_PAGE && !strcmp(part, eud->part))
|
EINA_LIST_FOREACH(l, ll, eud)
|
||||||
|
if (eud->type == EDJE_USER_DRAG_PAGE)
|
||||||
{
|
{
|
||||||
eud->u.drag_position.x = dx;
|
eud->u.drag_position.x = dx;
|
||||||
eud->u.drag_position.y = dy;
|
eud->u.drag_position.y = dy;
|
||||||
|
@ -4208,15 +4233,16 @@ _edje_object_part_drag_step(Edje *ed, const char *part, double dx, double dy)
|
||||||
Edje_Real_Part *rp;
|
Edje_Real_Part *rp;
|
||||||
FLOAT_T px, py;
|
FLOAT_T px, py;
|
||||||
Edje_User_Defined *eud;
|
Edje_User_Defined *eud;
|
||||||
Eina_List *l;
|
Eina_List *l, *ll;
|
||||||
|
|
||||||
if ((!ed) || (!part)) return EINA_FALSE;
|
if ((!ed) || (!part)) return EINA_FALSE;
|
||||||
rp = _edje_real_part_recursive_get(&ed, part);
|
rp = _edje_real_part_recursive_get(&ed, part);
|
||||||
if (!rp) return EINA_FALSE;
|
if (!rp) return EINA_FALSE;
|
||||||
if (!rp->drag) return EINA_FALSE;
|
if (!rp->drag) return EINA_FALSE;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(ed->user_defined, l, eud)
|
l = eina_hash_find(ed->user_defined, part);
|
||||||
if (eud->type == EDJE_USER_DRAG_STEP && !strcmp(part, eud->part))
|
EINA_LIST_FOREACH(l, ll, eud)
|
||||||
|
if (eud->type == EDJE_USER_DRAG_STEP)
|
||||||
{
|
{
|
||||||
eud->u.drag_position.x = dx;
|
eud->u.drag_position.x = dx;
|
||||||
eud->u.drag_position.y = dy;
|
eud->u.drag_position.y = dy;
|
||||||
|
@ -4259,15 +4285,16 @@ _edje_object_part_drag_page(Edje *ed, const char *part, double dx, double dy)
|
||||||
Edje_Real_Part *rp;
|
Edje_Real_Part *rp;
|
||||||
FLOAT_T px, py;
|
FLOAT_T px, py;
|
||||||
Edje_User_Defined *eud;
|
Edje_User_Defined *eud;
|
||||||
Eina_List *l;
|
Eina_List *l, *ll;
|
||||||
|
|
||||||
if ((!ed) || (!part)) return EINA_FALSE;
|
if ((!ed) || (!part)) return EINA_FALSE;
|
||||||
rp = _edje_real_part_recursive_get(&ed, part);
|
rp = _edje_real_part_recursive_get(&ed, part);
|
||||||
if (!rp) return EINA_FALSE;
|
if (!rp) return EINA_FALSE;
|
||||||
if (!rp->drag) return EINA_FALSE;
|
if (!rp->drag) return EINA_FALSE;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(ed->user_defined, l, eud)
|
l = eina_hash_find(ed->user_defined, part);
|
||||||
if (eud->type == EDJE_USER_DRAG_PAGE && !strcmp(part, eud->part))
|
EINA_LIST_FOREACH(l, ll, eud)
|
||||||
|
if (eud->type == EDJE_USER_DRAG_PAGE)
|
||||||
{
|
{
|
||||||
eud->u.drag_position.x = dx;
|
eud->u.drag_position.x = dx;
|
||||||
eud->u.drag_position.y = dy;
|
eud->u.drag_position.y = dy;
|
||||||
|
@ -4459,6 +4486,21 @@ _edje_part_box_insert_at(Edje *ed, const char *part, Evas_Object *child, unsigne
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_edje_part_box_remove_user_definition(Edje *ed, Eina_Stringshare *part, Evas_Object *child)
|
||||||
|
{
|
||||||
|
Edje_User_Defined *eud;
|
||||||
|
Eina_List *l, *ll;
|
||||||
|
|
||||||
|
l = eina_hash_find(ed->user_defined, part);
|
||||||
|
EINA_LIST_FOREACH(l, ll, eud)
|
||||||
|
if (eud->type == EDJE_USER_BOX_PACK && eud->u.box.child == child)
|
||||||
|
{
|
||||||
|
_edje_user_definition_free(eud);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Evas_Object *
|
Evas_Object *
|
||||||
_edje_part_box_remove(Edje *ed, const char *part, Evas_Object *child)
|
_edje_part_box_remove(Edje *ed, const char *part, Evas_Object *child)
|
||||||
{
|
{
|
||||||
|
@ -4473,18 +4515,7 @@ _edje_part_box_remove(Edje *ed, const char *part, Evas_Object *child)
|
||||||
|
|
||||||
r = _edje_real_part_box_remove(ed, rp, child);
|
r = _edje_real_part_box_remove(ed, rp, child);
|
||||||
|
|
||||||
if (r)
|
if (r) _edje_part_box_remove_user_definition(ed, part, r);
|
||||||
{
|
|
||||||
Edje_User_Defined *eud;
|
|
||||||
Eina_List *l;
|
|
||||||
|
|
||||||
EINA_LIST_FOREACH(ed->user_defined, l, eud)
|
|
||||||
if (eud->type == EDJE_USER_BOX_PACK && eud->u.box.child == child && !strcmp(eud->part, part))
|
|
||||||
{
|
|
||||||
_edje_user_definition_free(eud);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4502,18 +4533,7 @@ _edje_part_box_remove_at(Edje *ed, const char *part, unsigned int pos)
|
||||||
|
|
||||||
r = _edje_real_part_box_remove_at(ed, rp, pos);
|
r = _edje_real_part_box_remove_at(ed, rp, pos);
|
||||||
|
|
||||||
if (r)
|
if (r) _edje_part_box_remove_user_definition(ed, part, r);
|
||||||
{
|
|
||||||
Edje_User_Defined *eud;
|
|
||||||
Eina_List *l;
|
|
||||||
|
|
||||||
EINA_LIST_FOREACH(ed->user_defined, l, eud)
|
|
||||||
if (eud->type == EDJE_USER_BOX_PACK && eud->u.box.child == r && !strcmp(eud->part, part))
|
|
||||||
{
|
|
||||||
_edje_user_definition_free(eud);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4549,15 +4569,7 @@ _edje_part_box_remove_all(Edje *ed, const char *part, Eina_Bool clear)
|
||||||
if (_edje_real_part_box_remove_all(ed, rp, clear))
|
if (_edje_real_part_box_remove_all(ed, rp, clear))
|
||||||
{
|
{
|
||||||
ret = EINA_TRUE;
|
ret = EINA_TRUE;
|
||||||
Edje_User_Defined *eud;
|
eina_hash_del_by_key(ed->user_defined, part);
|
||||||
Eina_List *ll, *l;
|
|
||||||
|
|
||||||
EINA_LIST_FOREACH_SAFE(ed->user_defined, l, ll, eud)
|
|
||||||
if (eud->type == EDJE_USER_BOX_PACK && !strcmp(eud->part, part))
|
|
||||||
{
|
|
||||||
_edje_user_definition_free(eud);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -4642,16 +4654,16 @@ _edje_child_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *child, void *ei
|
||||||
{
|
{
|
||||||
Edje_Real_Part *rp = data;
|
Edje_Real_Part *rp = data;
|
||||||
Edje_User_Defined *eud;
|
Edje_User_Defined *eud;
|
||||||
Eina_List *l;
|
Eina_List *l, *ll;
|
||||||
Edje *ed = evas_object_data_get(child, ".edje");
|
Edje *ed = evas_object_data_get(child, ".edje");
|
||||||
|
|
||||||
if (!ed) return;
|
if (!ed) return;
|
||||||
EINA_LIST_FOREACH(ed->user_defined, l, eud)
|
l = eina_hash_find(ed->user_defined, rp->part->name);
|
||||||
|
EINA_LIST_FOREACH(l, ll, eud)
|
||||||
if (rp->part->type == EDJE_PART_TYPE_BOX)
|
if (rp->part->type == EDJE_PART_TYPE_BOX)
|
||||||
{
|
{
|
||||||
if (eud->type == EDJE_USER_BOX_PACK &&
|
if (eud->type == EDJE_USER_BOX_PACK &&
|
||||||
eud->u.box.child == child &&
|
eud->u.box.child == child)
|
||||||
!strcmp(rp->part->name, eud->part))
|
|
||||||
{
|
{
|
||||||
_edje_user_definition_free(eud);
|
_edje_user_definition_free(eud);
|
||||||
break;
|
break;
|
||||||
|
@ -4660,8 +4672,7 @@ _edje_child_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *child, void *ei
|
||||||
else if (rp->part->type == EDJE_PART_TYPE_TABLE)
|
else if (rp->part->type == EDJE_PART_TYPE_TABLE)
|
||||||
{
|
{
|
||||||
if (eud->type == EDJE_USER_TABLE_PACK &&
|
if (eud->type == EDJE_USER_TABLE_PACK &&
|
||||||
eud->u.table.child == child &&
|
eud->u.table.child == child)
|
||||||
!strcmp(rp->part->name, eud->part))
|
|
||||||
{
|
{
|
||||||
_edje_user_definition_free(eud);
|
_edje_user_definition_free(eud);
|
||||||
break;
|
break;
|
||||||
|
@ -4952,12 +4963,12 @@ _edje_part_table_unpack(Edje *ed, const char *part, Evas_Object *child_obj)
|
||||||
{
|
{
|
||||||
ret = EINA_TRUE;
|
ret = EINA_TRUE;
|
||||||
Edje_User_Defined *eud;
|
Edje_User_Defined *eud;
|
||||||
Eina_List *l;
|
Eina_List *l, *ll;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(ed->user_defined, l, eud)
|
l = eina_hash_find(ed->user_defined, part);
|
||||||
|
EINA_LIST_FOREACH(l, ll, eud)
|
||||||
if (eud->type == EDJE_USER_TABLE_PACK &&
|
if (eud->type == EDJE_USER_TABLE_PACK &&
|
||||||
eud->u.table.child == child_obj &&
|
eud->u.table.child == child_obj)
|
||||||
!strcmp(part, eud->part))
|
|
||||||
{
|
{
|
||||||
_edje_user_definition_free(eud);
|
_edje_user_definition_free(eud);
|
||||||
break;
|
break;
|
||||||
|
@ -5881,18 +5892,24 @@ void
|
||||||
_edje_object_part_swallow_free_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
|
_edje_object_part_swallow_free_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||||
{
|
{
|
||||||
Edje_User_Defined *eud;
|
Edje_User_Defined *eud;
|
||||||
Eina_List *l;
|
Eina_List *l, *ll;
|
||||||
|
Eina_Iterator *it;
|
||||||
Edje *ed;
|
Edje *ed;
|
||||||
Edje_Real_Part *rp;
|
Edje_Real_Part *rp;
|
||||||
|
|
||||||
ed = evas_object_data_get(obj, ".edje");
|
ed = evas_object_data_get(obj, ".edje");
|
||||||
if (!ed) return;
|
if (!ed) return;
|
||||||
EINA_LIST_FOREACH(ed->user_defined, l, eud)
|
it = eina_hash_iterator_data_new(ed->user_defined);
|
||||||
if (eud->type == EDJE_USER_SWALLOW && eud->u.swallow.child == obj)
|
EINA_ITERATOR_FOREACH(it, l)
|
||||||
{
|
{
|
||||||
_edje_user_definition_free(eud);
|
EINA_LIST_FOREACH(l, ll, eud)
|
||||||
break;
|
if (eud->type == EDJE_USER_SWALLOW && eud->u.swallow.child == obj)
|
||||||
}
|
{
|
||||||
|
_edje_user_definition_free(eud);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
out:
|
||||||
rp = evas_object_data_get(obj, "\377 edje.swallowing_part");
|
rp = evas_object_data_get(obj, "\377 edje.swallowing_part");
|
||||||
if (rp && (rp->part->type == EDJE_PART_TYPE_SWALLOW))
|
if (rp && (rp->part->type == EDJE_PART_TYPE_SWALLOW))
|
||||||
edje_object_part_unswallow(ed->obj, obj);
|
edje_object_part_unswallow(ed->obj, obj);
|
||||||
|
|
Loading…
Reference in New Issue