diff --git a/src/lib/evas/canvas/evas_callbacks.c b/src/lib/evas/canvas/evas_callbacks.c index 9bc736670b..e126d8d7f1 100644 --- a/src/lib/evas/canvas/evas_callbacks.c +++ b/src/lib/evas/canvas/evas_callbacks.c @@ -724,3 +724,9 @@ evas_object_callback_init(Efl_Canvas_Object *eo_obj, Evas_Object_Protected_Data { efl_event_callback_array_add(eo_obj, event_catcher_watch(), obj); } + +void +evas_object_callback_shutdown(Efl_Canvas_Object *eo_obj, Evas_Object_Protected_Data *obj) +{ + efl_event_callback_array_del(eo_obj, event_catcher_watch(), obj); +} diff --git a/src/lib/evas/canvas/evas_object_main.c b/src/lib/evas/canvas/evas_object_main.c index 0c64bf08df..adae7d5e74 100644 --- a/src/lib/evas/canvas/evas_object_main.c +++ b/src/lib/evas/canvas/evas_object_main.c @@ -397,6 +397,7 @@ evas_object_free(Evas_Object *eo_obj, Eina_Bool clean_layer) int was_smart_child = 0; + evas_object_callback_shutdown(eo_obj, obj); if (efl_isa(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS)) _evas_object_image_free(eo_obj); evas_object_map_set(eo_obj, NULL); diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index 69e976c590..98d0c16d21 100644 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -1636,6 +1636,7 @@ void evas_object_clip_across_clippees_check(Evas_Object *obj, Evas_Object_Protec void evas_object_mapped_clip_across_mark(Evas_Object *obj, Evas_Object_Protected_Data *pd); void evas_event_callback_call(Evas *e, Evas_Callback_Type type, void *event_info); void evas_object_callback_init(Efl_Canvas_Object *eo_obj, Evas_Object_Protected_Data *obj); +void evas_object_callback_shutdown(Efl_Canvas_Object *eo_obj, Evas_Object_Protected_Data *obj); void evas_object_event_callback_call(Evas_Object *obj, Evas_Object_Protected_Data *pd, Evas_Callback_Type type, void *event_info, int event_id, const Efl_Event_Description *efl_event_desc); Eina_List *evas_event_objects_event_list(Evas *e, Evas_Object *stop, int x, int y); int evas_mem_free(int mem_required);