elm layout - add and delete signal cbs from the same consistent obj

elm layout signal handling was all over the place. using 3 different
ways of adding or deleteing signals from the object. it uses either
obj directly, eo_super(obj) or wd->resize_obj. come on. be consistent.
so using wd->resize_obj worked before and now works properly with
sgnal cbs PROPELY deleted unlike before.

@fix
This commit is contained in:
Carsten Haitzler 2016-07-03 14:04:45 +09:00
parent 0dc74232a1
commit 6ab167afa1
1 changed files with 6 additions and 2 deletions

View File

@ -938,6 +938,8 @@ _elm_layout_edje_object_signal_callback_add(Eo *obj, Elm_Layout_Smart_Data *sd,
esd = ELM_NEW(Edje_Signal_Data);
if (!esd) return;
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
esd->obj = obj;
esd->func = func_cb;
esd->emission = eina_stringshare_add(emission);
@ -946,7 +948,7 @@ _elm_layout_edje_object_signal_callback_add(Eo *obj, Elm_Layout_Smart_Data *sd,
sd->edje_signals = eina_list_append(sd->edje_signals, esd);
edje_object_signal_callback_add
(eo_super(obj, MY_CLASS), emission, source, _edje_signal_callback, esd);
(wd->resize_obj, emission, source, _edje_signal_callback, esd);
}
EAPI void *
@ -964,6 +966,8 @@ _elm_layout_edje_object_signal_callback_del(Eo *obj, Elm_Layout_Smart_Data *sd,
Eina_List *l;
void *data_ptr;
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
EINA_LIST_FOREACH(sd->edje_signals, l, esd)
{
if ((esd->func == func_cb) && (!strcmp(esd->emission, emission)) &&
@ -975,7 +979,7 @@ _elm_layout_edje_object_signal_callback_del(Eo *obj, Elm_Layout_Smart_Data *sd,
data_ptr = esd->data;
edje_obj_signal_callback_del
(obj, emission, source, _edje_signal_callback, esd);
(wd->resize_obj, emission, source, _edje_signal_callback, esd);
free(esd);
return data_ptr; /* stop at 1st match */