[Icon/Layout] Clean-up signal callbacks when signal is freed or layout is deleted. If not, dangling edje callback can be remained at some moment.

Reviewers: raster, cedric, seoz, Hermet

Reviewed By: raster

Differential Revision: https://phab.enlightenment.org/D509
This commit is contained in:
Tae-Hwan Kim 2014-02-07 18:06:05 +09:00 committed by Carsten Haitzler (Rasterman)
parent 22b9f5c9e3
commit 8025cb8b46
2 changed files with 18 additions and 11 deletions

View File

@ -338,13 +338,28 @@ _elm_icon_smart_sizing_eval(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
sd->in_eval--;
}
static void
_edje_signal_callback(void *data,
Evas_Object *obj EINA_UNUSED,
const char *emission,
const char *source)
{
Edje_Signal_Data *esd = data;
esd->func(esd->data, esd->obj, emission, source);
}
static void
_edje_signals_free(Elm_Icon_Smart_Data *sd)
{
Edje_Signal_Data *esd;
Elm_Image_Smart_Data *id = eo_data_scope_get(sd->obj, ELM_OBJ_IMAGE_CLASS);
EINA_LIST_FREE(sd->edje_signals, esd)
{
edje_object_signal_callback_del_full
(id->img, esd->emission, esd->source,
_edje_signal_callback, esd);
eina_stringshare_del(esd->emission);
eina_stringshare_del(esd->source);
free(esd);
@ -622,17 +637,6 @@ _elm_icon_signal_emit(Evas_Object *obj,
edje_object_signal_emit(id->img, emission, source);
}
static void
_edje_signal_callback(void *data,
Evas_Object *obj EINA_UNUSED,
const char *emission,
const char *source)
{
Edje_Signal_Data *esd = data;
esd->func(esd->data, esd->obj, emission, source);
}
/* WARNING: to be deprecated */
void
_elm_icon_signal_callback_add(Evas_Object *obj,

View File

@ -812,6 +812,9 @@ _elm_layout_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
EINA_LIST_FREE(sd->edje_signals, esd)
{
edje_object_signal_callback_del_full
(wd->resize_obj, esd->emission, esd->source,
_edje_signal_callback, esd);
eina_stringshare_del(esd->emission);
eina_stringshare_del(esd->source);
free(esd);