seoz pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=f8b9adae538f4f7d6f3fd44328ee967b08e2f33d
commit f8b9adae538f4f7d6f3fd44328ee967b08e2f33d Author: Daniel Juyung Seo <seojuyu...@gmail.com> Date: Sat Sep 21 20:22:10 2013 +0900 elm_menu: added elm_menu_item_subitems_clear. --- ChangeLog | 4 ++++ NEWS | 1 + src/lib/elm_menu.c | 16 +++++++++++++--- src/lib/elm_menu_common.h | 15 +++++++++++++++ 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 42f9639..947f1be 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1644,3 +1644,7 @@ 2013-09-21 Daniel Juyung Seo (SeoZ) * menu: added "dismissed" callback. + +2013-09-21 Daniel Juyung Seo (SeoZ) + + * menu: added elm_menu_item_subitems_clear. diff --git a/NEWS b/NEWS index 2295473..e7747ed 100644 --- a/NEWS +++ b/NEWS @@ -93,6 +93,7 @@ Additions: * Add elm_widget_item_part_text_custom_set(), elm_widget_item_part_text_custom_get(), elm_widget_item_part_text_custom_update(). * Add "dismissed" smart callback for hover. * Add "dismissed" smart callback for menu. + * Add elm_menu_item_subitems_clear(). Improvements: diff --git a/src/lib/elm_menu.c b/src/lib/elm_menu.c index 7572473..0d02169 100644 --- a/src/lib/elm_menu.c +++ b/src/lib/elm_menu.c @@ -897,12 +897,10 @@ static Eina_Bool _item_del_pre_hook(Elm_Object_Item *it) { Elm_Menu_Item *item = (Elm_Menu_Item *)it; - Elm_Object_Item *_item; ELM_MENU_DATA_GET(WIDGET(item), sd); - EINA_LIST_FREE(item->submenu.items, _item) - elm_object_item_del(_item); + elm_menu_item_subitems_clear(it); if (item->label) eina_stringshare_del(item->label); if (item->content) evas_object_del(item->content); if (item->submenu.hv) evas_object_del(item->submenu.hv); @@ -1114,6 +1112,18 @@ elm_menu_item_subitems_get(const Elm_Object_Item *it) return ((Elm_Menu_Item *)it)->submenu.items; } +EAPI void +elm_menu_item_subitems_clear(Elm_Object_Item *it) +{ + Elm_Object_Item *sub_it; + Eina_List *l, *l_next; + + ELM_MENU_ITEM_CHECK_OR_RETURN(it); + EINA_LIST_FOREACH_SAFE(((Elm_Menu_Item *)it)->submenu.items, + l, l_next, sub_it) + elm_object_item_del(sub_it); +} + EAPI const Eina_List * elm_menu_items_get(const Evas_Object *obj) { diff --git a/src/lib/elm_menu_common.h b/src/lib/elm_menu_common.h index c912124..e00793e 100644 --- a/src/lib/elm_menu_common.h +++ b/src/lib/elm_menu_common.h @@ -83,6 +83,21 @@ EAPI Eina_Bool elm_menu_item_is_separator(Elm_Object_Item *it EAPI const Eina_List *elm_menu_item_subitems_get(const Elm_Object_Item *it); /** + * Remove all sub-items (children) of the given item + * @since 1.8 + * + * @param it The item + * + * This removes all items that are children (and their descendants) of the + * given item @p it. + * + * @see elm_object_item_del() + * + * @ingroup Menu + */ +EAPI void elm_menu_item_subitems_clear(Elm_Object_Item *it); + +/** * @brief Get the position of a menu item * * @param it The menu item --