summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Zaoui <daniel.zaoui@samsung.com>2014-09-17 16:44:05 +0300
committerDaniel Zaoui <daniel.zaoui@samsung.com>2014-11-12 12:03:58 +0200
commit4c0eba6cac277617476822912dc6675c95eae79c (patch)
treeb622207aa5909d21d8e10579edcaec1d61c9aa2f
parenteb3896cfde8f2f47c0b3ebeb1f323c3d3c114575 (diff)
downloadelementary-4c0eba6cac277617476822912dc6675c95eae79c.tar.gz
Object Items: replace most of del_pre functions with destructor.
This change is not simple because Elementary has not been built from the first day to work with Eo. Code had to be adapted to fit the new design. The del_pre that have not been replaced yet can return FALSE and prevent deletion. For these classes, code modification has to be deeper and will be done later.
-rw-r--r--src/lib/elc_ctxpopup.c29
-rw-r--r--src/lib/elc_hoversel.c12
-rw-r--r--src/lib/elc_multibuttonentry.c8
-rw-r--r--src/lib/elc_naviframe.c15
-rw-r--r--src/lib/elc_popup.c8
-rw-r--r--src/lib/elm_ctxpopup_item.eo2
-rw-r--r--src/lib/elm_diskselector.c87
-rw-r--r--src/lib/elm_diskselector_item.eo2
-rw-r--r--src/lib/elm_flipselector.c109
-rw-r--r--src/lib/elm_flipselector_item.eo2
-rw-r--r--src/lib/elm_hoversel_item.eo2
-rw-r--r--src/lib/elm_index.c6
-rw-r--r--src/lib/elm_index_item.eo2
-rw-r--r--src/lib/elm_list.c1
-rw-r--r--src/lib/elm_menu.c12
-rw-r--r--src/lib/elm_menu_item.eo2
-rw-r--r--src/lib/elm_multibuttonentry_item.eo2
-rw-r--r--src/lib/elm_naviframe_item.eo2
-rw-r--r--src/lib/elm_popup_item.eo2
-rw-r--r--src/lib/elm_segment_control.c8
-rw-r--r--src/lib/elm_segment_control_item.eo2
-rw-r--r--src/lib/elm_slideshow.c8
-rw-r--r--src/lib/elm_slideshow_item.eo2
-rw-r--r--src/lib/elm_toolbar.c6
-rw-r--r--src/lib/elm_toolbar_item.eo2
-rw-r--r--src/lib/elm_widget_flipselector.h1
-rw-r--r--src/lib/elm_widget_naviframe.h2
27 files changed, 130 insertions, 206 deletions
diff --git a/src/lib/elc_ctxpopup.c b/src/lib/elc_ctxpopup.c
index e3b714087..cf2758d5a 100644
--- a/src/lib/elc_ctxpopup.c
+++ b/src/lib/elc_ctxpopup.c
@@ -1030,9 +1030,9 @@ _list_del(Elm_Ctxpopup_Data *sd)
ELM_SAFE_FREE(sd->list, evas_object_del);
}
-EOLIAN static Eina_Bool
-_elm_ctxpopup_item_elm_widget_item_del_pre(Eo *eo_ctxpopup_it,
- Elm_Ctxpopup_Item_Data *ctxpopup_it)
+EOLIAN static void
+_elm_ctxpopup_item_eo_base_destructor(Eo *eo_ctxpopup_it,
+ Elm_Ctxpopup_Item_Data *ctxpopup_it)
{
Evas_Object *list;
@@ -1042,22 +1042,19 @@ _elm_ctxpopup_item_elm_widget_item_del_pre(Eo *eo_ctxpopup_it,
list = elm_object_item_widget_get(ctxpopup_it->list_item);
- if (eina_list_count(elm_list_items_get(list)) < 2)
+ if (ctxpopup_it->list_item)
+ eo_unref(ctxpopup_it->list_item);
+ sd->items = eina_list_remove(sd->items, eo_ctxpopup_it);
+ if (list && eina_list_count(elm_list_items_get(list)) < 2)
{
- if (ctxpopup_it->list_item)
- elm_object_item_del(ctxpopup_it->list_item);
- sd->items = eina_list_remove(sd->items, eo_ctxpopup_it);
evas_object_hide(WIDGET(ctxpopup_it));
-
- return EINA_TRUE;
+ }
+ else
+ {
+ if (sd->list_visible) elm_layout_sizing_eval(WIDGET(ctxpopup_it));
}
- if (ctxpopup_it->list_item)
- elm_object_item_del(ctxpopup_it->list_item);
- sd->items = eina_list_remove(sd->items, eo_ctxpopup_it);
- if (sd->list_visible) elm_layout_sizing_eval(WIDGET(ctxpopup_it));
-
- return EINA_TRUE;
+ eo_do_super(eo_ctxpopup_it, ELM_CTXPOPUP_ITEM_CLASS, eo_destructor());
}
EOLIAN static Eina_Bool
@@ -1266,6 +1263,7 @@ _elm_ctxpopup_item_append(Eo *obj, Elm_Ctxpopup_Data *sd, const char *label, Eva
item->list_item =
elm_list_item_append(sd->list, label, icon, NULL, _item_wrap_cb, item);
+ eo_ref(item->list_item);
sd->items = eina_list_append(sd->items, eo_item);
if (sd->visible) elm_layout_sizing_eval(obj);
@@ -1359,6 +1357,7 @@ _elm_ctxpopup_item_prepend(Eo *obj, Elm_Ctxpopup_Data *sd, const char *label, Ev
item->list_item =
elm_list_item_prepend(sd->list, label, icon, NULL, _item_wrap_cb, item);
+ eo_ref(item->list_item);
sd->items = eina_list_prepend(sd->items, eo_item);
if (sd->visible) elm_layout_sizing_eval(obj);
diff --git a/src/lib/elc_hoversel.c b/src/lib/elc_hoversel.c
index 7f80fea46..f5602615a 100644
--- a/src/lib/elc_hoversel.c
+++ b/src/lib/elc_hoversel.c
@@ -269,10 +269,10 @@ _elm_hoversel_item_elm_widget_item_style_get(Eo *eo_it EINA_UNUSED,
return elm_object_style_get(VIEW(it));
}
-EOLIAN static Eina_Bool
-_elm_hoversel_item_elm_widget_item_del_pre(Eo *eo_item EINA_UNUSED, Elm_Hoversel_Item_Data *item)
+EOLIAN static void
+_elm_hoversel_item_eo_base_destructor(Eo *eo_item, Elm_Hoversel_Item_Data *item)
{
- ELM_HOVERSEL_DATA_GET_OR_RETURN_VAL(WIDGET(item), sd, EINA_FALSE);
+ ELM_HOVERSEL_DATA_GET_OR_RETURN(WIDGET(item), sd);
elm_hoversel_hover_end(WIDGET(item));
sd->items = eina_list_remove(sd->items, eo_item);
@@ -280,7 +280,7 @@ _elm_hoversel_item_elm_widget_item_del_pre(Eo *eo_item EINA_UNUSED, Elm_Hoversel
eina_stringshare_del(item->icon_file);
eina_stringshare_del(item->icon_group);
- return EINA_TRUE;
+ eo_do_super(eo_item, ELM_HOVERSEL_ITEM_CLASS, eo_destructor());
}
EOLIAN static void
@@ -304,10 +304,6 @@ _elm_hoversel_evas_object_smart_del(Eo *obj, Elm_Hoversel_Data *sd)
EINA_LIST_FREE(sd->items, eo_item)
{
- ELM_HOVERSEL_ITEM_DATA_GET(eo_item, item);
- eina_stringshare_del(item->label);
- eina_stringshare_del(item->icon_file);
- eina_stringshare_del(item->icon_group);
eo_del(eo_item);
}
elm_hoversel_hover_parent_set(obj, NULL);
diff --git a/src/lib/elc_multibuttonentry.c b/src/lib/elc_multibuttonentry.c
index a69adbdfe..6d1703b08 100644
--- a/src/lib/elc_multibuttonentry.c
+++ b/src/lib/elc_multibuttonentry.c
@@ -586,13 +586,13 @@ _elm_multibuttonentry_item_elm_widget_item_part_text_get(Eo *eo_item EINA_UNUSED
return edje_object_part_text_get(item->button, src_part);
}
-EOLIAN static Eina_Bool
-_elm_multibuttonentry_item_elm_widget_item_del_pre(Eo *eo_it EINA_UNUSED,
- Elm_Multibuttonentry_Item_Data *it EINA_UNUSED)
+EOLIAN static void
+_elm_multibuttonentry_item_eo_base_destructor(Eo *eo_it,
+ Elm_Multibuttonentry_Item_Data *it)
{
_button_item_del(it);
- return EINA_TRUE;
+ eo_do_super(eo_it, ELM_MULTIBUTTONENTRY_ITEM_CLASS, eo_destructor());
}
static void
diff --git a/src/lib/elc_naviframe.c b/src/lib/elc_naviframe.c
index 2b4840bab..abd6cdfca 100644
--- a/src/lib/elc_naviframe.c
+++ b/src/lib/elc_naviframe.c
@@ -192,7 +192,7 @@ _item_free(Elm_Naviframe_Item_Data *it)
if ((sd->preserve) && (!sd->on_deletion))
{
/* so that elm does not delete the contents with the item's
- * view after the del_pre_hook */
+ * view after the destructor */
elm_object_part_content_unset(VIEW(it), CONTENT_PART);
evas_object_event_callback_del
(it->content, EVAS_CALLBACK_DEL, _item_content_del_cb);
@@ -527,8 +527,8 @@ _elm_naviframe_item_elm_widget_item_part_text_get(Eo *nit EINA_UNUSED,
return elm_object_part_text_get(VIEW(it), buf);
}
-EOLIAN static Eina_Bool
-_elm_naviframe_item_elm_widget_item_del_pre(Eo *eo_item, Elm_Naviframe_Item_Data *it)
+EOLIAN static void
+_elm_naviframe_item_eo_base_destructor(Eo *eo_item, Elm_Naviframe_Item_Data *it)
{
Elm_Naviframe_Item_Data *nit = it, *prev_it = NULL;
Eina_Bool top;
@@ -536,7 +536,6 @@ _elm_naviframe_item_elm_widget_item_del_pre(Eo *eo_item, Elm_Naviframe_Item_Data
ELM_NAVIFRAME_DATA_GET(WIDGET(nit), sd);
nit->delete_me = EINA_TRUE;
- if (nit->ref > 0) return EINA_FALSE;
ecore_animator_del(nit->animator);
@@ -569,7 +568,7 @@ _elm_naviframe_item_elm_widget_item_del_pre(Eo *eo_item, Elm_Naviframe_Item_Data
end:
_item_free(nit);
- return EINA_TRUE;
+ eo_do_super(eo_item, ELM_NAVIFRAME_ITEM_CLASS, eo_destructor());
}
static void
@@ -1664,10 +1663,10 @@ _elm_naviframe_item_pop(Eo *obj, Elm_Naviframe_Data *sd)
evas_object_ref(obj);
if (it->pop_cb)
{
- it->ref++;
+ eo_ref(eo_item);
if (!it->pop_cb(it->pop_data, eo_item))
{
- it->ref--;
+ eo_unref(eo_item);
if (it->delete_me)
eo_do(eo_item, elm_wdg_item_del());
else
@@ -1675,7 +1674,7 @@ _elm_naviframe_item_pop(Eo *obj, Elm_Naviframe_Data *sd)
evas_object_unref(obj);
return NULL;
}
- it->ref--;
+ eo_unref(eo_item);
}
evas_object_unref(obj);
diff --git a/src/lib/elc_popup.c b/src/lib/elc_popup.c
index 2db91aae8..52f72095f 100644
--- a/src/lib/elc_popup.c
+++ b/src/lib/elc_popup.c
@@ -766,10 +766,10 @@ _elm_popup_item_elm_widget_item_disable(Eo *eo_it, Elm_Popup_Item_Data *it)
elm_layout_signal_emit(VIEW(it), "elm,state,item,enabled", "elm");
}
-EOLIAN static Eina_Bool
-_elm_popup_item_elm_widget_item_del_pre(Eo *eo_it EINA_UNUSED, Elm_Popup_Item_Data *it)
+EOLIAN static void
+_elm_popup_item_eo_base_destructor(Eo *eo_it, Elm_Popup_Item_Data *it)
{
- ELM_POPUP_ITEM_CHECK_OR_RETURN(it, EINA_FALSE);
+ ELM_POPUP_ITEM_CHECK_OR_RETURN(it);
ELM_POPUP_DATA_GET(WIDGET(it), sd);
evas_object_del(it->icon);
@@ -780,7 +780,7 @@ _elm_popup_item_elm_widget_item_del_pre(Eo *eo_it EINA_UNUSED, Elm_Popup_Item_Da
sd->items = NULL;
_list_del(sd);
}
- return EINA_TRUE;
+ eo_do_super(eo_it, ELM_POPUP_ITEM_CLASS, eo_destructor());
}
EOLIAN static void
diff --git a/src/lib/elm_ctxpopup_item.eo b/src/lib/elm_ctxpopup_item.eo
index 957cbbcaf..05b036f34 100644
--- a/src/lib/elm_ctxpopup_item.eo
+++ b/src/lib/elm_ctxpopup_item.eo
@@ -47,7 +47,7 @@ class Elm_Ctxpopup_Item(Elm_Widget_Item)
}
implements {
Eo.Base.constructor;
- Elm_Widget_Item.del_pre;
+ Eo.Base.destructor;
Elm_Widget_Item.disable;
Elm_Widget_Item.signal_emit;
Elm_Widget_Item.part_text.get;
diff --git a/src/lib/elm_diskselector.c b/src/lib/elm_diskselector.c
index 45d4b39db..376884539 100644
--- a/src/lib/elm_diskselector.c
+++ b/src/lib/elm_diskselector.c
@@ -343,8 +343,8 @@ _sizing_eval(Evas_Object *obj)
_resize_cb(NULL, NULL, obj, NULL);
}
-EOLIAN static Eina_Bool
-_elm_diskselector_item_elm_widget_item_del_pre(Eo *eo_it EINA_UNUSED, Elm_Diskselector_Item_Data *it)
+EOLIAN static void
+_elm_diskselector_item_eo_base_destructor(Eo *eo_it, Elm_Diskselector_Item_Data *it)
{
Elm_Diskselector_Item_Data *item2, *dit;
Eina_List *l;
@@ -360,6 +360,8 @@ _elm_diskselector_item_elm_widget_item_del_pre(Eo *eo_it EINA_UNUSED, Elm_Diskse
sd->r_items = eina_list_remove(sd->r_items, it);
sd->items = eina_list_remove(sd->items, it);
+ sd->under_items = eina_list_remove(sd->under_items, it);
+ sd->over_items = eina_list_remove(sd->over_items, it);
if (sd->selected_item == it)
{
@@ -378,10 +380,10 @@ _elm_diskselector_item_elm_widget_item_del_pre(Eo *eo_it EINA_UNUSED, Elm_Diskse
{
if (!sd->item_count)
{
- evas_object_hide(sd->VIEW(first));
- evas_object_hide(sd->VIEW(second));
- evas_object_hide(sd->VIEW(last));
- evas_object_hide(sd->VIEW(s_last));
+ if (sd->first) evas_object_hide(sd->VIEW(first));
+ if (sd->second) evas_object_hide(sd->VIEW(second));
+ if (sd->last) evas_object_hide(sd->VIEW(last));
+ if (sd->s_last) evas_object_hide(sd->VIEW(s_last));
EINA_LIST_FOREACH(sd->under_items, l, item2)
evas_object_hide(VIEW(item2));
@@ -394,23 +396,30 @@ _elm_diskselector_item_elm_widget_item_del_pre(Eo *eo_it EINA_UNUSED, Elm_Diskse
dit = eina_list_nth(sd->items, 0);
if (dit)
{
- eina_stringshare_replace(&sd->first->label, dit->label);
- edje_object_part_text_escaped_set
- (sd->VIEW(first), "elm.text", sd->first->label);
+ if (sd->first)
+ {
+ eina_stringshare_replace(&sd->first->label, dit->label);
+ edje_object_part_text_escaped_set
+ (sd->VIEW(first), "elm.text", sd->first->label);
+ }
}
dit = eina_list_nth(sd->items, 1);
if (dit)
{
- eina_stringshare_replace(&sd->second->label, dit->label);
- edje_object_part_text_escaped_set
- (sd->VIEW(second), "elm.text", sd->second->label);
+ if (sd->second)
+ {
+ eina_stringshare_replace(&sd->second->label, dit->label);
+ edje_object_part_text_escaped_set
+ (sd->VIEW(second), "elm.text", sd->second->label);
+ }
}
// if more than 3 itmes should be displayed
for (i = 2; i < CEIL(sd->display_item_num); i++)
{
dit = eina_list_nth(sd->items, i);
item2 = eina_list_nth(sd->over_items, i - 2);
+ if (!dit || !item2) continue;
eina_stringshare_replace(&item2->label, dit->label);
edje_object_part_text_escaped_set
(VIEW(item2), "elm.text", item2->label);
@@ -419,23 +428,30 @@ _elm_diskselector_item_elm_widget_item_del_pre(Eo *eo_it EINA_UNUSED, Elm_Diskse
dit = eina_list_nth(sd->items, eina_list_count(sd->items) - 1);
if (dit)
{
- eina_stringshare_replace(&sd->last->label, dit->label);
- edje_object_part_text_escaped_set
- (sd->VIEW(last), "elm.text", sd->last->label);
+ if (sd->last)
+ {
+ eina_stringshare_replace(&sd->last->label, dit->label);
+ edje_object_part_text_escaped_set
+ (sd->VIEW(last), "elm.text", sd->last->label);
+ }
}
dit = eina_list_nth(sd->items, eina_list_count(sd->items) - 2);
if (dit)
{
- eina_stringshare_replace(&sd->s_last->label, dit->label);
- edje_object_part_text_escaped_set
- (sd->VIEW(s_last), "elm.text", sd->s_last->label);
+ if (sd->s_last)
+ {
+ eina_stringshare_replace(&sd->s_last->label, dit->label);
+ edje_object_part_text_escaped_set
+ (sd->VIEW(s_last), "elm.text", sd->s_last->label);
+ }
}
// if more than 3 itmes should be displayed
for (i = 3; i <= CEIL(sd->display_item_num); i++)
{
dit = eina_list_nth(sd->items, sd->item_count - i);
item2 = eina_list_nth(sd->under_items, i - 3);
+ if (!dit || !item2) continue;
eina_stringshare_replace(&item2->label, dit->label);
edje_object_part_text_escaped_set
(VIEW(item2), "elm.text", item2->label);
@@ -449,7 +465,7 @@ _elm_diskselector_item_elm_widget_item_del_pre(Eo *eo_it EINA_UNUSED, Elm_Diskse
_sizing_eval(obj);
- return EINA_TRUE;
+ eo_do_super(eo_it, ELM_DISKSELECTOR_ITEM_CLASS, eo_destructor());
}
EOLIAN static void
@@ -1098,14 +1114,10 @@ _scroll_drag_stop_cb(Evas_Object *obj,
}
static void
-_round_item_del(Elm_Diskselector_Data *sd,
+_round_item_del(Elm_Diskselector_Data *sd EINA_UNUSED,
Elm_Diskselector_Item_Data *it)
{
if (!it) return;
-
- elm_box_unpack(sd->main_box, VIEW(it));
- sd->r_items = eina_list_remove(sd->r_items, it);
- eina_stringshare_del(it->label);
eo_del(EO_OBJ(it));
}
@@ -1318,70 +1330,70 @@ EOLIAN static void
_elm_diskselector_evas_object_smart_del(Eo *obj, Elm_Diskselector_Data *sd)
{
Elm_Diskselector_Item_Data *it;
- Eina_List *l;
+ Eina_List *l, *l2;
Evas_Object *blank;
/* left blank */
- EINA_LIST_FOREACH (sd->left_blanks, l, blank)
+ EINA_LIST_FREE (sd->left_blanks, blank)
evas_object_del(blank);
/* right blank */
- EINA_LIST_FOREACH (sd->right_blanks, l, blank)
+ EINA_LIST_FREE (sd->right_blanks, blank)
evas_object_del(blank);
if (sd->last)
{
- eina_stringshare_del(sd->last->label);
evas_object_del(sd->VIEW(last));
eo_del(EO_OBJ(sd->last));
+ sd->last = NULL;
}
if (sd->s_last)
{
- eina_stringshare_del(sd->s_last->label);
evas_object_del(sd->VIEW(s_last));
eo_del(EO_OBJ(sd->s_last));
+ sd->s_last = NULL;
}
if (sd->second)
{
- eina_stringshare_del(sd->second->label);
evas_object_del(sd->VIEW(second));
eo_del(EO_OBJ(sd->second));
+ sd->second = NULL;
}
if (sd->first)
{
- eina_stringshare_del(sd->first->label);
evas_object_del(sd->VIEW(first));
eo_del(EO_OBJ(sd->first));
+ sd->first = NULL;
}
- EINA_LIST_FOREACH(sd->under_items, l, it)
+ EINA_LIST_FOREACH_SAFE(sd->under_items, l, l2, it)
{
if (it)
{
- eina_stringshare_del(it->label);
evas_object_del(VIEW(it));
eo_del(EO_OBJ(it));
}
}
+ sd->under_items = eina_list_free(sd->under_items);
- EINA_LIST_FOREACH(sd->over_items, l, it)
+ EINA_LIST_FOREACH_SAFE(sd->over_items, l, l2, it)
{
if (it)
{
- eina_stringshare_del(it->label);
evas_object_del(VIEW(it));
eo_del(EO_OBJ(it));
}
}
+ sd->over_items = eina_list_free(sd->over_items);
- EINA_LIST_FREE(sd->items, it)
+ EINA_LIST_FOREACH_SAFE(sd->items, l, l2, it)
{
- _item_del(it);
eo_del(EO_OBJ(it));
}
+ sd->items = eina_list_free(sd->items);
sd->r_items = eina_list_free(sd->r_items);
ELM_SAFE_FREE(sd->scroller_move_idle_enterer, ecore_idle_enterer_del);
@@ -1605,7 +1617,6 @@ _elm_diskselector_clear(Eo *obj, Elm_Diskselector_Data *sd)
sd->selected_item = NULL;
EINA_LIST_FREE(sd->items, it)
{
- _item_del(it);
eo_del(EO_OBJ(it));
}
diff --git a/src/lib/elm_diskselector_item.eo b/src/lib/elm_diskselector_item.eo
index 3df81dabd..84e63f242 100644
--- a/src/lib/elm_diskselector_item.eo
+++ b/src/lib/elm_diskselector_item.eo
@@ -95,7 +95,7 @@ class Elm_Diskselector_Item(Elm_Widget_Item)
}
implements {
Eo.Base.constructor;
- Elm_Widget_Item.del_pre;
+ Eo.Base.destructor;
Elm_Widget_Item.part_text.get;
Elm_Widget_Item.part_text.set;
Elm_Widget_Item.part_content.get;
diff --git a/src/lib/elm_flipselector.c b/src/lib/elm_flipselector.c
index c45a19eb3..bae9231f0 100644
--- a/src/lib/elm_flipselector.c
+++ b/src/lib/elm_flipselector.c
@@ -205,49 +205,6 @@ _sentinel_eval(Elm_Flipselector_Data *sd)
}
}
-/* TODO: create a flag to avoid looping here all times */
-static void
-_flipselector_process_deletions(Elm_Flipselector_Data *sd)
-{
- Eina_List *l;
- Elm_Object_Item *eo_item;
- Eina_Bool skip = EINA_TRUE;
- Eina_Bool sentinel_eval = EINA_FALSE;
-
- sd->walking++; /* avoid nested deletions */
-
- EINA_LIST_FOREACH(sd->items, l, eo_item)
- {
- ELM_FLIPSELECTOR_ITEM_DATA_GET(eo_item, item);
- if (!item->deleted) continue;
-
- if (sd->current == l)
- {
- if (sd->current == sd->sentinel) sentinel_eval = EINA_TRUE;
- sd->current = eina_list_prev(sd->current);
- }
- sd->items = eina_list_remove(sd->items, eo_item);
-
- if (!sd->current) sd->current = sd->items;
-
- eo_do(eo_item, elm_wdg_item_del());
- skip = EINA_FALSE;
-
- if (eina_list_count(sd->items) <= 1)
- elm_layout_signal_emit
- (sd->obj, "elm,state,button,hidden", "elm");
- else
- elm_layout_signal_emit
- (sd->obj, "elm,state,button,visible", "elm");
- }
-
- if (!skip) _update_view(sd->obj);
-
- if (sentinel_eval) _sentinel_eval(sd);
-
- sd->walking--;
-}
-
static inline void
_flipselector_unwalk(Elm_Flipselector_Data *sd)
{
@@ -259,8 +216,6 @@ _flipselector_unwalk(Elm_Flipselector_Data *sd)
sd->walking = 0;
}
if (sd->walking) return;
-
- _flipselector_process_deletions(sd);
}
static void
@@ -275,9 +230,8 @@ _on_item_changed(Elm_Flipselector_Data *sd)
if (item->func)
item->func((void *)WIDGET_ITEM_DATA_GET(EO_OBJ(item)), WIDGET(item), eo_item);
- if (!item->deleted)
- evas_object_smart_callback_call
- (sd->obj, SIG_SELECTED, eo_item);
+ evas_object_smart_callback_call
+ (sd->obj, SIG_SELECTED, eo_item);
}
static void
@@ -296,22 +250,14 @@ _send_msg(Elm_Flipselector_Data *sd,
_on_item_changed(sd);
}
-EOLIAN static Eina_Bool
-_elm_flipselector_item_elm_widget_item_del_pre(Eo *eo_item, Elm_Flipselector_Item_Data *item)
+EOLIAN static void
+_elm_flipselector_item_eo_base_destructor(Eo *eo_item, Elm_Flipselector_Item_Data *item)
{
Elm_Object_Item *eo_item2;
Eina_List *l;
ELM_FLIPSELECTOR_DATA_GET(WIDGET(item), sd);
- if (sd->walking > 0)
- {
- item->deleted = EINA_TRUE;
- return EINA_FALSE;
- }
-
- _flipselector_walk(sd);
-
EINA_LIST_FOREACH(sd->items, l, eo_item2)
{
if (eo_item2 == eo_item)
@@ -333,11 +279,18 @@ _elm_flipselector_item_elm_widget_item_del_pre(Eo *eo_item, Elm_Flipselector_Ite
}
}
+ if (eina_list_count(sd->items) <= 1)
+ elm_layout_signal_emit
+ (sd->obj, "elm,state,button,hidden", "elm");
+ else
+ elm_layout_signal_emit
+ (sd->obj, "elm,state,button,visible", "elm");
+
eina_stringshare_del(item->label);
_sentinel_eval(sd);
- _flipselector_unwalk(sd);
+ _update_view(sd->obj);
- return EINA_TRUE;
+ eo_do_super(eo_item, ELM_FLIPSELECTOR_ITEM_CLASS, eo_destructor());
}
EOLIAN static void
@@ -709,36 +662,13 @@ _elm_flipselector_items_get(Eo *obj EINA_UNUSED, Elm_Flipselector_Data *sd)
EOLIAN static Elm_Object_Item*
_elm_flipselector_first_item_get(Eo *obj EINA_UNUSED, Elm_Flipselector_Data *sd)
{
- Elm_Object_Item *eo_item;
- Eina_List *l;
-
- if (!sd->items) return NULL;
-
- EINA_LIST_FOREACH(sd->items, l, eo_item)
- {
- ELM_FLIPSELECTOR_ITEM_DATA_GET(eo_item, it);
- if (it->deleted) continue;
- return eo_item;
- }
-
- return NULL;
+ return eina_list_data_get(sd->items);
}
EOLIAN static Elm_Object_Item*
_elm_flipselector_last_item_get(Eo *obj EINA_UNUSED, Elm_Flipselector_Data *sd)
{
- Elm_Object_Item *eo_item;
- Eina_List *l;
-
- if (!sd->items) return NULL;
-
- EINA_LIST_REVERSE_FOREACH(sd->items, l, eo_item)
- {
- ELM_FLIPSELECTOR_ITEM_DATA_GET(eo_item, item);
- if (item->deleted) continue;
- return eo_item;
- }
- return NULL;
+ return eina_list_last_data_get(sd->items);
}
EOLIAN static Elm_Object_Item*
@@ -768,12 +698,9 @@ _elm_flipselector_item_selected_set(Eo *eo_item,
EINA_LIST_FOREACH(sd->items, l, _eo_item)
{
ELM_FLIPSELECTOR_ITEM_DATA_GET(_eo_item, _item);
- if (!_item->deleted)
- {
- sd->current = l;
- _send_msg(sd, MSG_FLIP_UP, (char *)_item->label);
- break;
- }
+ sd->current = l;
+ _send_msg(sd, MSG_FLIP_UP, (char *)_item->label);
+ break;
}
_flipselector_unwalk(sd);
return;
diff --git a/src/lib/elm_flipselector_item.eo b/src/lib/elm_flipselector_item.eo
index b9101b353..431da9425 100644
--- a/src/lib/elm_flipselector_item.eo
+++ b/src/lib/elm_flipselector_item.eo
@@ -65,7 +65,7 @@ class Elm_Flipselector_Item(Elm_Widget_Item)
}
implements {
Eo.Base.constructor;
- Elm_Widget_Item.del_pre;
+ Eo.Base.destructor;
Elm_Widget_Item.signal_emit;
Elm_Widget_Item.part_text.get;
Elm_Widget_Item.part_text.set;
diff --git a/src/lib/elm_hoversel_item.eo b/src/lib/elm_hoversel_item.eo
index 729264b11..97d78fdd1 100644
--- a/src/lib/elm_hoversel_item.eo
+++ b/src/lib/elm_hoversel_item.eo
@@ -35,8 +35,8 @@ class Elm_Hoversel_Item(Elm_Widget_Item)
}
implements {
Eo.Base.constructor;
+ Eo.Base.destructor;
Elm_Widget_Item.signal_emit;
- Elm_Widget_Item.del_pre;
Elm_Widget_Item.part_text.get;
Elm_Widget_Item.style.get;
Elm_Widget_Item.style.set;
diff --git a/src/lib/elm_index.c b/src/lib/elm_index.c
index c9ac28761..3c9bb24ac 100644
--- a/src/lib/elm_index.c
+++ b/src/lib/elm_index.c
@@ -424,15 +424,15 @@ _elm_index_elm_layout_sizing_eval(Eo *obj, Elm_Index_Data *_pd EINA_UNUSED)
evas_object_size_hint_max_set(obj, -1, -1);
}
-EOLIAN static Eina_Bool
-_elm_index_item_elm_widget_item_del_pre(Eo *eo_item EINA_UNUSED, Elm_Index_Item_Data *it)
+EOLIAN static void
+_elm_index_item_eo_base_destructor(Eo *eo_item EINA_UNUSED, Elm_Index_Item_Data *it)
{
ELM_INDEX_DATA_GET(WIDGET(it), sd);
_item_free(it);
_index_box_clear(WIDGET(it), sd->level);
- return EINA_TRUE;
+ eo_do_super(eo_item, ELM_INDEX_ITEM_CLASS, eo_destructor());
}
EOLIAN static void
diff --git a/src/lib/elm_index_item.eo b/src/lib/elm_index_item.eo
index a99a898d3..fe88f6024 100644
--- a/src/lib/elm_index_item.eo
+++ b/src/lib/elm_index_item.eo
@@ -40,7 +40,7 @@ class Elm_Index_Item(Elm_Widget_Item)
}
implements {
Eo.Base.constructor;
+ Eo.Base.destructor;
Elm_Widget_Item.access_register;
- Elm_Widget_Item.del_pre;
}
}
diff --git a/src/lib/elm_list.c b/src/lib/elm_list.c
index 3cbf451bc..8a746a744 100644
--- a/src/lib/elm_list.c
+++ b/src/lib/elm_list.c
@@ -2367,6 +2367,7 @@ _elm_list_evas_object_smart_del(Eo *obj, Elm_List_Data *sd)
ELM_LIST_ITEM_DATA_GET(eo_it, it);
/* issuing free because of "locking" item del pre hook */
_elm_list_item_free(it);
+ WIDGET(it) = NULL;
eo_del(EO_OBJ(it));
}
diff --git a/src/lib/elm_menu.c b/src/lib/elm_menu.c
index e568c68fa..7bcf352ac 100644
--- a/src/lib/elm_menu.c
+++ b/src/lib/elm_menu.c
@@ -52,11 +52,6 @@ _item_del(Elm_Object_Item *eo_item)
_item_del(child);
eina_list_free(item->submenu.items);
- eina_stringshare_del(item->label);
- evas_object_del(item->submenu.hv);
- evas_object_del(item->submenu.location);
- eina_stringshare_del(item->icon_str);
-
eo_del(eo_item);
}
@@ -961,13 +956,14 @@ _elm_menu_item_add_helper(Evas_Object *obj,
_sizing_eval(obj);
}
-EOLIAN static Eina_Bool
-_elm_menu_item_elm_widget_item_del_pre(Eo *eo_item, Elm_Menu_Item_Data *item)
+EOLIAN static void
+_elm_menu_item_eo_base_destructor(Eo *eo_item, Elm_Menu_Item_Data *item)
{
ELM_MENU_DATA_GET(WIDGET(item), sd);
elm_menu_item_subitems_clear(eo_item);
eina_stringshare_del(item->label);
+ eina_stringshare_del(item->icon_str);
evas_object_del(item->content);
evas_object_del(item->submenu.hv);
evas_object_del(item->submenu.location);
@@ -981,7 +977,7 @@ _elm_menu_item_elm_widget_item_del_pre(Eo *eo_item, Elm_Menu_Item_Data *item)
if (sd->dbus_menu)
_elm_dbus_menu_item_delete(sd->dbus_menu, item->dbus_idx);
- return EINA_TRUE;
+ eo_do_super(eo_item, ELM_MENU_ITEM_CLASS, eo_destructor());
}
EOLIAN static void
diff --git a/src/lib/elm_menu_item.eo b/src/lib/elm_menu_item.eo
index 92eda7543..68eb13606 100644
--- a/src/lib/elm_menu_item.eo
+++ b/src/lib/elm_menu_item.eo
@@ -122,7 +122,7 @@ class Elm_Menu_Item(Elm_Widget_Item)
}
implements {
Eo.Base.constructor;
- Elm_Widget_Item.del_pre;
+ Eo.Base.destructor;
Elm_Widget_Item.disable;
Elm_Widget_Item.signal_emit;
Elm_Widget_Item.part_text.get;
diff --git a/src/lib/elm_multibuttonentry_item.eo b/src/lib/elm_multibuttonentry_item.eo
index 2e42fc8f0..5f05b0d5c 100644
--- a/src/lib/elm_multibuttonentry_item.eo
+++ b/src/lib/elm_multibuttonentry_item.eo
@@ -46,7 +46,7 @@ class Elm_Multibuttonentry_Item(Elm_Widget_Item)
}
implements {
Eo.Base.constructor;
- Elm_Widget_Item.del_pre;
+ Eo.Base.destructor;
Elm_Widget_Item.signal_emit;
Elm_Widget_Item.part_text.get;
Elm_Widget_Item.part_text.set;
diff --git a/src/lib/elm_naviframe_item.eo b/src/lib/elm_naviframe_item.eo
index e84b5b941..6090d53ac 100644
--- a/src/lib/elm_naviframe_item.eo
+++ b/src/lib/elm_naviframe_item.eo
@@ -99,7 +99,7 @@ class Elm_Naviframe_Item(Elm_Widget_Item)
}
implements {
Eo.Base.constructor;
- Elm_Widget_Item.del_pre;
+ Eo.Base.destructor;
Elm_Widget_Item.signal_emit;
Elm_Widget_Item.part_text.set;
Elm_Widget_Item.part_text.get;
diff --git a/src/lib/elm_popup_item.eo b/src/lib/elm_popup_item.eo
index cfdc57b5b..bf7ffe3b1 100644
--- a/src/lib/elm_popup_item.eo
+++ b/src/lib/elm_popup_item.eo
@@ -3,7 +3,7 @@ class Elm_Popup_Item(Elm_Widget_Item)
eo_prefix: elm_obj_popup_item;
implements {
Eo.Base.constructor;
- Elm_Widget_Item.del_pre;
+ Eo.Base.destructor;
Elm_Widget_Item.disable;
Elm_Widget_Item.signal_emit;
Elm_Widget_Item.part_text.get;
diff --git a/src/lib/elm_segment_control.c b/src/lib/elm_segment_control.c
index 801253c41..99a329f97 100644
--- a/src/lib/elm_segment_control.c
+++ b/src/lib/elm_segment_control.c
@@ -489,15 +489,15 @@ _elm_segment_control_item_elm_widget_item_part_content_get(Eo *eo_item EINA_UNUS
return edje_object_part_swallow_get(VIEW(item), part);
}
-static Eina_Bool
-_elm_segment_control_item_elm_widget_item_del_pre(Eo *eo_item EINA_UNUSED, Elm_Segment_Control_Item_Data *item)
+EOLIAN static void
+_elm_segment_control_item_eo_base_destructor(Eo *eo_item, Elm_Segment_Control_Item_Data *item)
{
ELM_SEGMENT_CONTROL_DATA_GET(WIDGET(item), sd);
_item_free(item);
_update_list(sd);
- return EINA_TRUE;
+ eo_do_super(eo_item, ELM_SEGMENT_CONTROL_ITEM_CLASS, eo_destructor());
}
static char *
@@ -628,8 +628,6 @@ _elm_segment_control_evas_object_smart_del(Eo *obj, Elm_Segment_Control_Data *sd
EINA_LIST_FREE(sd->items, eo_it)
{
- ELM_SEGMENT_ITEM_DATA_GET(eo_it, it);
- _item_free(it);
eo_del(eo_it);
}
diff --git a/src/lib/elm_segment_control_item.eo b/src/lib/elm_segment_control_item.eo
index 0d4d7f228..317ef2b44 100644
--- a/src/lib/elm_segment_control_item.eo
+++ b/src/lib/elm_segment_control_item.eo
@@ -54,11 +54,11 @@ class Elm_Segment_Control_Item(Elm_Widget_Item)
}
implements {
Eo.Base.constructor;
+ Eo.Base.destructor;
Elm_Widget_Item.access_register;
Elm_Widget_Item.part_text.get;
Elm_Widget_Item.part_text.set;
Elm_Widget_Item.part_content.get;
Elm_Widget_Item.part_content.set;
- Elm_Widget_Item.del_pre;
}
}
diff --git a/src/lib/elm_slideshow.c b/src/lib/elm_slideshow.c
index 0f950f708..d2a943dbd 100644
--- a/src/lib/elm_slideshow.c
+++ b/src/lib/elm_slideshow.c
@@ -285,10 +285,10 @@ _timer_cb(void *data)
return ECORE_CALLBACK_CANCEL;
}
-EOLIAN static Eina_Bool
-_elm_slideshow_item_elm_widget_item_del_pre(Eo *eo_item, Elm_Slideshow_Item_Data *item)
+EOLIAN static void
+_elm_slideshow_item_eo_base_destructor(Eo *eo_item, Elm_Slideshow_Item_Data *item)
{
- ELM_SLIDESHOW_DATA_GET_OR_RETURN_VAL(WIDGET(item), sd, EINA_FALSE);
+ ELM_SLIDESHOW_DATA_GET_OR_RETURN(WIDGET(item), sd);
if (sd->previous == item) sd->previous = NULL;
if (sd->current == item)
@@ -312,7 +312,7 @@ _elm_slideshow_item_elm_widget_item_del_pre(Eo *eo_item, Elm_Slideshow_Item_Data
if ((VIEW(item)) && (item->itc->func.del))
item->itc->func.del(elm_object_item_data_get(eo_item), VIEW(item));
- return EINA_TRUE;
+ eo_do_super(eo_item, ELM_SLIDESHOW_ITEM_CLASS, eo_destructor());
}
EOLIAN static void
diff --git a/src/lib/elm_slideshow_item.eo b/src/lib/elm_slideshow_item.eo
index ffe6c59f5..609d60e32 100644
--- a/src/lib/elm_slideshow_item.eo
+++ b/src/lib/elm_slideshow_item.eo
@@ -36,6 +36,6 @@ class Elm_Slideshow_Item(Elm_Widget_Item)
}
implements {
Eo.Base.constructor;
- Elm_Widget_Item.del_pre;
+ Eo.Base.destructor;
}
}
diff --git a/src/lib/elm_toolbar.c b/src/lib/elm_toolbar.c
index 2a019fc2b..2bfdeb381 100644
--- a/src/lib/elm_toolbar.c
+++ b/src/lib/elm_toolbar.c
@@ -2219,8 +2219,8 @@ _access_state_cb(void *data, Evas_Object *obj EINA_UNUSED)
return NULL;
}
-EOLIAN static Eina_Bool
-_elm_toolbar_item_elm_widget_item_del_pre(Eo *eo_item EINA_UNUSED, Elm_Toolbar_Item_Data *item)
+EOLIAN static void
+_elm_toolbar_item_eo_base_destructor(Eo *eo_item, Elm_Toolbar_Item_Data *item)
{
Elm_Toolbar_Item_Data *next = NULL;
Evas_Object *obj;
@@ -2248,7 +2248,7 @@ _elm_toolbar_item_elm_widget_item_del_pre(Eo *eo_item EINA_UNUSED, Elm_Toolbar_I
if (item != sd->more_item)
eo_do(obj, elm_obj_widget_theme_apply());
- return EINA_TRUE;
+ eo_do_super(eo_item, ELM_TOOLBAR_ITEM_CLASS, eo_destructor());
}
static void
diff --git a/src/lib/elm_toolbar_item.eo b/src/lib/elm_toolbar_item.eo
index b3c910599..9d0e8028a 100644
--- a/src/lib/elm_toolbar_item.eo
+++ b/src/lib/elm_toolbar_item.eo
@@ -415,8 +415,8 @@ class Elm_Toolbar_Item(Elm_Widget_Item)
}
implements {
Eo.Base.constructor;
+ Eo.Base.destructor;
Elm_Widget_Item.disable;
- Elm_Widget_Item.del_pre;
Elm_Widget_Item.focus.set;
Elm_Widget_Item.focus.get;
Elm_Widget_Item.part_text.get;
diff --git a/src/lib/elm_widget_flipselector.h b/src/lib/elm_widget_flipselector.h
index b482feffd..ef2edef2c 100644
--- a/src/lib/elm_widget_flipselector.h
+++ b/src/lib/elm_widget_flipselector.h
@@ -48,7 +48,6 @@ struct _Elm_Flipselector_Item_Data
const char *label;
Evas_Smart_Cb func;
- int deleted : 1;
};
#define ELM_FLIPSELECTOR_DATA_GET(o, sd) \
diff --git a/src/lib/elm_widget_naviframe.h b/src/lib/elm_widget_naviframe.h
index bcfea5b2e..684d14863 100644
--- a/src/lib/elm_widget_naviframe.h
+++ b/src/lib/elm_widget_naviframe.h
@@ -60,8 +60,6 @@ struct _Elm_Naviframe_Item_Data
Evas_Coord minw;
Evas_Coord minh;
- int ref;
-
Eina_Bool title_enabled : 1;
Eina_Bool popping : 1; /**< a flag to notify the item is on poping. this flag is set true at the start of item pop. */
Eina_Bool delete_me : 1; /**< a flag to notify the item is on deletion. this flag is set true at the start of item deletion. */