[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:
parent
22b9f5c9e3
commit
8025cb8b46
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue