}
return;
}
+
+ while (ed->user_defined)
+ {
+ eud = eina_list_data_get(ed->user_defined);
+ _edje_user_definition_free(eud);
+ }
+
if (ed->table_parts)
{
unsigned int i;
}
}
- while (ed->user_defined)
- {
- eud = eina_list_data_get(ed->user_defined);
- _edje_user_definition_free(eud);
- }
-
if (ed->L) _edje_lua2_script_shutdown(ed);
while (ed->subobjs) _edje_subobj_unregister(ed, ed->subobjs->data);
if (ed->table_parts) free(ed->table_parts);
static void _edje_object_image_preload_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _edje_object_signal_preload_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
static void _edje_user_def_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *child __UNUSED__, void *einfo __UNUSED__);
+static void _edje_table_child_remove(Edje_Real_Part *rp, Evas_Object *child);
+static void _edje_box_child_remove(Edje_Real_Part *rp, Evas_Object *child);
Edje_Real_Part *_edje_real_part_recursive_get_helper(const Edje *ed, char **path);
_edje_user_definition_free(Edje_User_Defined *eud)
{
Evas_Object *child = NULL;
+ Edje_Real_Part *rp;
+
+ eud->ed->user_defined = eina_list_remove(eud->ed->user_defined, eud);
+
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;
+ case EDJE_USER_SWALLOW:
+ child = eud->u.swallow.child;
+ edje_object_part_unswallow(eud->ed->obj, child);
+ break;
+ case EDJE_USER_BOX_PACK:
+ child = eud->u.box.child;
+ rp = _edje_real_part_recursive_get(eud->ed, eud->part);
+ _edje_box_child_remove(rp, child);
+ break;
+ case EDJE_USER_TABLE_PACK:
+ child = eud->u.table.child;
+ rp = _edje_real_part_recursive_get(eud->ed, eud->part);
+ _edje_table_child_remove(rp, child);
+ break;
case EDJE_USER_STRING:
case EDJE_USER_DRAG_STEP:
case EDJE_USER_DRAG_PAGE:
case EDJE_USER_DRAG_SIZE:
break;
}
+
if (child) evas_object_event_callback_del_full(child, EVAS_CALLBACK_DEL, _edje_user_def_del_cb, eud);
- eud->ed->user_defined = eina_list_remove(eud->ed->user_defined, eud);
eina_stringshare_del(eud->part);
free(eud);
}