elm layout - add and delete signal cbs from the same consistent obj
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>
Sun, 3 Jul 2016 05:04:45 +0000 (14:04 +0900)
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>
Sun, 3 Jul 2016 06:45:46 +0000 (15:45 +0900)
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

src/lib/elementary/elm_layout.c

index 65b7661..97e7bc3 100644 (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 */