diff --git a/legacy/elementary/doc/examples.dox b/legacy/elementary/doc/examples.dox
index 37a73b6640..94f2e5910a 100644
--- a/legacy/elementary/doc/examples.dox
+++ b/legacy/elementary/doc/examples.dox
@@ -2219,7 +2219,7 @@
* @skipline _del_cb
* @until }
*
- * To delete an item we simple need to call elm_diskselector_item_del() with
+ * To delete an item we simple need to call elm_object_item_del() with
* a pointer for such item.
*
* If you need, you can get selected item with
diff --git a/legacy/elementary/src/bin/test_index.c b/legacy/elementary/src/bin/test_index.c
index f8dcd3e5bc..118c7afff0 100644
--- a/legacy/elementary/src/bin/test_index.c
+++ b/legacy/elementary/src/bin/test_index.c
@@ -168,7 +168,7 @@ test_index2_it_del(void *data, Evas_Object *obj, void *event_info __UNUSED__)
if (!it_next)
{
iit = elm_index_item_find(gui->id, it);
- if (iit) elm_index_item_del(gui->id, iit);
+ if (iit) elm_object_item_del(iit);
elm_list_item_del(it);
return;
}
@@ -180,7 +180,7 @@ test_index2_it_del(void *data, Evas_Object *obj, void *event_info __UNUSED__)
if (label[0] == label_next[0])
elm_object_item_data_set(iit, it_next);
else
- elm_index_item_del(gui->id, iit);
+ elm_object_item_del(iit);
elm_list_item_del(it);
}
diff --git a/legacy/elementary/src/bin/test_naviframe.c b/legacy/elementary/src/bin/test_naviframe.c
index 9740c27ed8..6213d5a0cb 100644
--- a/legacy/elementary/src/bin/test_naviframe.c
+++ b/legacy/elementary/src/bin/test_naviframe.c
@@ -34,7 +34,7 @@ _navi_pop(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
void
_navi_it_del(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
- elm_naviframe_item_del(data);
+ elm_object_item_del(data);
}
void
diff --git a/legacy/elementary/src/examples/diskselector_example_02.c b/legacy/elementary/src/examples/diskselector_example_02.c
index 36f0fed616..7f32aa70b6 100644
--- a/legacy/elementary/src/examples/diskselector_example_02.c
+++ b/legacy/elementary/src/examples/diskselector_example_02.c
@@ -112,7 +112,7 @@ _del_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
Evas_Object *ds = data;
selected_ds_it = elm_diskselector_selected_item_get(ds);
- elm_diskselector_item_del(selected_ds_it);
+ elm_object_item_del(selected_ds_it);
}
static void
diff --git a/legacy/elementary/src/examples/flipselector_example.c b/legacy/elementary/src/examples/flipselector_example.c
index a6a8bc9c7d..e720bf3939 100644
--- a/legacy/elementary/src/examples/flipselector_example.c
+++ b/legacy/elementary/src/examples/flipselector_example.c
@@ -54,7 +54,7 @@ _del_cb(void *data,
Evas_Object *fp = data;
it = elm_flipselector_selected_item_get(fp);
- if (it) elm_flipselector_item_del(it);
+ if (it) elm_object_item_del(it);
}
void /* underflow callback */
diff --git a/legacy/elementary/src/examples/hoversel_example_01.c b/legacy/elementary/src/examples/hoversel_example_01.c
index eb3038efc7..cf70461382 100644
--- a/legacy/elementary/src/examples/hoversel_example_01.c
+++ b/legacy/elementary/src/examples/hoversel_example_01.c
@@ -80,7 +80,7 @@ static void
_sel(void *data, Evas_Object *obj, void *event_info)
{
if(!elm_hoversel_expanded_get(obj) && event_info != data)
- elm_hoversel_item_del(event_info);
+ elm_object_item_del(event_info);
}
static void
diff --git a/legacy/elementary/src/examples/index_example_01.c b/legacy/elementary/src/examples/index_example_01.c
index 13f6a38c41..284717c2ae 100644
--- a/legacy/elementary/src/examples/index_example_01.c
+++ b/legacy/elementary/src/examples/index_example_01.c
@@ -60,7 +60,7 @@ _item_del(void *data __UNUSED__,
" %s (pointing to %s)\n", elm_index_item_letter_get(iit),
elm_object_item_text_get(lit));
- elm_index_item_del(d.index, lit);
+ elm_object_item_del(lit);
}
static void
diff --git a/legacy/elementary/src/examples/menu_example_01.c b/legacy/elementary/src/examples/menu_example_01.c
index 6446c13d79..2dfd89dde2 100644
--- a/legacy/elementary/src/examples/menu_example_01.c
+++ b/legacy/elementary/src/examples/menu_example_01.c
@@ -13,7 +13,7 @@ _del_it(void *data, Evas_Object *obj, void *event_info)
Elm_Object_Item *menu_it = elm_menu_first_item_get(data);
menu_it = elm_menu_item_next_get(menu_it);
l = elm_menu_item_subitems_get(menu_it);
- elm_menu_item_del(eina_list_data_get(l));
+ elm_object_item_del(eina_list_data_get(l));
}
static void
diff --git a/legacy/elementary/src/examples/segment_control_example.c b/legacy/elementary/src/examples/segment_control_example.c
index 185aa7bc2c..bf29367d1a 100644
--- a/legacy/elementary/src/examples/segment_control_example.c
+++ b/legacy/elementary/src/examples/segment_control_example.c
@@ -63,7 +63,7 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
elm_segment_control_item_insert_at(sc, NULL, "Inserted at", count - 1);
seg_it = elm_segment_control_item_insert_at(sc, NULL, "To be deleted", 2);
- elm_segment_control_item_del(seg_it);
+ elm_object_item_del(seg_it);
elm_segment_control_item_insert_at(sc, NULL, "To be deleted", 2);
elm_segment_control_item_del_at(sc, 2);
diff --git a/legacy/elementary/src/examples/web_example.c b/legacy/elementary/src/examples/web_example.c
index bc7059da0e..abbf4343fc 100644
--- a/legacy/elementary/src/examples/web_example.c
+++ b/legacy/elementary/src/examples/web_example.c
@@ -118,7 +118,7 @@ _web_free_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *
Tab_Data *td = data;
if (td->tab)
- elm_toolbar_item_del(td->tab);
+ elm_object_item_del(td->tab);
free(td);
}
diff --git a/legacy/elementary/src/lib/elc_ctxpopup.c b/legacy/elementary/src/lib/elc_ctxpopup.c
index be168fdb78..4816eaa587 100644
--- a/legacy/elementary/src/lib/elc_ctxpopup.c
+++ b/legacy/elementary/src/lib/elc_ctxpopup.c
@@ -1225,12 +1225,44 @@ _remove_items(Widget_Data *wd)
if (item->icon)
evas_object_del(item->icon);
wd->items = eina_list_remove(wd->items, item);
- free(item);
+ elm_widget_item_free(item);
}
wd->items = NULL;
}
+static void
+_item_del_pre_hook(Elm_Object_Item *it)
+{
+ ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
+
+ Widget_Data *wd;
+ Elm_Ctxpopup_Item *ctxpopup_it = (Elm_Ctxpopup_Item *) it;
+
+ wd = elm_widget_data_get(WIDGET(ctxpopup_it));
+ if (!wd) return;
+
+ if (ctxpopup_it->icon)
+ evas_object_del(ctxpopup_it->icon);
+ if (VIEW(ctxpopup_it))
+ evas_object_del(VIEW(ctxpopup_it));
+
+ eina_stringshare_del(ctxpopup_it->label);
+
+ wd->items = eina_list_remove(wd->items, ctxpopup_it);
+
+ wd->dir = ELM_CTXPOPUP_DIRECTION_UNKNOWN;
+
+ if (eina_list_count(wd->items) < 1)
+ {
+ evas_object_hide(WIDGET(ctxpopup_it));
+ return;
+ }
+
+ if (wd->visible)
+ _sizing_eval(WIDGET(ctxpopup_it));
+}
+
EAPI Evas_Object *
elm_ctxpopup_add(Evas_Object *parent)
{
@@ -1450,6 +1482,7 @@ elm_ctxpopup_item_append(Evas_Object *obj, const char *label,
item = elm_widget_item_new(obj, Elm_Ctxpopup_Item);
if (!item) return NULL;
+ elm_widget_item_del_pre_hook_set(item, _item_del_pre_hook);
elm_widget_item_disable_hook_set(item, _item_disable_hook);
elm_widget_item_text_set_hook_set(item, _item_text_set_hook);
elm_widget_item_text_get_hook_set(item, _item_text_get_hook);
@@ -1492,36 +1525,7 @@ elm_ctxpopup_item_append(Evas_Object *obj, const char *label,
EAPI void
elm_ctxpopup_item_del(Elm_Object_Item *it)
{
- ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
-
- Widget_Data *wd;
- Elm_Ctxpopup_Item *ctxpopup_it = (Elm_Ctxpopup_Item *) it;
-
- wd = elm_widget_data_get(WIDGET(ctxpopup_it));
- if (!wd) return;
-
- if (ctxpopup_it->icon)
- evas_object_del(ctxpopup_it->icon);
- if (VIEW(ctxpopup_it))
- evas_object_del(VIEW(ctxpopup_it));
-
- eina_stringshare_del(ctxpopup_it->label);
-
- wd->items = eina_list_remove(wd->items, ctxpopup_it);
-
- wd->dir = ELM_CTXPOPUP_DIRECTION_UNKNOWN;
-
- elm_widget_item_del(ctxpopup_it);
-
- if (eina_list_count(wd->items) < 1)
- {
- evas_object_hide(WIDGET(ctxpopup_it));
- return;
- }
-
- if (wd->visible)
- _sizing_eval(WIDGET(ctxpopup_it));
-
+ elm_object_item_del(it);
}
EAPI void
diff --git a/legacy/elementary/src/lib/elc_ctxpopup.h b/legacy/elementary/src/lib/elc_ctxpopup.h
index 09e6b5e9d9..fef41e4521 100644
--- a/legacy/elementary/src/lib/elc_ctxpopup.h
+++ b/legacy/elementary/src/lib/elc_ctxpopup.h
@@ -144,17 +144,6 @@ EAPI Eina_Bool elm_ctxpopup_horizontal_get(const Evas_Object
*/
EAPI Elm_Object_Item *elm_ctxpopup_item_append(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Smart_Cb func, const void *data);
-/**
- * @brief Delete the given item in a ctxpopup object.
- *
- * @param it Ctxpopup item to be deleted
- *
- * @see elm_ctxpopup_item_append()
- *
- * @ingroup Ctxpopup
- */
-EAPI void elm_ctxpopup_item_del(Elm_Object_Item *it);
-
/**
* @brief Set the direction priority of a ctxpopup.
*
diff --git a/legacy/elementary/src/lib/elc_hoversel.c b/legacy/elementary/src/lib/elc_hoversel.c
index 0fb3500e36..2540d85055 100644
--- a/legacy/elementary/src/lib/elc_hoversel.c
+++ b/legacy/elementary/src/lib/elc_hoversel.c
@@ -56,11 +56,10 @@ _del_pre_hook(Evas_Object *obj)
elm_hoversel_hover_parent_set(obj, NULL);
EINA_LIST_FREE(wd->items, item)
{
- elm_widget_item_pre_notify_del(item);
eina_stringshare_del(item->label);
eina_stringshare_del(item->icon_file);
eina_stringshare_del(item->icon_group);
- elm_widget_item_del(item);
+ elm_widget_item_free(item);
}
}
@@ -310,6 +309,21 @@ _item_text_get_hook(const Elm_Object_Item *it, const char *part)
return ((Elm_Hoversel_Item *) it)->label;
}
+static void
+_item_del_pre_hook(Elm_Object_Item *it)
+{
+ ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
+ Widget_Data *wd;
+ Elm_Hoversel_Item *item = (Elm_Hoversel_Item *) it;
+ wd = elm_widget_data_get(WIDGET(item));
+ if (!wd) return;
+ elm_hoversel_hover_end(WIDGET(item));
+ wd->items = eina_list_remove(wd->items, item);
+ eina_stringshare_del(item->label);
+ eina_stringshare_del(item->icon_file);
+ eina_stringshare_del(item->icon_group);
+}
+
EAPI Evas_Object *
elm_hoversel_add(Evas_Object *parent)
{
@@ -465,7 +479,11 @@ elm_hoversel_clear(Evas_Object *obj)
ELM_CHECK_WIDTYPE(obj, widtype);
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
- EINA_LIST_FOREACH_SAFE(wd->items, l, ll, it) elm_hoversel_item_del(it);
+ EINA_LIST_FOREACH_SAFE(wd->items, l, ll, it)
+ {
+ _item_del_pre_hook(it);
+ elm_widget_item_free(it);
+ }
}
EAPI const Eina_List *
@@ -485,6 +503,7 @@ elm_hoversel_item_add(Evas_Object *obj, const char *label, const char *icon_file
if (!wd) return NULL;
Elm_Hoversel_Item *item = elm_widget_item_new(obj, Elm_Hoversel_Item);
if (!item) return NULL;
+ elm_widget_item_del_pre_hook_set(item, _item_del_pre_hook);
elm_widget_item_text_get_hook_set(item, _item_text_get_hook);
wd->items = eina_list_append(wd->items, item);
item->label = eina_stringshare_add(label);
@@ -498,18 +517,7 @@ elm_hoversel_item_add(Evas_Object *obj, const char *label, const char *icon_file
EAPI void
elm_hoversel_item_del(Elm_Object_Item *it)
{
- ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
- Widget_Data *wd;
- Elm_Hoversel_Item *item = (Elm_Hoversel_Item *) it;
- wd = elm_widget_data_get(WIDGET(item));
- if (!wd) return;
- elm_hoversel_hover_end(WIDGET(item));
- wd->items = eina_list_remove(wd->items, item);
- elm_widget_item_pre_notify_del(item);
- eina_stringshare_del(item->label);
- eina_stringshare_del(item->icon_file);
- eina_stringshare_del(item->icon_group);
- elm_widget_item_del(item);
+ elm_object_item_del(it);
}
EAPI void
diff --git a/legacy/elementary/src/lib/elc_hoversel.h b/legacy/elementary/src/lib/elc_hoversel.h
index 6d708b0254..43a09935c6 100644
--- a/legacy/elementary/src/lib/elc_hoversel.h
+++ b/legacy/elementary/src/lib/elc_hoversel.h
@@ -123,7 +123,7 @@ EAPI Eina_Bool elm_hoversel_expanded_get(const Evas_Object *o
* @warning Should @b not be called while the hoversel is active; use
* elm_hoversel_expanded_get() to check first.
*
- * @see elm_hoversel_item_del()
+ * @see elm_object_item_del()
*/
EAPI void elm_hoversel_clear(Evas_Object *obj);
@@ -159,18 +159,6 @@ EAPI const Eina_List *elm_hoversel_items_get(const Evas_Object *obj)
*/
EAPI Elm_Object_Item *elm_hoversel_item_add(Evas_Object *obj, const char *label, const char *icon_file, Elm_Icon_Type icon_type, Evas_Smart_Cb func, const void *data);
-/**
- * @brief Delete an item from the hoversel
- *
- * @param it The item to delete
- *
- * This deletes the item from the hoversel (should not be called while the
- * hoversel is active; use elm_hoversel_expanded_get() to check first).
- *
- * @see elm_hoversel_item_add()
- */
-EAPI void elm_hoversel_item_del(Elm_Object_Item *it);
-
/**
* @brief This sets the icon for the given hoversel item.
*
diff --git a/legacy/elementary/src/lib/elc_multibuttonentry.c b/legacy/elementary/src/lib/elc_multibuttonentry.c
index 3aed8d13bc..f7fa77b4aa 100644
--- a/legacy/elementary/src/lib/elc_multibuttonentry.c
+++ b/legacy/elementary/src/lib/elc_multibuttonentry.c
@@ -692,7 +692,6 @@ _del_button_item(Elm_Multibuttonentry_Item *item)
_del_button_obj(obj, _item->button);
- free(_item);
if (wd->current == l)
wd->current = NULL;
break;
@@ -760,6 +759,13 @@ _resize_button(Evas_Object *btn, Evas_Coord *realw, Evas_Coord *vieww)
if (vieww) *vieww = vw;
}
+static void
+_item_del_pre_hook(Elm_Object_Item *it)
+{
+ ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
+ _del_button_item((Elm_Multibuttonentry_Item *) it);
+}
+
static Elm_Multibuttonentry_Item*
_add_button_item(Evas_Object *obj, const char *str, Multibuttonentry_Pos pos, const Elm_Multibuttonentry_Item *reference, void *data)
{
@@ -799,6 +805,7 @@ _add_button_item(Evas_Object *obj, const char *str, Multibuttonentry_Pos pos, co
item = elm_widget_item_new(obj, Elm_Multibuttonentry_Item);
if (item)
{
+ elm_widget_item_del_pre_hook_set(item, _item_del_pre_hook);
elm_widget_item_text_set_hook_set(item, _item_text_set_hook);
elm_widget_item_text_get_hook_set(item, _item_text_get_hook);
elm_widget_item_data_set(item, data);
@@ -954,6 +961,7 @@ _evas_mbe_key_up_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
if (item)
{
_del_button_item(item);
+ elm_widget_item_free(item);
elm_object_focus_set(wd->entry, EINA_TRUE);
}
}
@@ -1586,8 +1594,7 @@ elm_multibuttonentry_clear(Evas_Object *obj)
EAPI void
elm_multibuttonentry_item_del(Elm_Object_Item *it)
{
- ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
- _del_button_item((Elm_Multibuttonentry_Item *) it);
+ elm_object_item_del(it);
}
EAPI const char *
diff --git a/legacy/elementary/src/lib/elc_multibuttonentry.h b/legacy/elementary/src/lib/elc_multibuttonentry.h
index c9e54157e9..9b46207ee0 100644
--- a/legacy/elementary/src/lib/elc_multibuttonentry.h
+++ b/legacy/elementary/src/lib/elc_multibuttonentry.h
@@ -199,14 +199,6 @@ EAPI void elm_multibuttonentry_item_select(Elm_Object_Item
*/
EAPI void elm_multibuttonentry_item_unselect_all(Evas_Object *obj);
-/**
- * Delete a given item
- *
- * @param it The item
- *
- */
-EAPI void elm_multibuttonentry_item_del(Elm_Object_Item *it);
-
/**
* Remove all items in the multibuttonentry.
*
diff --git a/legacy/elementary/src/lib/elc_naviframe.c b/legacy/elementary/src/lib/elc_naviframe.c
index b33a1c54aa..2b23cdd36a 100644
--- a/legacy/elementary/src/lib/elc_naviframe.c
+++ b/legacy/elementary/src/lib/elc_naviframe.c
@@ -131,6 +131,7 @@ static Evas_Object * _title_icon_unset(Elm_Naviframe_Item *it);
static Evas_Object * _title_content_unset(Elm_Naviframe_Item *it,
const char *part);
static void _item_del(Elm_Naviframe_Item *it);
+static void _item_del_pre_hook(Elm_Object_Item *it);
static void _pushed_finished(void *data,
Evas_Object *obj,
const char *emission,
@@ -175,6 +176,7 @@ _del_hook(Evas_Object *obj)
Elm_Naviframe_Item);
wd->stack = eina_inlist_remove(wd->stack, wd->stack->last);
_item_del(it);
+ elm_widget_item_free(it);
if (!wd->stack) break;
}
}
@@ -867,8 +869,38 @@ _item_del(Elm_Naviframe_Item *it)
}
eina_stringshare_del(it->style);
+}
- elm_widget_item_del(it);
+static void
+_item_del_pre_hook(Elm_Object_Item *it)
+{
+ ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
+ Elm_Naviframe_Item *navi_it;
+ Widget_Data *wd;
+
+ navi_it =(Elm_Naviframe_Item *) it;
+ wd = elm_widget_data_get(WIDGET(navi_it));
+ if (!wd) return;
+
+ if (it == elm_naviframe_top_item_get(WIDGET(navi_it)))
+ {
+ wd->stack = eina_inlist_remove(wd->stack, EINA_INLIST_GET(navi_it));
+ _item_del(navi_it);
+ elm_widget_item_free(navi_it);
+ //If the item is only one, the stack will be empty
+ if (!wd->stack) return;
+ navi_it = EINA_INLIST_CONTAINER_GET(wd->stack->last,
+ Elm_Naviframe_Item);
+ evas_object_show(VIEW(navi_it));
+ evas_object_raise(VIEW(navi_it));
+ edje_object_signal_emit(VIEW(navi_it), "elm,state,visible", "elm");
+ }
+ else
+ {
+ wd->stack = eina_inlist_remove(wd->stack, EINA_INLIST_GET(navi_it));
+ _item_del(navi_it);
+ elm_widget_item_free(navi_it);
+ }
}
static void
@@ -904,6 +936,7 @@ _popped_finished(void *data,
SIG_POP_FINISHED,
data);
_item_del(data);
+ elm_widget_item_free(data);
}
static void
@@ -1061,6 +1094,7 @@ _item_new(Evas_Object *obj,
return NULL;
}
+ elm_widget_item_del_pre_hook_set(it, _item_del_pre_hook);
elm_widget_item_text_set_hook_set(it, _item_text_set_hook);
elm_widget_item_text_get_hook_set(it, _item_text_get_hook);
elm_widget_item_content_set_hook_set(it, _item_content_set_hook);
@@ -1278,7 +1312,10 @@ elm_naviframe_item_pop(Evas_Object *obj)
edje_object_message_signal_process(VIEW(prev_it));
}
else
- _item_del(it);
+ {
+ _item_del(it);
+ elm_widget_item_free(it);
+ }
return content;
}
@@ -1306,6 +1343,8 @@ elm_naviframe_item_pop_to(Elm_Object_Item *it)
prev_l = l->prev;
wd->stack = eina_inlist_remove(wd->stack, l);
_item_del(EINA_INLIST_CONTAINER_GET(l, Elm_Naviframe_Item));
+ elm_widget_item_free(EINA_INLIST_CONTAINER_GET(l,
+ Elm_Naviframe_Item));
l = prev_l;
}
elm_naviframe_item_pop(WIDGET(navi_it));
@@ -1347,31 +1386,7 @@ elm_naviframe_item_promote(Elm_Object_Item *it)
EAPI void
elm_naviframe_item_del(Elm_Object_Item *it)
{
- ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
- Elm_Naviframe_Item *navi_it;
- Widget_Data *wd;
-
- navi_it =(Elm_Naviframe_Item *) it;
- wd = elm_widget_data_get(WIDGET(navi_it));
- if (!wd) return;
-
- if (it == elm_naviframe_top_item_get(WIDGET(navi_it)))
- {
- wd->stack = eina_inlist_remove(wd->stack, EINA_INLIST_GET(navi_it));
- _item_del(navi_it);
- //If the item is only one, the stack will be empty
- if (!wd->stack) return;
- navi_it = EINA_INLIST_CONTAINER_GET(wd->stack->last,
- Elm_Naviframe_Item);
- evas_object_show(VIEW(navi_it));
- evas_object_raise(VIEW(navi_it));
- edje_object_signal_emit(VIEW(navi_it), "elm,state,visible", "elm");
- }
- else
- {
- wd->stack = eina_inlist_remove(wd->stack, EINA_INLIST_GET(navi_it));
- _item_del(navi_it);
- }
+ elm_object_item_del(it);
}
EAPI void
diff --git a/legacy/elementary/src/lib/elc_naviframe.h b/legacy/elementary/src/lib/elc_naviframe.h
index 70a48d4ce2..348cabe33a 100644
--- a/legacy/elementary/src/lib/elc_naviframe.h
+++ b/legacy/elementary/src/lib/elc_naviframe.h
@@ -188,19 +188,6 @@ EAPI void elm_naviframe_item_pop_to(Elm_Object_Item *it);
*/
EAPI void elm_naviframe_item_promote(Elm_Object_Item *it);
-/**
- * @brief Delete the given item instantly.
- *
- * @param it The naviframe item
- *
- * This just deletes the given item from the naviframe item list instantly.
- * So this would not emit any signals for view transitions but just change
- * the current view if the given item is a top one.
- *
- * @ingroup Naviframe
- */
-EAPI void elm_naviframe_item_del(Elm_Object_Item *it);
-
/**
* @brief preserve the content objects when items are popped.
*
diff --git a/legacy/elementary/src/lib/elm_deprecated.h b/legacy/elementary/src/lib/elm_deprecated.h
index 84fec5054b..b0da20e3d0 100644
--- a/legacy/elementary/src/lib/elm_deprecated.h
+++ b/legacy/elementary/src/lib/elm_deprecated.h
@@ -433,6 +433,18 @@ EINA_DEPRECATED EAPI void elm_ctxpopup_content_set(Evas_Object *obj, Eva
*/
EINA_DEPRECATED EAPI Evas_Object *elm_ctxpopup_content_unset(Evas_Object *obj);
+/**
+ * @brief Delete the given item in a ctxpopup object.
+ *
+ * @param it Ctxpopup item to be deleted
+ *
+ * @deprecated Use elm_object_item_del() instead
+ * @see elm_ctxpopup_item_append()
+ *
+ * @ingroup Ctxpopup
+ */
+EINA_DEPRECATED EAPI void elm_ctxpopup_item_del(Elm_Object_Item *it);
+
/**
* Set the label for a given file selector button widget
*
@@ -729,6 +741,19 @@ EINA_DEPRECATED EAPI const char *elm_hoversel_item_label_get(const Elm_Object_I
*/
EINA_DEPRECATED EAPI void elm_hoversel_item_del_cb_set(Elm_Object_Item *it, Evas_Smart_Cb func);
+/**
+ * @brief Delete an item from the hoversel
+ *
+ * @param it The item to delete
+ *
+ * This deletes the item from the hoversel (should not be called while the
+ * hoversel is active; use elm_hoversel_expanded_get() to check first).
+ *
+ * @deprecated Use elm_object_item_del() instead
+ * @see elm_hoversel_item_add()
+ */
+EINA_DEPRECATED EAPI void elm_hoversel_item_del(Elm_Object_Item *it);
+
/**
* Set actionslider labels.
*
@@ -1429,6 +1454,22 @@ EINA_DEPRECATED EAPI const char *elm_diskselector_item_label_get(cons
*/
EINA_DEPRECATED EAPI void elm_diskselector_item_del_cb_set(Elm_Object_Item *it, Evas_Smart_Cb func);
+/**
+ * Delete them item from the diskselector.
+ *
+ * @param it The item of diskselector to be deleted.
+ *
+ * If deleting all diskselector items is required, elm_diskselector_clear()
+ * should be used instead of getting items list and deleting each one.
+ *
+ * @deprecated Use elm_object_item_del() instead
+ * @see elm_diskselector_clear()
+ * @see elm_diskselector_item_append()
+ *
+ * @ingroup Diskselector
+ */
+EINA_DEPRECATED EAPI void elm_diskselector_item_del(Elm_Object_Item *it);
+
EINA_DEPRECATED EAPI void elm_factory_content_set(Evas_Object *obj, Evas_Object *content);
EINA_DEPRECATED EAPI Evas_Object *elm_factory_content_get(const Evas_Object *obj);
@@ -1458,6 +1499,16 @@ EINA_DEPRECATED EAPI const char *elm_flipselector_item_label_get(const Elm_Objec
*/
EINA_DEPRECATED EAPI void elm_flipselector_item_label_set(Elm_Object_Item *it, const char *label);
+/**
+ * Delete a given item from a flip selector widget.
+ *
+ * @param it The item to delete
+ *
+ * @deprecated Use elm_object_item_del() instead
+ * @ingroup Flipselector
+ */
+EINA_DEPRECATED EAPI void elm_flipselector_item_del(Elm_Object_Item *it);
+
/**
* Make a given Elementary object the focused one.
*
@@ -1600,6 +1651,21 @@ EINA_DEPRECATED EAPI void elm_index_item_data_set(Elm_Object_Item *it, const vo
*/
EINA_DEPRECATED EAPI void elm_index_item_del_cb_set(Elm_Object_Item *it, Evas_Smart_Cb func);
+/**
+ * Remove an item from a given index widget, to be referenced by
+ * it's data value.
+ *
+ * @param obj The index object
+ * @param item The item to be removed from @p obj
+ *
+ * If a deletion callback is set, via elm_object_item_del_cb_set(),
+ * that callback function will be called by this one.
+ *
+ * @deprecated Use elm_object_item_del() instead
+ * @ingroup Index
+ */
+EINA_DEPRECATED EAPI void elm_index_item_del(Evas_Object *obj, Elm_Object_Item *item);
+
/**
* @brief Set the label on the label object
*
@@ -1879,6 +1945,16 @@ EINA_DEPRECATED EAPI void elm_menu_item_del_cb_set(Elm_O
*/
EINA_DEPRECATED EAPI void elm_menu_item_data_set(Elm_Object_Item *it, const void *data);
+/**
+ * @brief Deletes an item from the menu.
+ *
+ * @param it The item to delete.
+ *
+ * @deprecated Use elm_object_item_del() instead
+ * @see elm_menu_item_add()
+ */
+EINA_DEPRECATED EAPI void elm_menu_item_del(Elm_Object_Item *it);
+
/**
* @brief Set the content of the notify widget
*
@@ -2536,6 +2612,16 @@ EINA_DEPRECATED EAPI Evas_Object *elm_slider_end_get(const Evas_Object *obj);
*/
EINA_DEPRECATED EAPI void *elm_slideshow_item_data_get(const Elm_Object_Item *it);
+/**
+ * Delete a given item from a slideshow widget.
+ *
+ * @param it The slideshow item
+ *
+ * @deprecated Use elm_object_item_de() instead
+ * @ingroup Slideshow
+ */
+EINA_DEPRECATED EAPI void elm_slideshow_item_del(Elm_Object_Item *it);
+
/**
* Get the toolbar object from an item.
*
@@ -2687,6 +2773,18 @@ EINA_DEPRECATED EAPI Eina_Bool elm_toolbar_orientation_get(const Evas_Object
*/
EINA_DEPRECATED EAPI void elm_toolbar_item_del_cb_set(Elm_Object_Item *it, Evas_Smart_Cb func);
+/**
+ * Delete them item from the toolbar.
+ *
+ * @param it The item of toolbar to be deleted.
+ *
+ * @deprecated Use elm_object_item_del() instead
+ * @see elm_toolbar_item_append()
+ *
+ * @ingroup Toolbar
+ */
+EINA_DEPRECATED EAPI void elm_toolbar_item_del(Elm_Object_Item *it);
+
/**
* @brief Link a Elm_Payer with an Elm_Video object.
*
@@ -2753,6 +2851,19 @@ EINA_DEPRECATED EAPI void elm_segment_control_item_label_set(Elm_Ob
*/
EINA_DEPRECATED EAPI void elm_segment_control_item_icon_set(Elm_Object_Item *it, Evas_Object *icon);
+/**
+ * Remove a segment control item from its parent, deleting it.
+ *
+ * @param it The item to be removed.
+ *
+ * Items can be added with elm_segment_control_item_add() or
+ * elm_segment_control_item_insert_at().
+ *
+ * @deprecated Use elm_object_item_del() instead
+ * @ingroup SegmentControl
+ */
+EINA_DEPRECATED EAPI void elm_segment_control_item_del(Elm_Object_Item *it);
+
/**
* Get the label
*
@@ -2796,6 +2907,32 @@ EINA_DEPRECATED EAPI const char *elm_multibuttonentry_item_label_
*/
EINA_DEPRECATED EAPI void elm_multibuttonentry_item_label_set(Elm_Object_Item *it, const char *str);
+/**
+ * Delete a given item
+ *
+ * @param it The item
+ *
+ * @deprecated Use elm_object_item_del() instead
+ *
+ */
+EINA_DEPRECATED EAPI void elm_multibuttonentry_item_del(Elm_Object_Item *it);
+
+/**
+ * @brief Delete the given item instantly.
+ *
+ * @param it The naviframe item
+ *
+ * This just deletes the given item from the naviframe item list instantly.
+ * So this would not emit any signals for view transitions but just change
+ * the current view if the given item is a top one.
+ *
+ * @deprecated Use elm_object_item_del() instead
+ * @ingroup Naviframe
+ */
+EINA_DEPRECATED EAPI void elm_naviframe_item_del(Elm_Object_Item *it);
+
+
+
/**
* Sets the disabled/enabled state of a list item.
*
diff --git a/legacy/elementary/src/lib/elm_diskselector.c b/legacy/elementary/src/lib/elm_diskselector.c
index 1f232a17fa..75c25d18f3 100644
--- a/legacy/elementary/src/lib/elm_diskselector.c
+++ b/legacy/elementary/src/lib/elm_diskselector.c
@@ -112,6 +112,223 @@ _diskselector_object_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj, vo
wd->idler = ecore_idle_enterer_before_add(_move_scroller, data);
}
+static void
+_item_del(Elm_Diskselector_Item *item)
+{
+ if (!item) return;
+ eina_stringshare_del(item->label);
+ if (item->icon)
+ evas_object_del(item->icon);
+}
+
+static int
+_count_letter(const char *str)
+{
+ int pos = 0;
+ int code = 0, chnum;
+
+ for (chnum = 0; ; chnum++)
+ {
+ pos = evas_string_char_next_get(str, pos, &code);
+ if (code == 0) break;
+ }
+ return chnum;
+}
+
+static int
+_check_letter(const char *str, int length)
+{
+ int pos = 0;
+ int code = 0, chnum;
+
+ for (chnum = 0; ; chnum++)
+ {
+ if (chnum == length) break;
+ pos = evas_string_char_next_get(str, pos, &code);
+ if (code == 0) break;
+ }
+ return pos;
+}
+
+static Eina_Bool
+_check_string(void *data)
+{
+ int mid, steps, length, diff;
+ Elm_Diskselector_Item *it;
+ Eina_List *list, *l;
+ Evas_Coord ox, ow;
+ char buf[1024];
+ Widget_Data *wd = data;
+
+ evas_object_geometry_get(wd->scroller, &ox, NULL, &ow, NULL);
+ if (ow <= 0)
+ return EINA_FALSE;
+ if (!wd->init)
+ return EINA_FALSE;
+ if (!wd->round)
+ list = wd->items;
+ else
+ list = wd->r_items;
+
+ EINA_LIST_FOREACH(list, l, it)
+ {
+ Evas_Coord x, w;
+ int len;
+ evas_object_geometry_get(VIEW(it), &x, NULL, &w, NULL);
+ /* item not visible */
+ if ((x + w <= ox) || (x >= ox + ow))
+ continue;
+
+ len = _count_letter(it->label);
+// // FIXME: len should be # of ut8f letters. ie count using utf8 string walk, not stringshare len
+// len = eina_stringshare_strlen(it->label);
+
+ if (x <= ox + 5)
+ edje_object_signal_emit(VIEW(it), "elm,state,left_side",
+ "elm");
+ else if (x + w >= ox + ow - 5)
+ edje_object_signal_emit(VIEW(it), "elm,state,right_side",
+ "elm");
+ else
+ {
+ if ((wd->len_threshold) && (len > wd->len_threshold))
+ edje_object_signal_emit(VIEW(it), "elm,state,center_small",
+ "elm");
+ else
+ edje_object_signal_emit(VIEW(it), "elm,state,center",
+ "elm");
+ }
+
+ // if len is les that the limit len, skip anyway
+ if (len <= wd->len_side)
+ continue;
+
+ steps = len - wd->len_side + 1;
+ mid = x + w / 2;
+ if (mid <= ox + ow / 2)
+ diff = (ox + ow / 2) - mid;
+ else
+ diff = mid - (ox + ow / 2);
+
+ length = len - (int)(diff * steps / (ow / 3));
+ length = MAX(length, wd->len_side);
+ // limit string len to "length" ut8f chars
+ length = _check_letter(it->label, length);
+ // cut it off at byte mark returned form _check_letter
+ strncpy(buf, it->label, length);
+ buf[length] = '\0';
+ edje_object_part_text_set(VIEW(it), "elm.text", buf);
+ }
+
+ if (wd->check_idler)
+ ecore_idle_enterer_del(wd->check_idler);
+ wd->check_idler = NULL;
+ return EINA_FALSE;
+}
+
+static void
+_item_del_pre_hook(Elm_Object_Item *it)
+{
+ ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
+ Elm_Diskselector_Item *item, *item2, *dit;
+ Eina_List *l;
+ int i = 0;
+ Widget_Data *wd;
+ item = (Elm_Diskselector_Item *) it;
+ wd = elm_widget_data_get(WIDGET(item));
+ if (!wd) return;
+
+ elm_box_unpack(wd->main_box, VIEW(item));
+
+ if (wd->round)
+ wd->r_items = eina_list_remove(wd->r_items, item);
+
+ wd->items = eina_list_remove(wd->items, item);
+
+ if (wd->selected_item == item)
+ {
+ dit = (Elm_Diskselector_Item *) eina_list_nth(wd->items, 0);
+ if (dit != item)
+ wd->selected_item = dit;
+ else
+ wd->selected_item = eina_list_nth(wd->items, 1);
+
+ _selected_item_indicate(wd->selected_item);
+ }
+
+ _item_del(item);
+ wd->item_count -= 1;
+
+ if (wd->round)
+ {
+ if (!wd->item_count)
+ {
+ evas_object_hide(wd->VIEW(first));
+ evas_object_hide(wd->VIEW(second));
+ evas_object_hide(wd->VIEW(last));
+ evas_object_hide(wd->VIEW(s_last));
+
+ EINA_LIST_FOREACH(wd->under_items, l, item2)
+ evas_object_hide(VIEW(item2));
+
+ EINA_LIST_FOREACH(wd->over_items, l, item2)
+ evas_object_hide(VIEW(item2));
+ }
+ else
+ {
+ dit = eina_list_nth(wd->items, 0);
+ if (dit)
+ {
+ eina_stringshare_replace(&wd->first->label, dit->label);
+ edje_object_part_text_set(wd->VIEW(first), "elm.text",
+ wd->first->label);
+ }
+ dit = eina_list_nth(wd->items, 1);
+ if (dit)
+ {
+ eina_stringshare_replace(&wd->second->label, dit->label);
+ edje_object_part_text_set(wd->VIEW(second), "elm.text",
+ wd->second->label);
+ }
+ // if more than 3 itmes should be displayed
+ for (i = 2; i < CEIL(wd->display_item_num); i++)
+ {
+ dit = eina_list_nth(wd->items, i);
+ item2 = eina_list_nth(wd->over_items, i - 2);
+ eina_stringshare_replace(&item2->label, dit->label);
+ edje_object_part_text_set(VIEW(item2), "elm.text", item2->label);
+ }
+
+ dit = eina_list_nth(wd->items, eina_list_count(wd->items) - 1);
+ if (dit)
+ {
+ eina_stringshare_replace(&wd->last->label, dit->label);
+ edje_object_part_text_set(wd->VIEW(last), "elm.text",
+ wd->last->label);
+ }
+ dit = eina_list_nth(wd->items, eina_list_count(wd->items) - 2);
+ if (dit)
+ {
+ eina_stringshare_replace(&wd->s_last->label, dit->label);
+ edje_object_part_text_set(wd->VIEW(s_last), "elm.text",
+ wd->s_last->label);
+ }
+ // if more than 3 itmes should be displayed
+ for (i = 3; i <= CEIL(wd->display_item_num); i++)
+ {
+ dit = eina_list_nth(wd->items, wd->item_count - i);
+ item2 = eina_list_nth(wd->under_items, i - 3);
+ eina_stringshare_replace(&item2->label, dit->label);
+ edje_object_part_text_set(VIEW(item2), "elm.text",
+ item2->label);
+ }
+ }
+ }
+ wd->check_idler = ecore_idle_enterer_before_add(_check_string, wd);
+ _sizing_eval(wd->self);
+
+}
+
static Elm_Diskselector_Item *
_item_new(Evas_Object *obj, Evas_Object *icon, const char *label, Evas_Smart_Cb func, const void *data)
{
@@ -121,6 +338,7 @@ _item_new(Evas_Object *obj, Evas_Object *icon, const char *label, Evas_Smart_Cb
it = elm_widget_item_new(obj, Elm_Diskselector_Item);
if (!it) return NULL;
+ elm_widget_item_del_pre_hook_set(it, _item_del_pre_hook);
elm_widget_item_text_set_hook_set(it, _item_text_set_hook);
elm_widget_item_text_get_hook_set(it, _item_text_get_hook);
elm_widget_item_content_set_hook_set(it, _item_content_set_hook);
@@ -154,16 +372,6 @@ _item_new(Evas_Object *obj, Evas_Object *icon, const char *label, Evas_Smart_Cb
return it;
}
-static void
-_item_del(Elm_Diskselector_Item *item)
-{
- if (!item) return;
- eina_stringshare_del(item->label);
- if (item->icon)
- evas_object_del(item->icon);
- elm_widget_item_del(item);
-}
-
static void
_theme_data_get(Widget_Data *wd)
{
@@ -254,7 +462,11 @@ _del_pre_hook(Evas_Object * obj)
}
}
- EINA_LIST_FREE(wd->items, it) _item_del(it);
+ EINA_LIST_FREE(wd->items, it)
+ {
+ _item_del(it);
+ elm_widget_item_free(it);
+ }
eina_list_free(wd->r_items);
}
@@ -409,111 +621,6 @@ _event_hook(Evas_Object *obj, Evas_Object *src __UNUSED__, Evas_Callback_Type ty
return EINA_TRUE;
}
-static int
-_count_letter(const char *str)
-{
- int pos = 0;
- int code = 0, chnum;
-
- for (chnum = 0; ; chnum++)
- {
- pos = evas_string_char_next_get(str, pos, &code);
- if (code == 0) break;
- }
- return chnum;
-}
-
-static int
-_check_letter(const char *str, int length)
-{
- int pos = 0;
- int code = 0, chnum;
-
- for (chnum = 0; ; chnum++)
- {
- if (chnum == length) break;
- pos = evas_string_char_next_get(str, pos, &code);
- if (code == 0) break;
- }
- return pos;
-}
-
-static Eina_Bool
-_check_string(void *data)
-{
- int mid, steps, length, diff;
- Elm_Diskselector_Item *it;
- Eina_List *list, *l;
- Evas_Coord ox, ow;
- char buf[1024];
- Widget_Data *wd = data;
-
- evas_object_geometry_get(wd->scroller, &ox, NULL, &ow, NULL);
- if (ow <= 0)
- return EINA_FALSE;
- if (!wd->init)
- return EINA_FALSE;
- if (!wd->round)
- list = wd->items;
- else
- list = wd->r_items;
-
- EINA_LIST_FOREACH(list, l, it)
- {
- Evas_Coord x, w;
- int len;
- evas_object_geometry_get(VIEW(it), &x, NULL, &w, NULL);
- /* item not visible */
- if ((x + w <= ox) || (x >= ox + ow))
- continue;
-
- len = _count_letter(it->label);
-// // FIXME: len should be # of ut8f letters. ie count using utf8 string walk, not stringshare len
-// len = eina_stringshare_strlen(it->label);
-
- if (x <= ox + 5)
- edje_object_signal_emit(VIEW(it), "elm,state,left_side",
- "elm");
- else if (x + w >= ox + ow - 5)
- edje_object_signal_emit(VIEW(it), "elm,state,right_side",
- "elm");
- else
- {
- if ((wd->len_threshold) && (len > wd->len_threshold))
- edje_object_signal_emit(VIEW(it), "elm,state,center_small",
- "elm");
- else
- edje_object_signal_emit(VIEW(it), "elm,state,center",
- "elm");
- }
-
- // if len is les that the limit len, skip anyway
- if (len <= wd->len_side)
- continue;
-
- steps = len - wd->len_side + 1;
- mid = x + w / 2;
- if (mid <= ox + ow / 2)
- diff = (ox + ow / 2) - mid;
- else
- diff = mid - (ox + ow / 2);
-
- length = len - (int)(diff * steps / (ow / 3));
- length = MAX(length, wd->len_side);
- // limit string len to "length" ut8f chars
- length = _check_letter(it->label, length);
- // cut it off at byte mark returned form _check_letter
- strncpy(buf, it->label, length);
- buf[length] = '\0';
- edje_object_part_text_set(VIEW(it), "elm.text", buf);
- }
-
- if (wd->check_idler)
- ecore_idle_enterer_del(wd->check_idler);
- wd->check_idler = NULL;
- return EINA_FALSE;
-}
-
static void
_selected_item_indicate(Elm_Diskselector_Item *it)
{
@@ -664,8 +771,7 @@ _round_item_del(Widget_Data *wd, Elm_Diskselector_Item *it)
elm_box_unpack(wd->main_box, VIEW(it));
wd->r_items = eina_list_remove(wd->r_items, it);
eina_stringshare_del(it->label);
- evas_object_del(VIEW(it));
- free(it);
+ elm_widget_item_free(it);
}
static void
@@ -873,6 +979,7 @@ _item_content_get_hook(const Elm_Object_Item *it, const char *part)
return ((Elm_Diskselector_Item *) it)->icon;
}
+
EAPI Evas_Object *
elm_diskselector_add(Evas_Object *parent)
{
@@ -1107,7 +1214,11 @@ elm_diskselector_clear(Evas_Object *obj)
if (!wd->items) return;
wd->selected_item = NULL;
- EINA_LIST_FREE(wd->items, it) _item_del(it);
+ EINA_LIST_FREE(wd->items, it)
+ {
+ _item_del(it);
+ elm_widget_item_free(it);
+ }
_round_items_del(wd);
_sizing_eval(obj);
}
@@ -1165,103 +1276,7 @@ elm_diskselector_item_append(Evas_Object *obj, const char *label, Evas_Object *i
EAPI void
elm_diskselector_item_del(Elm_Object_Item * it)
{
- ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
- Elm_Diskselector_Item *item, *item2, *dit;
- Eina_List *l;
- int i = 0;
- Widget_Data *wd;
- item = (Elm_Diskselector_Item *) it;
- wd = elm_widget_data_get(WIDGET(item));
- if (!wd) return;
-
- elm_box_unpack(wd->main_box, VIEW(item));
-
- if (wd->round)
- wd->r_items = eina_list_remove(wd->r_items, item);
-
- wd->items = eina_list_remove(wd->items, item);
-
- if (wd->selected_item == item)
- {
- dit = (Elm_Diskselector_Item *) eina_list_nth(wd->items, 0);
- if (dit != item)
- wd->selected_item = dit;
- else
- wd->selected_item = eina_list_nth(wd->items, 1);
-
- _selected_item_indicate(wd->selected_item);
- }
-
- _item_del(item);
- wd->item_count -= 1;
-
- if (wd->round)
- {
- if (!wd->item_count)
- {
- evas_object_hide(wd->VIEW(first));
- evas_object_hide(wd->VIEW(second));
- evas_object_hide(wd->VIEW(last));
- evas_object_hide(wd->VIEW(s_last));
-
- EINA_LIST_FOREACH(wd->under_items, l, item2)
- evas_object_hide(VIEW(item2));
-
- EINA_LIST_FOREACH(wd->over_items, l, item2)
- evas_object_hide(VIEW(item2));
- }
- else
- {
- dit = eina_list_nth(wd->items, 0);
- if (dit)
- {
- eina_stringshare_replace(&wd->first->label, dit->label);
- edje_object_part_text_set(wd->VIEW(first), "elm.text",
- wd->first->label);
- }
- dit = eina_list_nth(wd->items, 1);
- if (dit)
- {
- eina_stringshare_replace(&wd->second->label, dit->label);
- edje_object_part_text_set(wd->VIEW(second), "elm.text",
- wd->second->label);
- }
- // if more than 3 itmes should be displayed
- for (i = 2; i < CEIL(wd->display_item_num); i++)
- {
- dit = eina_list_nth(wd->items, i);
- item2 = eina_list_nth(wd->over_items, i - 2);
- eina_stringshare_replace(&item2->label, dit->label);
- edje_object_part_text_set(VIEW(item2), "elm.text", item2->label);
- }
-
- dit = eina_list_nth(wd->items, eina_list_count(wd->items) - 1);
- if (dit)
- {
- eina_stringshare_replace(&wd->last->label, dit->label);
- edje_object_part_text_set(wd->VIEW(last), "elm.text",
- wd->last->label);
- }
- dit = eina_list_nth(wd->items, eina_list_count(wd->items) - 2);
- if (dit)
- {
- eina_stringshare_replace(&wd->s_last->label, dit->label);
- edje_object_part_text_set(wd->VIEW(s_last), "elm.text",
- wd->s_last->label);
- }
- // if more than 3 itmes should be displayed
- for (i = 3; i <= CEIL(wd->display_item_num); i++)
- {
- dit = eina_list_nth(wd->items, wd->item_count - i);
- item2 = eina_list_nth(wd->under_items, i - 3);
- eina_stringshare_replace(&item2->label, dit->label);
- edje_object_part_text_set(VIEW(item2), "elm.text",
- item2->label);
- }
- }
- }
- wd->check_idler = ecore_idle_enterer_before_add(_check_string, wd);
- _sizing_eval(wd->self);
+ elm_object_item_del(it);
}
EAPI const char *
diff --git a/legacy/elementary/src/lib/elm_diskselector.h b/legacy/elementary/src/lib/elm_diskselector.h
index 727192fe82..58eceb255c 100644
--- a/legacy/elementary/src/lib/elm_diskselector.h
+++ b/legacy/elementary/src/lib/elm_diskselector.h
@@ -227,7 +227,7 @@ EAPI void elm_diskselector_scroller_policy_set(Evas_Object *ob
*
* @param obj The diskselector object.
*
- * @see elm_diskselector_item_del()
+ * @see elm_object_item_del()
* @see elm_diskselector_item_append()
*
* @ingroup Diskselector
@@ -242,7 +242,7 @@ EAPI void elm_diskselector_clear(Evas_Object *obj);
* or @c NULL on failure.
*
* @see elm_diskselector_item_append()
- * @see elm_diskselector_item_del()
+ * @see elm_object_item_del()
* @see elm_diskselector_clear()
*
* @ingroup Diskselector
@@ -271,7 +271,7 @@ EAPI const Eina_List *elm_diskselector_items_get(const Evas_Object *obj);
* to the right.
*
* Items created with this method can be deleted with
- * elm_diskselector_item_del().
+ * elm_object_item_del().
*
* Associated @p data can be properly freed when item is deleted if a
* callback function is set with elm_object_item_del_cb_set().
@@ -290,7 +290,7 @@ EAPI const Eina_List *elm_diskselector_items_get(const Evas_Object *obj);
* elm_diskselector_item_append(disk, "label", ic, NULL, NULL);
* @endcode
*
- * @see elm_diskselector_item_del()
+ * @see elm_object_item_del()
* @see elm_diskselector_clear()
* @see elm_icon_add()
*
@@ -298,22 +298,6 @@ EAPI const Eina_List *elm_diskselector_items_get(const Evas_Object *obj);
*/
EAPI Elm_Object_Item *elm_diskselector_item_append(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Smart_Cb func, const void *data);
-
-/**
- * Delete them item from the diskselector.
- *
- * @param it The item of diskselector to be deleted.
- *
- * If deleting all diskselector items is required, elm_diskselector_clear()
- * should be used instead of getting items list and deleting each one.
- *
- * @see elm_diskselector_clear()
- * @see elm_diskselector_item_append()
- *
- * @ingroup Diskselector
- */
-EAPI void elm_diskselector_item_del(Elm_Object_Item *it);
-
/**
* Get the selected item.
*
diff --git a/legacy/elementary/src/lib/elm_flipselector.c b/legacy/elementary/src/lib/elm_flipselector.c
index f0788e497c..72702a7ede 100644
--- a/legacy/elementary/src/lib/elm_flipselector.c
+++ b/legacy/elementary/src/lib/elm_flipselector.c
@@ -57,6 +57,7 @@ static void _update_view(Evas_Object *obj);
static void _callbacks_set(Evas_Object *obj);
static void _flip_up(Widget_Data *wd);
static void _flip_down(Widget_Data *wd);
+static void _item_del_pre_hook(Elm_Object_Item *it);
static const char SIG_SELECTED[] = "selected";
static const char SIG_UNDERFLOWED[] = "underflowed";
@@ -143,6 +144,7 @@ _item_new(Evas_Object *obj, const char *label, Evas_Smart_Cb func, const void *d
it = elm_widget_item_new(obj, Elm_Flipselector_Item);
if (!it) return NULL;
+ elm_widget_item_del_pre_hook_set(it, _item_del_pre_hook);
elm_widget_item_text_set_hook_set(it, _item_text_set_hook);
elm_widget_item_text_get_hook_set(it, _item_text_get_hook);
elm_widget_item_signal_emit_hook_set(it, _item_signal_emit_hook);
@@ -164,7 +166,7 @@ static inline void
_item_free(Elm_Flipselector_Item *it)
{
eina_stringshare_del(it->label);
- elm_widget_item_del(it);
+ elm_widget_item_free(it);
}
static void
@@ -574,6 +576,51 @@ _callbacks_set(Evas_Object *obj)
"", _signal_val_change_stop, obj);
}
+static void
+_item_del_pre_hook(Elm_Object_Item *it)
+{
+ ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
+ Widget_Data *wd;
+ Elm_Flipselector_Item *item, *item2;
+ Eina_List *l;
+
+ item = (Elm_Flipselector_Item *) it;
+ wd = elm_widget_data_get(WIDGET(item));
+ if (!wd) return;
+
+ if (wd->walking > 0)
+ {
+ item->deleted = EINA_TRUE;
+ return;
+ }
+
+ _flipselector_walk(wd);
+
+ EINA_LIST_FOREACH(wd->items, l, item2)
+ {
+ if (item2 == item)
+ {
+ wd->items = eina_list_remove_list(wd->items, l);
+ if (wd->current == l)
+ {
+ wd->current = l->prev;
+ if (!wd->current) wd->current = l->next;
+ if (wd->current)
+ {
+ item2 = wd->current->data;
+ _send_msg(wd, MSG_FLIP_DOWN, (char *)item2->label);
+ }
+ else
+ _send_msg(wd, MSG_FLIP_DOWN, "");
+ }
+ break;
+ }
+ }
+ eina_stringshare_del(item->label);
+ _sentinel_eval(wd);
+ _flipselector_unwalk(wd);
+}
+
EAPI Evas_Object *
elm_flipselector_add(Evas_Object *parent)
{
@@ -836,46 +883,7 @@ elm_flipselector_item_selected_get(const Elm_Object_Item *it)
EAPI void
elm_flipselector_item_del(Elm_Object_Item *it)
{
- ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
- Widget_Data *wd;
- Elm_Flipselector_Item *item, *item2;
- Eina_List *l;
-
- item = (Elm_Flipselector_Item *) it;
- wd = elm_widget_data_get(WIDGET(item));
- if (!wd) return;
-
- if (wd->walking > 0)
- {
- item->deleted = EINA_TRUE;
- return;
- }
-
- _flipselector_walk(wd);
-
- EINA_LIST_FOREACH(wd->items, l, item2)
- {
- if (item2 == item)
- {
- wd->items = eina_list_remove_list(wd->items, l);
- if (wd->current == l)
- {
- wd->current = l->prev;
- if (!wd->current) wd->current = l->next;
- if (wd->current)
- {
- item2 = wd->current->data;
- _send_msg(wd, MSG_FLIP_DOWN, (char *)item2->label);
- }
- else
- _send_msg(wd, MSG_FLIP_DOWN, "");
- }
- break;
- }
- }
- _item_free(item);
- _sentinel_eval(wd);
- _flipselector_unwalk(wd);
+ elm_object_item_del(it);
}
EAPI const char *
diff --git a/legacy/elementary/src/lib/elm_flipselector.h b/legacy/elementary/src/lib/elm_flipselector.h
index 9f40d81f73..7ccf4a5933 100644
--- a/legacy/elementary/src/lib/elm_flipselector.h
+++ b/legacy/elementary/src/lib/elm_flipselector.h
@@ -145,7 +145,7 @@ EAPI Elm_Object_Item *elm_flipselector_item_prepend(Evas_Object *obj,
* freed. Use the list members with functions like
* elm_object_item_text_set(),
* elm_object_item_text_get(),
- * elm_flipselector_item_del(),
+ * elm_object_item_del(),
* elm_flipselector_item_selected_get(),
* elm_flipselector_item_selected_set().
*
@@ -231,15 +231,6 @@ EAPI void elm_flipselector_item_selected_set(Elm_Object_I
*/
EAPI Eina_Bool elm_flipselector_item_selected_get(const Elm_Object_Item *it);
-/**
- * Delete a given item from a flip selector widget.
- *
- * @param it The item to delete
- *
- * @ingroup Flipselector
- */
-EAPI void elm_flipselector_item_del(Elm_Object_Item *it);
-
/**
* Gets the item before @p item in a flip selector widget's
* internal list of items.
diff --git a/legacy/elementary/src/lib/elm_index.c b/legacy/elementary/src/lib/elm_index.c
index 16927f7433..9cb0cb324d 100644
--- a/legacy/elementary/src/lib/elm_index.c
+++ b/legacy/elementary/src/lib/elm_index.c
@@ -55,10 +55,16 @@ static void
_del_pre_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
+ Elm_Index_Item *it;
if (!wd) return;
_index_box_clear(obj, wd->bx[wd->level], wd->level);
_index_box_clear(obj, wd->bx[0], 0);
- while (wd->items) _item_free(wd->items->data);
+ while (wd->items)
+ {
+ it = wd->items->data;
+ _item_free(it);
+ elm_widget_item_free(it);
+ }
if (wd->delay) ecore_timer_del(wd->delay);
}
@@ -183,6 +189,16 @@ _sizing_eval(Evas_Object *obj)
evas_object_size_hint_max_set(obj, maxw, maxh);
}
+static void
+_item_del_pre_hook(Elm_Object_Item *it)
+{
+ ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
+ Widget_Data *wd = elm_widget_data_get(WIDGET(it));
+ if (!wd) return;
+ _item_free((Elm_Index_Item *) it);
+ _index_box_clear(WIDGET(it), wd->bx[wd->level], wd->level);
+}
+
static Elm_Index_Item *
_item_new(Evas_Object *obj, const char *letter, const void *item)
{
@@ -191,6 +207,7 @@ _item_new(Evas_Object *obj, const char *letter, const void *item)
if (!wd) return NULL;
it = elm_widget_item_new(obj, Elm_Index_Item);
if (!it) return NULL;
+ elm_widget_item_del_pre_hook_set(it, _item_del_pre_hook);
it->letter = eina_stringshare_add(letter);
it->base.data = item;
it->level = wd->level;
@@ -215,9 +232,7 @@ _item_free(Elm_Index_Item *it)
Widget_Data *wd = elm_widget_data_get(WIDGET(it));
if (!wd) return;
wd->items = eina_list_remove(wd->items, it);
- elm_widget_item_pre_notify_del(it);
eina_stringshare_del(it->letter);
- elm_widget_item_del(it);
}
// FIXME: always have index filled
@@ -743,6 +758,7 @@ elm_index_item_sorted_insert(Evas_Object *obj, const char *letter, const void *i
if (cmp_data_func(p_it->base.data, it->base.data) >= 0)
p_it->base.data = it->base.data;
_item_free(it);
+ elm_widget_item_free(it);
}
}
@@ -750,14 +766,9 @@ elm_index_item_sorted_insert(Evas_Object *obj, const char *letter, const void *i
}
EAPI void
-elm_index_item_del(Evas_Object *obj, Elm_Object_Item *it)
+elm_index_item_del(Evas_Object *obj __UNUSED__, Elm_Object_Item *it)
{
- ELM_CHECK_WIDTYPE(obj, widtype);
- ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- _item_free((Elm_Index_Item *) it);
- _index_box_clear(obj, wd->bx[wd->level], wd->level);
+ elm_object_item_del(it);
}
EAPI Elm_Object_Item *
@@ -783,7 +794,11 @@ elm_index_item_clear(Evas_Object *obj)
if (it->level != wd->level) continue;
clear = eina_list_append(clear, it);
}
- EINA_LIST_FREE(clear, it) _item_free(it);
+ EINA_LIST_FREE(clear, it)
+ {
+ _item_free(it);
+ elm_widget_item_free(it);
+ }
}
EAPI void
diff --git a/legacy/elementary/src/lib/elm_index.h b/legacy/elementary/src/lib/elm_index.h
index e312027cce..a327d04961 100644
--- a/legacy/elementary/src/lib/elm_index.h
+++ b/legacy/elementary/src/lib/elm_index.h
@@ -239,20 +239,6 @@ EAPI void elm_index_item_prepend_relative(Evas_Object *obj, con
*/
EAPI void elm_index_item_sorted_insert(Evas_Object *obj, const char *letter, const void *item, Eina_Compare_Cb cmp_func, Eina_Compare_Cb cmp_data_func);
-/**
- * Remove an item from a given index widget, to be referenced by
- * it's data value.
- *
- * @param obj The index object
- * @param item The item to be removed from @p obj
- *
- * If a deletion callback is set, via elm_object_item_del_cb_set(),
- * that callback function will be called by this one.
- *
- * @ingroup Index
- */
-EAPI void elm_index_item_del(Evas_Object *obj, Elm_Object_Item *item);
-
/**
* Find a given index widget's item, using item data.
*
diff --git a/legacy/elementary/src/lib/elm_menu.c b/legacy/elementary/src/lib/elm_menu.c
index 814c645b19..f4ef091f8e 100644
--- a/legacy/elementary/src/lib/elm_menu.c
+++ b/legacy/elementary/src/lib/elm_menu.c
@@ -58,8 +58,6 @@ _del_item(Elm_Menu_Item *item)
{
Elm_Menu_Item *child;
- elm_widget_item_pre_notify_del(item);
-
EINA_LIST_FREE(item->submenu.items, child)
_del_item(child);
@@ -67,7 +65,7 @@ _del_item(Elm_Menu_Item *item)
if (item->submenu.hv) evas_object_del(item->submenu.hv);
if (item->submenu.location) evas_object_del(item->submenu.location);
if (item->icon_str) eina_stringshare_del(item->icon_str);
- elm_widget_item_del(item);
+ elm_widget_item_free(item);
}
static void
@@ -81,7 +79,7 @@ _del_pre_hook(Evas_Object *obj)
evas_object_event_callback_del_full(wd->parent, EVAS_CALLBACK_DEL, _parent_del, wd);
EINA_LIST_FREE(wd->items, item)
- _del_item(item);
+ _del_item(item);
if (wd->hv) evas_object_del(wd->hv);
if (wd->location) evas_object_del(wd->location);
@@ -692,6 +690,28 @@ _elm_menu_item_add_helper(Evas_Object *obj, Elm_Menu_Item *parent, Elm_Menu_Item
_sizing_eval(obj);
}
+static void
+_item_del_pre_hook(Elm_Object_Item *it)
+{
+ ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
+ Elm_Menu_Item *item = (Elm_Menu_Item *) it;
+ Elm_Object_Item *_item;
+
+ EINA_LIST_FREE(item->submenu.items, _item) elm_object_item_del(_item);
+ 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);
+ if (item->submenu.location) evas_object_del(item->submenu.location);
+
+ if (item->parent)
+ item->parent->submenu.items = eina_list_remove(item->parent->submenu.items, item);
+ else
+ {
+ Widget_Data *wd = elm_widget_data_get(WIDGET(item));
+ wd->items = eina_list_remove(wd->items, item);
+ }
+}
+
EAPI Elm_Object_Item *
elm_menu_item_add(Evas_Object *obj, Elm_Object_Item *parent, const char *icon, const char *label, Evas_Smart_Cb func, const void *data)
{
@@ -710,6 +730,7 @@ elm_menu_item_add(Evas_Object *obj, Elm_Object_Item *parent, const char *icon, c
return NULL;
}
+ elm_widget_item_del_pre_hook_set(subitem, _item_del_pre_hook);
elm_widget_item_disable_hook_set(subitem, _item_disable_hook);
elm_widget_item_text_set_hook_set(subitem, _item_text_set_hook);
elm_widget_item_text_get_hook_set(subitem, _item_text_get_hook);
@@ -745,6 +766,7 @@ elm_menu_item_add_object(Evas_Object *obj, Elm_Object_Item *parent, Evas_Object
subitem = elm_widget_item_new(obj, Elm_Menu_Item);
if (!subitem) return NULL;
+ elm_widget_item_del_pre_hook_set(subitem, _item_del_pre_hook);
elm_widget_item_disable_hook_set(subitem, _item_disable_hook);
elm_widget_item_text_set_hook_set(subitem, _item_text_set_hook);
elm_widget_item_text_get_hook_set(subitem, _item_text_get_hook);
@@ -840,6 +862,7 @@ elm_menu_item_separator_add(Evas_Object *obj, Elm_Object_Item *parent)
subitem = elm_widget_item_new(obj, Elm_Menu_Item);
if (!subitem) return NULL;
+ elm_widget_item_del_pre_hook_set(subitem, _item_del_pre_hook);
elm_widget_item_disable_hook_set(subitem, _item_disable_hook);
elm_widget_item_text_set_hook_set(subitem, _item_text_set_hook);
elm_widget_item_text_get_hook_set(subitem, _item_text_get_hook);
@@ -894,27 +917,7 @@ elm_menu_item_is_separator(Elm_Object_Item *it)
EAPI void
elm_menu_item_del(Elm_Object_Item *it)
{
- ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
- Elm_Menu_Item *item = (Elm_Menu_Item *) it;
- Elm_Object_Item *_item;
-
- elm_widget_item_pre_notify_del(item);
-
- EINA_LIST_FREE(item->submenu.items, _item) elm_menu_item_del(_item);
- 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);
- if (item->submenu.location) evas_object_del(item->submenu.location);
-
- if (item->parent)
- item->parent->submenu.items = eina_list_remove(item->parent->submenu.items, item);
- else
- {
- Widget_Data *wd = elm_widget_data_get(WIDGET(item));
- wd->items = eina_list_remove(wd->items, item);
- }
-
- elm_widget_item_del(item);
+ elm_object_item_del(it);
}
EAPI void
diff --git a/legacy/elementary/src/lib/elm_menu.h b/legacy/elementary/src/lib/elm_menu.h
index 2371928f29..a79c69ff79 100644
--- a/legacy/elementary/src/lib/elm_menu.h
+++ b/legacy/elementary/src/lib/elm_menu.h
@@ -185,15 +185,6 @@ EAPI Elm_Object_Item *elm_menu_item_separator_add(Evas_Object *obj,
*/
EAPI Eina_Bool elm_menu_item_is_separator(Elm_Object_Item *it);
-/**
- * @brief Deletes an item from the menu.
- *
- * @param it The item to delete.
- *
- * @see elm_menu_item_add()
- */
-EAPI void elm_menu_item_del(Elm_Object_Item *it);
-
/**
* @brief Returns a list of @p item's subitems.
*
diff --git a/legacy/elementary/src/lib/elm_segment_control.c b/legacy/elementary/src/lib/elm_segment_control.c
index b8d88b1b1c..1cd7dbf1f3 100644
--- a/legacy/elementary/src/lib/elm_segment_control.c
+++ b/legacy/elementary/src/lib/elm_segment_control.c
@@ -79,7 +79,11 @@ _del_hook(Evas_Object *obj)
wd = elm_widget_data_get(obj);
if (!wd) return;
- EINA_LIST_FREE(wd->seg_items, it) _item_free(it);
+ EINA_LIST_FREE(wd->seg_items, it)
+ {
+ _item_free(it);
+ elm_widget_item_free(it);
+ }
free(wd);
}
@@ -180,12 +184,8 @@ _item_free(Elm_Segment_Item *it)
if (wd->selected_item == it) wd->selected_item = NULL;
if (wd->seg_items) wd->seg_items = eina_list_remove(wd->seg_items, it);
- elm_widget_item_pre_notify_del(it);
-
if (it->icon) evas_object_del(it->icon);
if (it->label) eina_stringshare_del(it->label);
-
- elm_widget_item_del(it);
}
static void
@@ -503,6 +503,20 @@ _item_content_get_hook(const Elm_Object_Item *it, const char *part)
return ((Elm_Segment_Item *) it)->icon;
}
+static void
+_item_del_pre_hook(Elm_Object_Item *it)
+{
+ ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
+ Widget_Data *wd;
+ Elm_Segment_Item *item = (Elm_Segment_Item *) it;
+
+ wd = elm_widget_item_data_get(item);
+ if (!wd) return;
+
+ _item_free(item);
+ _update_list(wd);
+}
+
static Elm_Segment_Item*
_item_new(Evas_Object *obj, Evas_Object *icon, const char *label)
{
@@ -515,6 +529,7 @@ _item_new(Evas_Object *obj, Evas_Object *icon, const char *label)
it = elm_widget_item_new(obj, Elm_Segment_Item);
if (!it) return NULL;
elm_widget_item_data_set(it, wd);
+ elm_widget_item_del_pre_hook_set(it, _item_del_pre_hook);
elm_widget_item_text_set_hook_set(it, _item_text_set_hook);
elm_widget_item_text_get_hook_set(it, _item_text_get_hook);
elm_widget_item_content_set_hook_set(it, _item_content_set_hook);
@@ -640,15 +655,7 @@ elm_segment_control_item_insert_at(Evas_Object *obj, Evas_Object *icon,
EAPI void
elm_segment_control_item_del(Elm_Object_Item *it)
{
- ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
- Widget_Data *wd;
- Elm_Segment_Item *item = (Elm_Segment_Item *) it;
-
- wd = elm_widget_item_data_get(item);
- if (!wd) return;
-
- _item_free(item);
- _update_list(wd);
+ elm_object_item_del(it);
}
EAPI void
@@ -663,8 +670,7 @@ elm_segment_control_item_del_at(Evas_Object *obj, int idx)
it = _item_find(obj, idx);
if (!it) return;
- _item_free(it);
- _update_list(wd);
+ elm_object_item_del((Elm_Object_Item *) it);
}
EAPI const char*
diff --git a/legacy/elementary/src/lib/elm_segment_control.h b/legacy/elementary/src/lib/elm_segment_control.h
index 50f3e372d5..c5d0aa408f 100644
--- a/legacy/elementary/src/lib/elm_segment_control.h
+++ b/legacy/elementary/src/lib/elm_segment_control.h
@@ -83,7 +83,7 @@ EAPI Evas_Object *elm_segment_control_add(Evas_Object *parent);
* elm_segment_control_item_insert_at() should be used instead.
*
* Items created with this function can be deleted with function
- * elm_segment_control_item_del() or elm_segment_control_item_del_at().
+ * elm_object_item_del() or elm_segment_control_item_del_at().
*
* @note @p label set to @c NULL is different from empty string "".
* If an item
@@ -102,7 +102,7 @@ EAPI Evas_Object *elm_segment_control_add(Evas_Object *parent);
* @endcode
*
* @see elm_segment_control_item_insert_at()
- * @see elm_segment_control_item_del()
+ * @see elm_object_item_del()
*
* @ingroup SegmentControl
*/
@@ -125,7 +125,7 @@ EAPI Elm_Object_Item *elm_segment_control_item_add(Evas_Object *obj, Evas_Object
* to segment control, just like elm_segment_control_item_add().
*
* Items created with this function can be deleted with function
- * elm_segment_control_item_del() or elm_segment_control_item_del_at().
+ * elm_object_item_del() or elm_segment_control_item_del_at().
*
* @note @p label set to @c NULL is different from empty string "".
* If an item
@@ -135,24 +135,12 @@ EAPI Elm_Object_Item *elm_segment_control_item_add(Evas_Object *obj, Evas_Object
*
* @see elm_segment_control_item_add()
* @see elm_segment_control_item_count_get()
- * @see elm_segment_control_item_del()
+ * @see elm_object_item_del()
*
* @ingroup SegmentControl
*/
EAPI Elm_Object_Item *elm_segment_control_item_insert_at(Evas_Object *obj, Evas_Object *icon, const char *label, int index);
-/**
- * Remove a segment control item from its parent, deleting it.
- *
- * @param it The item to be removed.
- *
- * Items can be added with elm_segment_control_item_add() or
- * elm_segment_control_item_insert_at().
- *
- * @ingroup SegmentControl
- */
-EAPI void elm_segment_control_item_del(Elm_Object_Item *it);
-
/**
* Remove a segment control item at given index from its parent,
* deleting it.
diff --git a/legacy/elementary/src/lib/elm_slideshow.c b/legacy/elementary/src/lib/elm_slideshow.c
index 7009b831ec..1563c08858 100644
--- a/legacy/elementary/src/lib/elm_slideshow.c
+++ b/legacy/elementary/src/lib/elm_slideshow.c
@@ -348,6 +348,38 @@ _timer_cb(void *data)
return ECORE_CALLBACK_CANCEL;
}
+static void
+_item_del_pre_hook(Elm_Object_Item *it)
+{
+ ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
+
+ Elm_Slideshow_Item *item = (Elm_Slideshow_Item *) it;
+ Widget_Data *wd = elm_widget_data_get(WIDGET(item));
+ if (!wd) return;
+ if (wd->previous == item) wd->previous = NULL;
+ if (wd->current == item)
+ {
+ Eina_List *l = eina_list_data_find_list(wd->items, item);
+ Eina_List *l2 = eina_list_next(l);
+ wd->current = NULL;
+ if (!l2)
+ {
+ l2 = eina_list_prev(l);
+ if (l2)
+ elm_slideshow_show(eina_list_data_get(l2));
+
+ }
+ else
+ elm_slideshow_show(eina_list_data_get(l2));
+ }
+
+ wd->items = eina_list_remove_list(wd->items, item->l);
+ wd->items_built = eina_list_remove_list(wd->items_built, item->l_built);
+
+ if ((VIEW(item)) && (item->itc->func.del))
+ item->itc->func.del(elm_widget_item_data_get(item), VIEW(item));
+}
+
EAPI Evas_Object *
elm_slideshow_add(Evas_Object *parent)
{
@@ -409,7 +441,7 @@ elm_slideshow_item_add(Evas_Object *obj, const Elm_Slideshow_Item_Class *itc, co
if (!wd) return NULL;
item = elm_widget_item_new(obj, Elm_Slideshow_Item);
if (!item) return NULL;
-
+ elm_widget_item_del_pre_hook_set(item, _item_del_pre_hook);
item->itc = itc;
item->l = eina_list_append(item->l, item);
elm_widget_item_data_set(item, data);
@@ -431,7 +463,7 @@ elm_slideshow_item_sorted_insert(Evas_Object *obj, const Elm_Slideshow_Item_Clas
item = elm_widget_item_new(obj, Elm_Slideshow_Item);
if (!item) return NULL;
-
+ elm_widget_item_del_pre_hook_set(item, _item_del_pre_hook);
item->itc = itc;
item->l = eina_list_append(item->l, item);
elm_widget_item_data_set(item, data);
@@ -648,49 +680,16 @@ elm_slideshow_clear(Evas_Object *obj)
{
if (item->itc->func.del)
item->itc->func.del(elm_widget_item_data_get(item), VIEW(item));
- evas_object_del(VIEW(item));
- VIEW(item) = NULL;
}
EINA_LIST_FREE(wd->items, item)
- {
- elm_widget_item_del(item);
- }
+ elm_widget_item_free(item);
}
EAPI void
elm_slideshow_item_del(Elm_Object_Item *it)
{
- ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
-
- Elm_Slideshow_Item *item = (Elm_Slideshow_Item *) it;
- Widget_Data *wd = elm_widget_data_get(WIDGET(item));
- if (!wd) return;
- if (wd->previous == item) wd->previous = NULL;
- if (wd->current == item)
- {
- Eina_List *l = eina_list_data_find_list(wd->items, item);
- Eina_List *l2 = eina_list_next(l);
- wd->current = NULL;
- if (!l2)
- {
- l2 = eina_list_prev(l);
- if (l2)
- elm_slideshow_show(eina_list_data_get(l2));
-
- }
- else
- elm_slideshow_show(eina_list_data_get(l2));
- }
-
- wd->items = eina_list_remove_list(wd->items, item->l);
- wd->items_built = eina_list_remove_list(wd->items_built, item->l_built);
-
- if ((VIEW(item)) && (item->itc->func.del))
- item->itc->func.del(elm_widget_item_data_get(item), VIEW(item));
- if (VIEW(item))
- evas_object_del(VIEW(item));
- free(item);
+ elm_object_item_del(it);
}
EAPI const Eina_List *
diff --git a/legacy/elementary/src/lib/elm_slideshow.h b/legacy/elementary/src/lib/elm_slideshow.h
index 4b94870025..5545b965f3 100644
--- a/legacy/elementary/src/lib/elm_slideshow.h
+++ b/legacy/elementary/src/lib/elm_slideshow.h
@@ -333,7 +333,7 @@ EAPI Eina_Bool elm_slideshow_loop_get(const Evas_Object *obj);
* This removes (and deletes) all items in @p obj, leaving it
* empty.
*
- * @see elm_slideshow_item_del(), to remove just one item.
+ * @see elm_object_item_del(), to remove just one item.
*
* @ingroup Slideshow
*/
@@ -348,7 +348,7 @@ EAPI void elm_slideshow_clear(Evas_Object *obj);
*
* This list is @b not to be modified in any way and must not be
* freed. Use the list members with functions like
- * elm_slideshow_item_del(), elm_slideshow_item_data_get().
+ * elm_object_item_del(), elm_slideshow_item_data_get().
*
* @warning This list is only valid until @p obj object's internal
* items list is changed. It should be fetched again with another
@@ -358,15 +358,6 @@ EAPI void elm_slideshow_clear(Evas_Object *obj);
*/
EAPI const Eina_List *elm_slideshow_items_get(const Evas_Object *obj);
-/**
- * Delete a given item from a slideshow widget.
- *
- * @param it The slideshow item
- *
- * @ingroup Slideshow
- */
-EAPI void elm_slideshow_item_del(Elm_Object_Item *it);
-
/**
* Returns the currently displayed item, in a given slideshow widget
*
diff --git a/legacy/elementary/src/lib/elm_toolbar.c b/legacy/elementary/src/lib/elm_toolbar.c
index e5345480ee..b31285aa72 100644
--- a/legacy/elementary/src/lib/elm_toolbar.c
+++ b/legacy/elementary/src/lib/elm_toolbar.c
@@ -244,7 +244,6 @@ _item_del(Elm_Toolbar_Item *it)
{
Elm_Toolbar_Item_State *it_state;
_item_unselect(it);
- elm_widget_item_pre_notify_del(it);
EINA_LIST_FREE(it->states, it_state)
{
if (it->icon == it_state->icon)
@@ -259,7 +258,6 @@ _item_del(Elm_Toolbar_Item *it)
if (it->icon) evas_object_del(it->icon);
//TODO: See if checking for wd->menu_parent is necessary before deleting menu
if (it->o_menu) evas_object_del(it->o_menu);
- elm_widget_item_del(it);
}
static void
@@ -274,10 +272,14 @@ _del_pre_hook(Evas_Object *obj)
{
next = ELM_TOOLBAR_ITEM_FROM_INLIST(EINA_INLIST_GET(it)->next);
_item_del(it);
+ elm_widget_item_free(it);
it = next;
}
if (wd->more_item)
- _item_del(wd->more_item);
+ {
+ _item_del(wd->more_item);
+ elm_widget_item_free(wd->more_item);
+ }
if (wd->long_timer)
{
ecore_timer_del(wd->long_timer);
@@ -762,6 +764,28 @@ _access_state_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, Elm_Widget_
return NULL;
}
+static void
+_item_del_pre_hook(Elm_Object_Item *it)
+{
+ ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
+
+ Widget_Data *wd;
+ Evas_Object *obj2;
+ Elm_Toolbar_Item *item, *next;
+ item = (Elm_Toolbar_Item *) it;
+
+ wd = elm_widget_data_get(WIDGET(item));
+ if (!wd) return;
+ obj2 = WIDGET(item);
+ next = ELM_TOOLBAR_ITEM_FROM_INLIST(EINA_INLIST_GET(item)->next);
+ wd->items = eina_inlist_remove(wd->items, EINA_INLIST_GET(item));
+ wd->item_count--;
+ if (!next) next = ELM_TOOLBAR_ITEM_FROM_INLIST(wd->items);
+ if (wd->always_select && item->selected && next) _item_select(next);
+ _item_del(item);
+ _theme_hook(obj2);
+}
+
static Elm_Toolbar_Item *
_item_new(Evas_Object *obj, const char *icon, const char *label, Evas_Smart_Cb func, const void *data)
{
@@ -780,6 +804,7 @@ _item_new(Evas_Object *obj, const char *icon, const char *label, Evas_Smart_Cb f
return NULL;
}
+ elm_widget_item_del_pre_hook_set(it, _item_del_pre_hook);
elm_widget_item_disable_hook_set(it, _item_disable_hook);
elm_widget_item_text_set_hook_set(it, _item_text_set_hook);
elm_widget_item_text_get_hook_set(it, _item_text_get_hook);
@@ -1450,23 +1475,7 @@ elm_toolbar_item_icon_file_set(Elm_Object_Item *it, const char *file, const char
EAPI void
elm_toolbar_item_del(Elm_Object_Item *it)
{
- ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
-
- Widget_Data *wd;
- Evas_Object *obj2;
- Elm_Toolbar_Item *item, *next;
- item = (Elm_Toolbar_Item *) it;
-
- wd = elm_widget_data_get(WIDGET(item));
- if (!wd) return;
- obj2 = WIDGET(item);
- next = ELM_TOOLBAR_ITEM_FROM_INLIST(EINA_INLIST_GET(item)->next);
- wd->items = eina_inlist_remove(wd->items, EINA_INLIST_GET(item));
- wd->item_count--;
- if (!next) next = ELM_TOOLBAR_ITEM_FROM_INLIST(wd->items);
- if (wd->always_select && item->selected && next) _item_select(next);
- _item_del(item);
- _theme_hook(obj2);
+ elm_object_item_del(it);
}
EAPI void
@@ -1524,6 +1533,7 @@ elm_toolbar_shrink_mode_set(Evas_Object *obj, Elm_Toolbar_Shrink_Mode shrink_mod
if (wd->more_item)
{
_item_del(wd->more_item);
+ elm_widget_item_free(wd->more_item);
wd->more_item = NULL;
}
diff --git a/legacy/elementary/src/lib/elm_toolbar.h b/legacy/elementary/src/lib/elm_toolbar.h
index e344c43ffe..ff27139248 100644
--- a/legacy/elementary/src/lib/elm_toolbar.h
+++ b/legacy/elementary/src/lib/elm_toolbar.h
@@ -216,7 +216,7 @@ EAPI Eina_Bool elm_toolbar_no_select_mode_get(const Evas_Obje
* be set as @b last item.
*
* Items created with this method can be deleted with
- * elm_toolbar_item_del().
+ * elm_object_item_del().
*
* Associated @p data can be properly freed when item is deleted if a
* callback function is set with elm_object_item_del_cb_set().
@@ -231,7 +231,7 @@ EAPI Eina_Bool elm_toolbar_no_select_mode_get(const Evas_Obje
* If an absolute path is provided it will load it direct from a file.
*
* @see elm_toolbar_item_icon_set()
- * @see elm_toolbar_item_del()
+ * @see elm_object_item_del()
*
* @ingroup Toolbar
*/
@@ -251,7 +251,7 @@ EAPI Elm_Object_Item *elm_toolbar_item_append(Evas_Object *obj, cons
* be set as @b first item.
*
* Items created with this method can be deleted with
- * elm_toolbar_item_del().
+ * elm_object_item_del().
*
* Associated @p data can be properly freed when item is deleted if a
* callback function is set with elm_object_item_del_cb_set().
@@ -266,7 +266,7 @@ EAPI Elm_Object_Item *elm_toolbar_item_append(Evas_Object *obj, cons
* If an absolute path is provided it will load it direct from a file.
*
* @see elm_toolbar_item_icon_set()
- * @see elm_toolbar_item_del()
+ * @see elm_object_item_del()
*
* @ingroup Toolbar
*/
@@ -287,7 +287,7 @@ EAPI Elm_Object_Item *elm_toolbar_item_prepend(Evas_Object *obj, con
* this toolbar will be just before item @p before.
*
* Items created with this method can be deleted with
- * elm_toolbar_item_del().
+ * elm_object_item_del().
*
* Associated @p data can be properly freed when item is deleted if a
* callback function is set with elm_object_item_del_cb_set().
@@ -302,7 +302,7 @@ EAPI Elm_Object_Item *elm_toolbar_item_prepend(Evas_Object *obj, con
* If an absolute path is provided it will load it direct from a file.
*
* @see elm_toolbar_item_icon_set()
- * @see elm_toolbar_item_del()
+ * @see elm_object_item_del()
*
* @ingroup Toolbar
*/
@@ -323,7 +323,7 @@ EAPI Elm_Object_Item *elm_toolbar_item_insert_before(Evas_Object *ob
* this toolbar will be just after item @p after.
*
* Items created with this method can be deleted with
- * elm_toolbar_item_del().
+ * elm_object_item_del().
*
* Associated @p data can be properly freed when item is deleted if a
* callback function is set with elm_object_item_del_cb_set().
@@ -338,7 +338,7 @@ EAPI Elm_Object_Item *elm_toolbar_item_insert_before(Evas_Object *ob
* If an absolute path is provided it will load it direct from a file.
*
* @see elm_toolbar_item_icon_set()
- * @see elm_toolbar_item_del()
+ * @see elm_object_item_del()
*
* @ingroup Toolbar
*/
@@ -586,18 +586,6 @@ EAPI Eina_Bool elm_toolbar_item_icon_memfile_set(Elm_Object_I
*/
EAPI Eina_Bool elm_toolbar_item_icon_file_set(Elm_Object_Item *it, const char *file, const char *key);
-/**
- * Delete them item from the toolbar.
- *
- * @param it The item of toolbar to be deleted.
- *
- * @see elm_toolbar_item_append()
- *
- * @ingroup Toolbar
- */
-EAPI void elm_toolbar_item_del(Elm_Object_Item *it);
-
-
/**
* Set or unset item as a separator.
*
diff --git a/legacy/elementary/src/lib/elm_widget.c b/legacy/elementary/src/lib/elm_widget.c
index 4c3e291e9a..3ed1668e60 100644
--- a/legacy/elementary/src/lib/elm_widget.c
+++ b/legacy/elementary/src/lib/elm_widget.c
@@ -2803,6 +2803,33 @@ _elm_widget_item_new(Evas_Object *widget,
return item;
}
+void
+_elm_widget_item_free(Elm_Widget_Item *item)
+{
+ ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
+
+ if (item->del_func)
+ item->del_func((void *)item->data, item->widget, item);
+
+ if (item->view)
+ evas_object_del(item->view);
+
+ if (item->access)
+ {
+ _elm_access_clear(item->access);
+ free(item->access);
+ item->access = NULL;
+ }
+ if (item->access_info)
+ {
+ eina_stringshare_del(item->access_info);
+ item->access_info = NULL;
+ }
+
+ EINA_MAGIC_SET(item, EINA_MAGIC_NONE);
+ free(item);
+}
+
/**
* @internal
*
@@ -2826,29 +2853,11 @@ _elm_widget_item_del(Elm_Widget_Item *item)
{
ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
- if (item->del_func)
- item->del_func((void *)item->data, item->widget, item);
-
+ //Widget delete callback
if (item->del_pre_func)
item->del_pre_func((Elm_Object_Item *) item);
- if (item->view)
- evas_object_del(item->view);
-
- if (item->access)
- {
- _elm_access_clear(item->access);
- free(item->access);
- item->access = NULL;
- }
- if (item->access_info)
- {
- eina_stringshare_del(item->access_info);
- item->access_info = NULL;
- }
-
- EINA_MAGIC_SET(item, EINA_MAGIC_NONE);
- free(item);
+ _elm_widget_item_free(item);
}
/**
diff --git a/legacy/elementary/src/lib/elm_widget.h b/legacy/elementary/src/lib/elm_widget.h
index aebc725c4f..919a8267b0 100644
--- a/legacy/elementary/src/lib/elm_widget.h
+++ b/legacy/elementary/src/lib/elm_widget.h
@@ -262,10 +262,11 @@ struct _Elm_Widget_Item
Evas_Object *widget;
/**< the base view object */
Evas_Object *view;
- /**< item specific data. used for del callback*/
+ /**< item specific data. used for del callback */
const void *data;
+ /**< user delete callback function */
Evas_Smart_Cb del_func;
- /**< don't expose this callback call */
+ /**< widget delete callback function. don't expose this callback call */
Elm_Widget_Del_Pre_Cb del_pre_func;
Elm_Widget_Content_Set_Cb content_set_func;
@@ -441,6 +442,7 @@ EAPI Evas_Object *elm_widget_content_part_unset(Evas_Object *obj, const char
EAPI void elm_widget_access_info_set(Evas_Object *obj, const char *txt);
EAPI const char *elm_widget_access_info_get(Evas_Object *obj);
EAPI Elm_Widget_Item *_elm_widget_item_new(Evas_Object *parent, size_t alloc_size);
+EAPI void _elm_widget_item_free(Elm_Widget_Item *item);
EAPI void _elm_widget_item_del(Elm_Widget_Item *item);
EAPI void _elm_widget_item_pre_notify_del(Elm_Widget_Item *item);
EAPI void _elm_widget_item_del_cb_set(Elm_Widget_Item *item, Evas_Smart_Cb del_cb);
@@ -491,6 +493,14 @@ EAPI void elm_widget_tree_dot_dump(const Evas_Object *top, FILE *out
*/
#define elm_widget_item_new(parent, type) \
(type *)_elm_widget_item_new((parent), sizeof(type))
+/**
+ * Convenience macro to free widget item, doing casts for you.
+ * @see _elm_widget_item_free()
+ * @param item a valid item.
+ */
+#define elm_widget_item_free(item) \
+ _elm_widget_item_free((Elm_Widget_Item *)item)
+
/**
* Convenience macro to delete widget item, doing casts for you.
* @see _elm_widget_item_del()