diff --git a/legacy/elementary/ChangeLog b/legacy/elementary/ChangeLog index 42f9639a4c..947f1beba2 100644 --- a/legacy/elementary/ChangeLog +++ b/legacy/elementary/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/legacy/elementary/NEWS b/legacy/elementary/NEWS index 2295473b52..e7747edd25 100644 --- a/legacy/elementary/NEWS +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_menu.c b/legacy/elementary/src/lib/elm_menu.c index 7572473dfe..0d02169c3f 100644 --- a/legacy/elementary/src/lib/elm_menu.c +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_menu_common.h b/legacy/elementary/src/lib/elm_menu_common.h index c91212444d..e00793e3e4 100644 --- a/legacy/elementary/src/lib/elm_menu_common.h +++ b/legacy/elementary/src/lib/elm_menu_common.h @@ -82,6 +82,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 *