discomfitor pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=5a9df96d9c7569e78622911d61ca5c1715fd0235

commit 5a9df96d9c7569e78622911d61ca5c1715fd0235
Author: Mike Blumenkrantz <zm...@osg.samsung.com>
Date:   Thu Aug 31 16:13:01 2017 -0400

    evas: handle object names with a list hash
    
    a canvas can have multiple objects with the same name. assuming that 
name:obj
    is a 1:1 ratio means that name-finding functions are likely to return 
invalid
    objects
    
    @fix
---
 src/lib/evas/canvas/evas_main.c | 2 +-
 src/lib/evas/canvas/evas_name.c | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/lib/evas/canvas/evas_main.c b/src/lib/evas/canvas/evas_main.c
index 2b07d3e53c..246205b537 100644
--- a/src/lib/evas/canvas/evas_main.c
+++ b/src/lib/evas/canvas/evas_main.c
@@ -221,7 +221,7 @@ _evas_canvas_efl_object_constructor(Eo *eo_obj, 
Evas_Public_Data *e)
    e->framespace.h = 0;
    e->hinting = EVAS_FONT_HINTING_BYTECODE;
    e->current_event = EVAS_CALLBACK_LAST;
-   e->name_hash = eina_hash_string_superfast_new(NULL);
+   e->name_hash = eina_hash_string_superfast_new((Eina_Free_Cb)eina_list_free);
    eina_clist_init(&e->calc_list);
    eina_clist_init(&e->calc_done);
 
diff --git a/src/lib/evas/canvas/evas_name.c b/src/lib/evas/canvas/evas_name.c
index b02e4a7a94..798dd8a621 100644
--- a/src/lib/evas/canvas/evas_name.c
+++ b/src/lib/evas/canvas/evas_name.c
@@ -10,7 +10,7 @@ evas_object_name_set(Evas_Object *eo_obj, const char *name)
    if (obj->name)
      {
         if (obj->layer && obj->layer->evas && obj->layer->evas->name_hash)
-          eina_hash_del(obj->layer->evas->name_hash, obj->name, eo_obj);
+          eina_hash_list_remove(obj->layer->evas->name_hash, obj->name, 
eo_obj);
         free(obj->name);
      }
    if (!name) obj->name = NULL;
@@ -18,7 +18,7 @@ evas_object_name_set(Evas_Object *eo_obj, const char *name)
      {
         obj->name = strdup(name);
         if (obj->layer && obj->layer->evas && obj->layer->evas->name_hash)
-          eina_hash_add(obj->layer->evas->name_hash, obj->name, eo_obj);
+          eina_hash_list_prepend(obj->layer->evas->name_hash, obj->name, 
eo_obj);
      }
 }
 
@@ -35,7 +35,7 @@ EOLIAN Evas_Object*
 _evas_canvas_object_name_find(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, const 
char *name)
 {
    if (!name) return NULL;
-   else return (Evas_Object *)eina_hash_find(e->name_hash, name);
+   else return eina_list_data_get(eina_hash_find(e->name_hash, name));
 }
 
 static Evas_Object *

-- 


Reply via email to