forked from enlightenment/efl
fix segv on obj del - didnt remove callbacks!
SVN revision: 43596
This commit is contained in:
parent
48848d8cbe
commit
3b07a3d255
|
@ -840,15 +840,7 @@ _edje_file_del(Edje *ed)
|
||||||
}
|
}
|
||||||
if (rp->swallowed_object)
|
if (rp->swallowed_object)
|
||||||
{
|
{
|
||||||
evas_object_smart_member_del(rp->swallowed_object);
|
_edje_real_part_swallow_clear(rp);
|
||||||
evas_object_event_callback_del(rp->swallowed_object,
|
|
||||||
EVAS_CALLBACK_FREE,
|
|
||||||
_edje_object_part_swallow_free_cb);
|
|
||||||
evas_object_clip_unset(rp->swallowed_object);
|
|
||||||
evas_object_data_del(rp->swallowed_object, "\377 edje.swallowing_part");
|
|
||||||
if (rp->part->mouse_events)
|
|
||||||
_edje_callbacks_del(rp->swallowed_object);
|
|
||||||
|
|
||||||
/* Objects swallowed by the app do not get deleted,
|
/* Objects swallowed by the app do not get deleted,
|
||||||
but those internally swallowed (GROUP type) do. */
|
but those internally swallowed (GROUP type) do. */
|
||||||
switch (rp->part->type)
|
switch (rp->part->type)
|
||||||
|
@ -862,7 +854,6 @@ _edje_file_del(Edje *ed)
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
rp->swallowed_object = NULL;
|
rp->swallowed_object = NULL;
|
||||||
}
|
}
|
||||||
if (rp->items)
|
if (rp->items)
|
||||||
|
|
|
@ -1148,6 +1148,7 @@ void _edje_block_violate(Edje *ed);
|
||||||
void _edje_object_part_swallow_free_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
void _edje_object_part_swallow_free_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||||
void _edje_object_part_swallow_changed_hints_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
void _edje_object_part_swallow_changed_hints_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||||
void _edje_real_part_swallow(Edje_Real_Part *rp, Evas_Object *obj_swallow);
|
void _edje_real_part_swallow(Edje_Real_Part *rp, Evas_Object *obj_swallow);
|
||||||
|
void _edje_real_part_swallow_clear(Edje_Real_Part *rp);
|
||||||
void _edje_box_init(void);
|
void _edje_box_init(void);
|
||||||
void _edje_box_shutdown(void);
|
void _edje_box_shutdown(void);
|
||||||
Eina_Bool _edje_box_layout_find(const char *name, Evas_Object_Box_Layout *cb, void **data, void (**free_data)(void *data));
|
Eina_Bool _edje_box_layout_find(const char *name, Evas_Object_Box_Layout *cb, void **data, void (**free_data)(void *data));
|
||||||
|
|
|
@ -3887,19 +3887,7 @@ _edje_real_part_swallow(Edje_Real_Part *rp, Evas_Object *obj_swallow)
|
||||||
{
|
{
|
||||||
if (rp->swallowed_object != obj_swallow)
|
if (rp->swallowed_object != obj_swallow)
|
||||||
{
|
{
|
||||||
evas_object_smart_member_del(rp->swallowed_object);
|
_edje_real_part_swallow_clear(rp);
|
||||||
evas_object_event_callback_del_full(rp->swallowed_object,
|
|
||||||
EVAS_CALLBACK_FREE,
|
|
||||||
_edje_object_part_swallow_free_cb,
|
|
||||||
rp->edje->obj);
|
|
||||||
evas_object_event_callback_del_full(rp->swallowed_object,
|
|
||||||
EVAS_CALLBACK_CHANGED_SIZE_HINTS,
|
|
||||||
_edje_object_part_swallow_changed_hints_cb,
|
|
||||||
rp);
|
|
||||||
evas_object_clip_unset(rp->swallowed_object);
|
|
||||||
evas_object_data_del(rp->swallowed_object, "\377 edje.swallowing_part");
|
|
||||||
if (rp->part->mouse_events)
|
|
||||||
_edje_callbacks_del(rp->swallowed_object);
|
|
||||||
rp->swallowed_object = NULL;
|
rp->swallowed_object = NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -3949,3 +3937,21 @@ _edje_real_part_swallow(Edje_Real_Part *rp, Evas_Object *obj_swallow)
|
||||||
rp->edje->dirty = 1;
|
rp->edje->dirty = 1;
|
||||||
_edje_recalc(rp->edje);
|
_edje_recalc(rp->edje);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_edje_real_part_swallow_clear(Edje_Real_Part *rp)
|
||||||
|
{
|
||||||
|
evas_object_smart_member_del(rp->swallowed_object);
|
||||||
|
evas_object_event_callback_del_full(rp->swallowed_object,
|
||||||
|
EVAS_CALLBACK_FREE,
|
||||||
|
_edje_object_part_swallow_free_cb,
|
||||||
|
rp->edje->obj);
|
||||||
|
evas_object_event_callback_del_full(rp->swallowed_object,
|
||||||
|
EVAS_CALLBACK_CHANGED_SIZE_HINTS,
|
||||||
|
_edje_object_part_swallow_changed_hints_cb,
|
||||||
|
rp);
|
||||||
|
evas_object_clip_unset(rp->swallowed_object);
|
||||||
|
evas_object_data_del(rp->swallowed_object, "\377 edje.swallowing_part");
|
||||||
|
if (rp->part->mouse_events)
|
||||||
|
_edje_callbacks_del(rp->swallowed_object);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue