From: jae_hyun.cho Date: Mon, 29 Apr 2013 10:33:56 +0000 (+0900) Subject: [naviframe] Fix item deletion in elm_naviframe_item_pop X-Git-Tag: accepted/tizen/20130927.071315^2~391 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=37e048dcaa7531ebd90eb9b3d2bf8da655905ee8;p=profile%2Fmobile%2Felementary.git [naviframe] Fix item deletion in elm_naviframe_item_pop Change-Id: Ibe88fed0810ce52958832365cd587ee051544bb5 --- diff --git a/src/lib/elc_naviframe.c b/src/lib/elc_naviframe.c index 4154cf6..db2cc6e 100644 --- a/src/lib/elc_naviframe.c +++ b/src/lib/elc_naviframe.c @@ -471,6 +471,9 @@ _item_del_pre_hook(Elm_Object_Item *it) nit = (Elm_Naviframe_Item *)it; ELM_NAVIFRAME_DATA_GET(WIDGET(nit), sd); + nit->delete_me = EINA_TRUE; + if (nit->ref > 0) return EINA_FALSE; + if (nit->animator) ecore_animator_del(nit->animator); top = (it == elm_naviframe_top_item_get(WIDGET(nit))); @@ -1792,14 +1795,22 @@ elm_naviframe_item_pop(Evas_Object *obj) it->popping = EINA_TRUE; + evas_object_ref(obj); if (it->pop_cb) { + it->ref++; if (!it->pop_cb(it->pop_data, (Elm_Object_Item *)it)) { + it->ref--; + if (it->delete_me) elm_widget_item_del(it); it->popping = EINA_FALSE; + evas_object_unref(obj); + return NULL; } + it->ref--; } + evas_object_unref(obj); if (sd->preserve) content = it->content; diff --git a/src/lib/elm_widget_naviframe.h b/src/lib/elm_widget_naviframe.h index 12731a8..468db74 100644 --- a/src/lib/elm_widget_naviframe.h +++ b/src/lib/elm_widget_naviframe.h @@ -159,6 +159,8 @@ struct _Elm_Naviframe_Item Eina_Bool title_visible : 1; Eina_Bool unfocusable : 1; Eina_Bool popping : 1; + Eina_Bool delete_me : 1; + int ref; }; typedef struct _Elm_Naviframe_Content_Item_Pair Elm_Naviframe_Content_Item_Pair;