diff options
author | Jean-Philippe Andre <jp.andre@samsung.com> | 2016-04-21 15:39:31 +0900 |
---|---|---|
committer | Jean-Philippe Andre <jp.andre@samsung.com> | 2016-04-26 11:36:23 +0900 |
commit | 27573e6e0bfeee08d7e133382729f14ceedac44a (patch) | |
tree | c5ae6605261addf689c75b7303b0190288e01368 | |
parent | 07a996e6cc1241fb189ea41849cf48c2c3379bca (diff) | |
download | efl-27573e6e0bfeee08d7e133382729f14ceedac44a.tar.gz |
Edje: Convert access_part_list to an iterator
-rw-r--r-- | src/lib/edje/Edje_Legacy.h | 11 | ||||
-rw-r--r-- | src/lib/edje/edje_object.eo | 11 | ||||
-rw-r--r-- | src/lib/edje/edje_util.c | 75 |
3 files changed, 80 insertions, 17 deletions
diff --git a/src/lib/edje/Edje_Legacy.h b/src/lib/edje/Edje_Legacy.h index e361befc5f..9e6adf5efd 100644 --- a/src/lib/edje/Edje_Legacy.h +++ b/src/lib/edje/Edje_Legacy.h @@ -289,6 +289,17 @@ EAPI Evas_Object *edje_object_part_swallow_get(const Edje_Object *obj, const cha */ EAPI void edje_object_part_unswallow(Edje_Object *obj, Evas_Object *obj_swallow); +/** + * @brief Retrieve a list all accessibility part names + * + * @return A list all accessibility part names on obj + * + * @since 1.7.0 + * + * @ingroup Edje_Object + */ +EAPI Eina_List *edje_object_access_part_list_get(const Edje_Object *obj); + #include "edje_object.eo.legacy.h" #include "edje_edit.eo.legacy.h" diff --git a/src/lib/edje/edje_object.eo b/src/lib/edje/edje_object.eo index 40e7d7b73e..a214e5db48 100644 --- a/src/lib/edje/edje_object.eo +++ b/src/lib/edje/edje_object.eo @@ -352,13 +352,10 @@ class Edje.Object (Evas.Smart_Clipped, Efl.File, Efl.Container) minh: Evas.Coord; [[Pointer to a variable where to store the minimum height]] } } - @property access_part_list { - get { - [[Retrieve a list all accessibility part names - - @since 1.7.0]] - return: list<const(char)*> *; [[A list all accessibility part names on obj]] - } + access_part_iterate { + [[Iterate over all accessibility-enabled part names.]] + legacy: null; + return: free(own(iterator<const(char)*> *), eina_iterator_free); } @property load_error { get { diff --git a/src/lib/edje/edje_util.c b/src/lib/edje/edje_util.c index e935c8d763..8f7899f022 100644 --- a/src/lib/edje/edje_util.c +++ b/src/lib/edje/edje_util.c @@ -4942,22 +4942,77 @@ _edje_object_part_box_remove_all(Eo *obj EINA_UNUSED, Edje *ed, const char *part return ret; } -EOLIAN Eina_List * -_edje_object_access_part_list_get(Eo *obj EINA_UNUSED, Edje *ed) +typedef struct _Part_Iterator Part_Iterator; +struct _Part_Iterator { - Eina_List *access_parts = NULL; - - if ((!ed)) return NULL; + Eina_Iterator iterator; + Eo *object; + Edje *ed; + unsigned index; +}; - unsigned int i; - for (i = 0; i < ed->table_parts_size; i++) +static Eina_Bool +_part_iterator_next(Part_Iterator *it, void **data) +{ + for (; it->index < it->ed->table_parts_size; it->index++) { - Edje_Real_Part *rp; - rp = ed->table_parts[i]; + Edje_Real_Part *rp = it->ed->table_parts[it->index]; if (rp->part->access) - access_parts = eina_list_append(access_parts, rp->part->name); + { + if (data) *data = (void*) rp->part->name; + it->index++; + return EINA_TRUE; + } } + return EINA_FALSE; +} + +static Eo * +_part_iterator_get_container(Part_Iterator *it) +{ + return it->object; +} + +static void +_part_iterator_free(Part_Iterator *it) +{ + free(it); +} + +EOLIAN Eina_Iterator * +_edje_object_access_part_iterate(Eo *obj EINA_UNUSED, Edje *ed) +{ + Part_Iterator *it; + + it = calloc(1, sizeof(*it)); + if (!it) return NULL; + + EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); + + it->iterator.version = EINA_ITERATOR_VERSION; + it->iterator.next = FUNC_ITERATOR_NEXT(_part_iterator_next); + it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_part_iterator_get_container); + it->iterator.free = FUNC_ITERATOR_FREE(_part_iterator_free); + it->object = obj; + it->ed = ed; + it->index = 0; + + return &it->iterator; +} + +EAPI Eina_List * +edje_object_access_part_list_get(const Edje_Object *obj) +{ + Eina_List *access_parts = NULL; + Eina_Iterator *it; + const char *str; + + it = edje_obj_access_part_iterate((Eo *) obj); + EINA_ITERATOR_FOREACH(it, str) + access_parts = eina_list_append(access_parts, str); + eina_iterator_free(it); + return access_parts; } |