[naviframe] Fix item deletion in elm_naviframe_item_pop
authorjae_hyun.cho <jae_hyun.cho@samsung.com>
Mon, 29 Apr 2013 10:33:56 +0000 (19:33 +0900)
committerSungho Kwak <sungho1.kwak@samsung.com>
Wed, 12 Jun 2013 04:32:06 +0000 (13:32 +0900)
Change-Id: Ibe88fed0810ce52958832365cd587ee051544bb5

src/lib/elc_naviframe.c
src/lib/elm_widget_naviframe.h

index 4154cf6..db2cc6e 100644 (file)
@@ -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;
index 12731a8..468db74 100644 (file)
@@ -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;