forked from enlightenment/efl
parent
00fd3ccc3a
commit
03fca99e56
|
@ -2420,6 +2420,7 @@ Evas_Bool
|
||||||
_edje_real_part_box_remove_all(Edje_Real_Part *rp, Evas_Bool clear)
|
_edje_real_part_box_remove_all(Edje_Real_Part *rp, Evas_Bool clear)
|
||||||
{
|
{
|
||||||
Evas_Object_Box_Data *priv;
|
Evas_Object_Box_Data *priv;
|
||||||
|
Evas_Object_Box_Option *opt;
|
||||||
Eina_List *l, *l_next;
|
Eina_List *l, *l_next;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -2427,11 +2428,9 @@ _edje_real_part_box_remove_all(Edje_Real_Part *rp, Evas_Bool clear)
|
||||||
return evas_object_box_remove_all(rp->object, clear);
|
return evas_object_box_remove_all(rp->object, clear);
|
||||||
priv = evas_object_smart_data_get(rp->object);
|
priv = evas_object_smart_data_get(rp->object);
|
||||||
i = 0;
|
i = 0;
|
||||||
for (l = priv->children; l != NULL; l = l_next)
|
EINA_LIST_FOREACH_SAFE(priv->children, l, l_next, opt)
|
||||||
{
|
{
|
||||||
Evas_Object_Box_Option *opt = l->data;
|
|
||||||
Evas_Object *child_obj;
|
Evas_Object *child_obj;
|
||||||
l_next = l->next;
|
|
||||||
child_obj = opt->obj;
|
child_obj = opt->obj;
|
||||||
if (evas_object_data_get(child_obj, "\377 edje.box_item"))
|
if (evas_object_data_get(child_obj, "\377 edje.box_item"))
|
||||||
{
|
{
|
||||||
|
|
|
@ -137,9 +137,53 @@ EAPI Eina_Accessor *eina_list_accessor_new(const Eina_List *list);
|
||||||
* EINA_LIST_FOREACH(list, l, data)
|
* EINA_LIST_FOREACH(list, l, data)
|
||||||
* free(data);
|
* free(data);
|
||||||
* @endcode
|
* @endcode
|
||||||
|
*
|
||||||
|
* @warning do not delete list nodes, specially the current node, while
|
||||||
|
* iterating. If you wish to do so, use EINA_LIST_FOREACH_SAFE().
|
||||||
*/
|
*/
|
||||||
#define EINA_LIST_FOREACH(list, l, data) for (l = list, data = eina_list_data_get(l); l; l = eina_list_next(l), data = eina_list_data_get(l))
|
#define EINA_LIST_FOREACH(list, l, data) for (l = list, data = eina_list_data_get(l); l; l = eina_list_next(l), data = eina_list_data_get(l))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def EINA_LIST_FOREACH_SAFE
|
||||||
|
* @brief Macro to iterate over a list easily, supporting deletion.
|
||||||
|
*
|
||||||
|
* @param list The list to iterate over.
|
||||||
|
* @param l A list that is used as loop index.
|
||||||
|
* @param l_next A second list that is used as loop next index.
|
||||||
|
* @param data The data.
|
||||||
|
*
|
||||||
|
* This macro allow the iteration over @p list in an easy way. It
|
||||||
|
* iterates from the first element to the last one. @p data is the
|
||||||
|
* data of each element of the list. @p l is an #Eina_List that is
|
||||||
|
* used as counter.
|
||||||
|
*
|
||||||
|
* This is the safe version, which stores the next pointer in @p l_next
|
||||||
|
* before proceeding, so deletion of @b current node is safe. If you wish
|
||||||
|
* to remove anything else, remember to set @p l_next accordingly.
|
||||||
|
*
|
||||||
|
* This macro can be used for freeing list nodes, like in
|
||||||
|
* the following example:
|
||||||
|
*
|
||||||
|
* @code
|
||||||
|
* Eina_List *list;
|
||||||
|
* Eina_List *l;
|
||||||
|
* Eina_List *l_next;
|
||||||
|
* char *data;
|
||||||
|
*
|
||||||
|
* // list is already filled,
|
||||||
|
* // its elements are just duplicated strings,
|
||||||
|
* // EINA_LIST_FOREACH_SAFE will be used to free elements that match "key".
|
||||||
|
*
|
||||||
|
* EINA_LIST_FOREACH_SAFE(list, l, l_next, data)
|
||||||
|
* if (strcmp(data, "key") == 0) {
|
||||||
|
* free(data);
|
||||||
|
* list = eina_list_remove_list(list, l);
|
||||||
|
* }
|
||||||
|
* @endcode
|
||||||
|
*/
|
||||||
|
#define EINA_LIST_FOREACH_SAFE(list, l, l_next, data) for (l = list, l_next = eina_list_next(l), data = eina_list_data_get(l); l; l = l_next, l_next = eina_list_next(l), data = eina_list_data_get(l))
|
||||||
|
|
||||||
|
|
||||||
#include "eina_inline_list.x"
|
#include "eina_inline_list.x"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue