From 2a514655932a4a6e9b6fa6de89722d7ec71897fe Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Mon, 16 Apr 2018 16:40:19 -0700 Subject: [PATCH] elementary: use Eo ref counting to prevent death of gengrid items. Differential Revision: https://phab.enlightenment.org/D6067 --- src/lib/elementary/elm_gengrid.c | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/src/lib/elementary/elm_gengrid.c b/src/lib/elementary/elm_gengrid.c index f787b4a2c1..8c277675e0 100644 --- a/src/lib/elementary/elm_gengrid.c +++ b/src/lib/elementary/elm_gengrid.c @@ -3601,8 +3601,6 @@ _elm_gengrid_item_del_not_serious(Elm_Gen_Item *it) elm_wdg_item_pre_notify_del(eo_it); it->generation = sd->generation - 1; /* This means that the item is deleted */ - if (it->walking > 0) return; - if (sd->show_it == eo_it) { sd->show_it = NULL; @@ -3637,7 +3635,6 @@ _elm_gengrid_item_del_serious(Elm_Gen_Item *it) sd->items = eina_inlist_remove(sd->items, EINA_INLIST_GET(it)); if (it->tooltip.del_cb) it->tooltip.del_cb((void *)it->tooltip.data, WIDGET(it), it); - sd->walking -= it->walking; ELM_SAFE_FREE(it->long_timer, ecore_timer_del); if (it->group) sd->group_items = eina_list_remove(sd->group_items, it); @@ -3772,12 +3769,6 @@ _elm_gengrid_item_elm_widget_item_disable(Eo *eo_it EINA_UNUSED, Elm_Gen_Item *i EOLIAN static Eina_Bool _elm_gengrid_item_elm_widget_item_del_pre(Eo *eo_it EINA_UNUSED, Elm_Gen_Item *it) { - if (it->walking > 0) - { - _elm_gengrid_item_del_not_serious(it); - return EINA_FALSE; - } - _item_del(it); return EINA_TRUE; } @@ -3876,11 +3867,11 @@ _internal_elm_gengrid_clear(Evas_Object *obj, Elm_Gen_Item *itn = NULL; if (next) itn = ELM_GEN_ITEM_FROM_INLIST(next); - if (itn) itn->walking++; /* prevent early death of subitem */ + if (itn) efl_ref(EO_OBJ(itn)); /* prevent early death of subitem */ if (VIEW(it)) _item_mouse_callbacks_del(it, VIEW(it)); efl_del(EO_OBJ(it)); - if (itn) itn->walking--; + if (itn) efl_unref(EO_OBJ(itn)); } } sd->clear_me = EINA_FALSE; @@ -3928,7 +3919,7 @@ _item_select(Elm_Gen_Item *it) return; evas_object_ref(obj); - it->walking++; + efl_ref(eo_it); sd->walking++; sd->last_selected_item = eo_it; @@ -3941,13 +3932,13 @@ _item_select(Elm_Gen_Item *it) efl_access_state_changed_signal_emit(eo_it, EFL_ACCESS_STATE_SELECTED, EINA_TRUE); } - it->walking--; + efl_ref(eo_it); sd->walking--; if ((sd->clear_me) && (!sd->walking)) _internal_elm_gengrid_clear(WIDGET(it), EINA_TRUE); else { - if ((!it->walking) && (it->generation < sd->generation)) + if (it->generation < sd->generation) { efl_del(eo_it); sd->last_selected_item = NULL;