tasn pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=9195d008dad901645bebfc83e240649c6b4c69e0

commit 9195d008dad901645bebfc83e240649c6b4c69e0
Author: Tom Hacohen <t...@stosb.com>
Date:   Fri Apr 29 13:13:00 2016 +0100

    Eo keyed data: No need to register to see if a subobject was deleted.
    
    This is completely unnecessary. We are holding a reference to the
    object, it can't get deleted under our feet.
---
 src/lib/eo/eo_base_class.c | 50 +++++-----------------------------------------
 1 file changed, 5 insertions(+), 45 deletions(-)

diff --git a/src/lib/eo/eo_base_class.c b/src/lib/eo/eo_base_class.c
index 85ed41b..75967bf 100644
--- a/src/lib/eo/eo_base_class.c
+++ b/src/lib/eo/eo_base_class.c
@@ -95,36 +95,8 @@ _eo_generic_data_node_free(Eo_Generic_Data_Node *node)
    free(node);
 }
 
-static Eina_Bool
-_eo_base_cb_key_obj_del(void *data, const Eo_Event *event)
-{
-   Eo *parent_obj = data;
-   Eo_Base_Data *pd = eo_data_scope_get(parent_obj, EO_BASE_CLASS);
-
-   if (pd)
-     {
-        Eo_Generic_Data_Node *node;
-        Eo_Base_Extension *ext = pd->ext;
-
-        if (!ext) return EINA_TRUE;
-        EINA_INLIST_FOREACH(ext->generic_data, node)
-          {
-             if ((node->d_type == DATA_OBJ) && (node->d.obj == event->obj))
-               {
-                  ext->generic_data = eina_inlist_remove
-                    (ext->generic_data, EINA_INLIST_GET(node));
-                  eo_event_callback_del(node->d.obj, EO_BASE_EVENT_DEL,
-                                        _eo_base_cb_key_obj_del, data);
-                  _eo_generic_data_node_free(node);
-                  break;
-               }
-          }
-     }
-   return EINA_TRUE;
-}
-
 static void
-_eo_generic_data_del_all(Eo *obj, Eo_Base_Data *pd)
+_eo_generic_data_del_all(Eo *obj EINA_UNUSED, Eo_Base_Data *pd)
 {
    Eo_Generic_Data_Node *node;
    Eo_Base_Extension *ext = pd->ext;
@@ -137,8 +109,6 @@ _eo_generic_data_del_all(Eo *obj, Eo_Base_Data *pd)
                                                EINA_INLIST_GET(node));
         if (node->d_type == DATA_OBJ)
           {
-             eo_event_callback_del(node->d.obj, EO_BASE_EVENT_DEL,
-                                   _eo_base_cb_key_obj_del, obj);
              eo_unref(node->d.obj);
           }
         else if (node->d_type == DATA_VAL) eina_value_free(node->d.val);
@@ -147,7 +117,7 @@ _eo_generic_data_del_all(Eo *obj, Eo_Base_Data *pd)
 }
 
 EOLIAN static void
