summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--NEWS1
-rw-r--r--src/lib/elm_menu.c16
-rw-r--r--src/lib/elm_menu_common.h15
4 files changed, 33 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 42f9639a4..947f1beba 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 2295473b5..e7747edd2 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 7572473df..0d02169c3 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 c91212444..e00793e3e 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