[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--;
|
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
|
static void
|
||||||
_edje_signals_free(Elm_Icon_Smart_Data *sd)
|
_edje_signals_free(Elm_Icon_Smart_Data *sd)
|
||||||
{
|
{
|
||||||
Edje_Signal_Data *esd;
|
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)
|
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->emission);
|
||||||
eina_stringshare_del(esd->source);
|
eina_stringshare_del(esd->source);
|
||||||
free(esd);
|
free(esd);
|
||||||
|
@ -622,17 +637,6 @@ _elm_icon_signal_emit(Evas_Object *obj,
|
||||||
edje_object_signal_emit(id->img, emission, source);
|
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 */
|
/* WARNING: to be deprecated */
|
||||||
void
|
void
|
||||||
_elm_icon_signal_callback_add(Evas_Object *obj,
|
_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)
|
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->emission);
|
||||||
eina_stringshare_del(esd->source);
|
eina_stringshare_del(esd->source);
|
||||||
free(esd);
|
free(esd);
|
||||||
|
|
Loading…
Reference in New Issue