summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@osg.samsung.com>2017-08-31 16:13:01 -0400
committerMike Blumenkrantz <zmike@osg.samsung.com>2017-09-01 13:42:18 -0400
commit5a9df96d9c7569e78622911d61ca5c1715fd0235 (patch)
tree55f7de9471b739ae3f0dee0ebc4b710bd63aee22
parent1f555c897e78f2ac219ff22afe0c254675d1d633 (diff)
downloadefl-5a9df96d9c7569e78622911d61ca5c1715fd0235.tar.gz
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
-rw-r--r--src/lib/evas/canvas/evas_main.c2
-rw-r--r--src/lib/evas/canvas/evas_name.c6
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 *