-_eo_base_key_data_set(Eo *obj, Eo_Base_Data *pd, const char *key, const void 
*data)
+_eo_base_key_data_set(Eo *obj EINA_UNUSED, Eo_Base_Data *pd, const char *key, 
const void *data)
 {
    Eo_Generic_Data_Node *node;
    Eo_Base_Extension *ext = pd->ext;
@@ -165,8 +135,6 @@ _eo_base_key_data_set(Eo *obj, Eo_Base_Data *pd, const char 
*key, const void *da
                     (ext->generic_data, EINA_INLIST_GET(node));
                   if (node->d_type == DATA_OBJ)
                     {
-                       eo_event_callback_del(node->d.obj, EO_BASE_EVENT_DEL,
-                                             _eo_base_cb_key_obj_del, obj);
                        eo_unref(node->d.obj);
                     }
                   else if (node->d_type == DATA_VAL) 
eina_value_free(node->d.val);
@@ -220,7 +188,7 @@ _eo_base_key_data_get(const Eo *obj, Eo_Base_Data *pd, 
const char *key)
 }
 
 EOLIAN static void
-_eo_base_key_del(Eo *obj, Eo_Base_Data *pd, const char *key)
+_eo_base_key_del(Eo *obj EINA_UNUSED, Eo_Base_Data *pd, const char *key)
 {
    Eo_Generic_Data_Node *node;
    Eo_Base_Extension *ext = pd->ext;
@@ -235,8 +203,6 @@ _eo_base_key_del(Eo *obj, Eo_Base_Data *pd, const char *key)
                (ext->generic_data, EINA_INLIST_GET(node));
              if (node->d_type == DATA_OBJ)
                {
-                  eo_event_callback_del(node->d.obj, EO_BASE_EVENT_DEL,
-                                        _eo_base_cb_key_obj_del, obj);
                   eo_unref(node->d.obj);
                }
              else if (node->d_type == DATA_VAL) eina_value_free(node->d.val);
@@ -247,7 +213,7 @@ _eo_base_key_del(Eo *obj, Eo_Base_Data *pd, const char *key)
 }
 
 EOLIAN static void
-_eo_base_key_obj_set(Eo *obj, Eo_Base_Data *pd, const char *key, Eo *objdata)
+_eo_base_key_obj_set(Eo *obj EINA_UNUSED, Eo_Base_Data *pd, const char *key, 
Eo *objdata)
 {
    Eo_Generic_Data_Node *node;
    Eo_Base_Extension *ext = pd->ext;
@@ -264,8 +230,6 @@ _eo_base_key_obj_set(Eo *obj, Eo_Base_Data *pd, const char 
*key, Eo *objdata)
                     (ext->generic_data, EINA_INLIST_GET(node));
                   if (node->d_type == DATA_OBJ)
                     {
-                       eo_event_callback_del(node->d.obj, EO_BASE_EVENT_DEL,
-                                             _eo_base_cb_key_obj_del, obj);
                        eo_unref(node->d.obj);
                     }
                   else if (node->d_type == DATA_VAL) 
eina_value_free(node->d.val);
@@ -284,8 +248,6 @@ _eo_base_key_obj_set(Eo *obj, Eo_Base_Data *pd, const char 
*key, Eo *objdata)
         node->key = eina_stringshare_add(key);
         node->d.obj = objdata;
         node->d_type = DATA_OBJ;
-        eo_event_callback_add(node->d.obj, EO_BASE_EVENT_DEL,
-                              _eo_base_cb_key_obj_del, obj);
         eo_ref(node->d.obj);
         ext->generic_data = eina_inlist_prepend
           (ext->generic_data, EINA_INLIST_GET(node));
@@ -322,7 +284,7 @@ _eo_base_key_obj_get(const Eo *obj, Eo_Base_Data *pd, const 
char *key)
 }
 
 EOLIAN static void
-_eo_base_key_value_set(Eo *obj, Eo_Base_Data *pd, const char *key, Eina_Value 
*value)
+_eo_base_key_value_set(Eo *obj EINA_UNUSED, Eo_Base_Data *pd, const char *key, 
Eina_Value *value)
 {
    Eo_Generic_Data_Node *node;
    Eo_Base_Extension *ext = pd->ext;
@@ -339,8 +301,6 @@ _eo_base_key_value_set(Eo *obj, Eo_Base_Data *pd, const 
char *key, Eina_Value *v
                     (ext->generic_data, EINA_INLIST_GET(node));
                   if (node->d_type == DATA_OBJ)
                     {
-                       eo_event_callback_del(node->d.obj, EO_BASE_EVENT_DEL,
-                                             _eo_base_cb_key_obj_del, obj);
                        eo_unref(node->d.obj);
                     }
                   else if (node->d_type == DATA_VAL) 
eina_value_free(node->d.val);

-- 


Reply via email to