forked from enlightenment/enlightenment
remove gadget drop object event callbacks during object deletion
ensure that no callbacks reference gadget internals after they have been deleted
This commit is contained in:
parent
acf8988c40
commit
1861f474e4
|
@ -123,6 +123,7 @@ static E_Config_DD *edd_gadget;
|
||||||
static void _gadget_object_finalize(E_Gadget_Config *zgc);
|
static void _gadget_object_finalize(E_Gadget_Config *zgc);
|
||||||
static Eina_Bool _gadget_object_create(E_Gadget_Config *zgc);
|
static Eina_Bool _gadget_object_create(E_Gadget_Config *zgc);
|
||||||
static void _editor_pointer_site_init(E_Gadget_Site_Orient orient, Evas_Object *site, Evas_Object *editor, Eina_Bool );
|
static void _editor_pointer_site_init(E_Gadget_Site_Orient orient, Evas_Object *site, Evas_Object *editor, Eina_Bool );
|
||||||
|
static void _gadget_drop_handler_moveresize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_comp_site_resize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
_comp_site_resize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||||
|
@ -297,6 +298,20 @@ _gadget_object_free(E_Object *eobj)
|
||||||
}
|
}
|
||||||
zgc->gadget = NULL;
|
zgc->gadget = NULL;
|
||||||
|
|
||||||
|
if (zgc->drop_handlers)
|
||||||
|
{
|
||||||
|
Evas_Object *drop_object;
|
||||||
|
Eina_Iterator *it = eina_hash_iterator_key_new(zgc->drop_handlers);
|
||||||
|
|
||||||
|
EINA_ITERATOR_FOREACH(it, drop_object)
|
||||||
|
{
|
||||||
|
evas_object_event_callback_del(drop_object, EVAS_CALLBACK_MOVE, _gadget_drop_handler_moveresize);
|
||||||
|
evas_object_event_callback_del(drop_object, EVAS_CALLBACK_RESIZE, _gadget_drop_handler_moveresize);
|
||||||
|
evas_object_event_callback_del(drop_object, EVAS_CALLBACK_DEL, _gadget_drop_handler_del);
|
||||||
|
}
|
||||||
|
eina_iterator_free(it);
|
||||||
|
}
|
||||||
|
|
||||||
E_FREE_FUNC(zgc->drop_handlers, eina_hash_free);
|
E_FREE_FUNC(zgc->drop_handlers, eina_hash_free);
|
||||||
E_FREE_FUNC(zgc->gadget, evas_object_del);
|
E_FREE_FUNC(zgc->gadget, evas_object_del);
|
||||||
E_FREE_FUNC(zgc->cfg_object, evas_object_del);
|
E_FREE_FUNC(zgc->cfg_object, evas_object_del);
|
||||||
|
|
Loading…
Reference in New Issue