diff --git a/legacy/elementary/src/lib/elc_ctxpopup.c b/legacy/elementary/src/lib/elc_ctxpopup.c index e3b714087a..cf2758d5a8 100644 --- a/legacy/elementary/src/lib/elc_ctxpopup.c +++ b/legacy/elementary/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/legacy/elementary/src/lib/elc_hoversel.c b/legacy/elementary/src/lib/elc_hoversel.c index 7f80fea46b..f5602615ad 100644 --- a/legacy/elementary/src/lib/elc_hoversel.c +++ b/legacy/elementary/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/legacy/elementary/src/lib/elc_multibuttonentry.c b/legacy/elementary/src/lib/elc_multibuttonentry.c index a69adbdfe6..6d1703b081 100644 --- a/legacy/elementary/src/lib/elc_multibuttonentry.c +++ b/legacy/elementary/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/legacy/elementary/src/lib/elc_naviframe.c b/legacy/elementary/src/lib/elc_naviframe.c index 2b4840bab9..abd6cdfcad 100644 --- a/legacy/elementary/src/lib/elc_naviframe.c +++ b/legacy/elementary/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/legacy/elementary/src/lib/elc_popup.c b/legacy/elementary/src/lib/elc_popup.c index 2db91aae81..52f72095f1 100644 --- a/legacy/elementary/src/lib/elc_popup.c +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_ctxpopup_item.eo b/legacy/elementary/src/lib/elm_ctxpopup_item.eo index 957cbbcaff..05b036f341 100644 --- a/legacy/elementary/src/lib/elm_ctxpopup_item.eo +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_diskselector.c b/legacy/elementary/src/lib/elm_diskselector.c index 45d4b39dbe..376884539c 100644 --- a/legacy/elementary/src/lib/elm_diskselector.c +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_diskselector_item.eo b/legacy/elementary/src/lib/elm_diskselector_item.eo index 3df81dabd7..84e63f2424 100644 --- a/legacy/elementary/src/lib/elm_diskselector_item.eo +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_flipselector.c b/legacy/elementary/src/lib/elm_flipselector.c index c45a19eb32..bae9231f01 100644 --- a/legacy/elementary/src/lib/elm_flipselector.c +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_flipselector_item.eo b/legacy/elementary/src/lib/elm_flipselector_item.eo index b9101b353c..431da94253 100644 --- a/legacy/elementary/src/lib/elm_flipselector_item.eo +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_hoversel_item.eo b/legacy/elementary/src/lib/elm_hoversel_item.eo index 729264b11a..97d78fdd1d 100644 --- a/legacy/elementary/src/lib/elm_hoversel_item.eo +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_index.c b/legacy/elementary/src/lib/elm_index.c index c9ac287615..3c9bb24acc 100644 --- a/legacy/elementary/src/lib/elm_index.c +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_index_item.eo b/legacy/elementary/src/lib/elm_index_item.eo index a99a898d3b..fe88f6024f 100644 --- a/legacy/elementary/src/lib/elm_index_item.eo +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_list.c b/legacy/elementary/src/lib/elm_list.c index 3cbf451bc7..8a746a744b 100644 --- a/legacy/elementary/src/lib/elm_list.c +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_menu.c b/legacy/elementary/src/lib/elm_menu.c index e568c68fa5..7bcf352ac7 100644 --- a/legacy/elementary/src/lib/elm_menu.c +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_menu_item.eo b/legacy/elementary/src/lib/elm_menu_item.eo index 92eda75435..68eb136061 100644 --- a/legacy/elementary/src/lib/elm_menu_item.eo +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_multibuttonentry_item.eo b/legacy/elementary/src/lib/elm_multibuttonentry_item.eo index 2e42fc8f06..5f05b0d5c5 100644 --- a/legacy/elementary/src/lib/elm_multibuttonentry_item.eo +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_naviframe_item.eo b/legacy/elementary/src/lib/elm_naviframe_item.eo index e84b5b9418..6090d53ac0 100644 --- a/legacy/elementary/src/lib/elm_naviframe_item.eo +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_popup_item.eo b/legacy/elementary/src/lib/elm_popup_item.eo index cfdc57b5be..bf7ffe3b17 100644 --- a/legacy/elementary/src/lib/elm_popup_item.eo +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_segment_control.c b/legacy/elementary/src/lib/elm_segment_control.c index 801253c41d..99a329f970 100644 --- a/legacy/elementary/src/lib/elm_segment_control.c +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_segment_control_item.eo b/legacy/elementary/src/lib/elm_segment_control_item.eo index 0d4d7f228e..317ef2b442 100644 --- a/legacy/elementary/src/lib/elm_segment_control_item.eo +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_slideshow.c b/legacy/elementary/src/lib/elm_slideshow.c index 0f950f7085..d2a943dbd9 100644 --- a/legacy/elementary/src/lib/elm_slideshow.c +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_slideshow_item.eo b/legacy/elementary/src/lib/elm_slideshow_item.eo index ffe6c59f50..609d60e321 100644 --- a/legacy/elementary/src/lib/elm_slideshow_item.eo +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_toolbar.c b/legacy/elementary/src/lib/elm_toolbar.c index 2a019fc2bd..2bfdeb381b 100644 --- a/legacy/elementary/src/lib/elm_toolbar.c +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_toolbar_item.eo b/legacy/elementary/src/lib/elm_toolbar_item.eo index b3c9105993..9d0e8028a0 100644 --- a/legacy/elementary/src/lib/elm_toolbar_item.eo +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_widget_flipselector.h b/legacy/elementary/src/lib/elm_widget_flipselector.h index b482feffd2..ef2edef2ce 100644 --- a/legacy/elementary/src/lib/elm_widget_flipselector.h +++ b/legacy/elementary/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/legacy/elementary/src/lib/elm_widget_naviframe.h b/legacy/elementary/src/lib/elm_widget_naviframe.h index bcfea5b2e5..684d148636 100644 --- a/legacy/elementary/src/lib/elm_widget_naviframe.h +++ b/legacy/elementary/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. */