[promote API modified to have push animation and on pop item is
authorShilpa Singh <shilpa.singh@samsung.com>
Fri, 21 Oct 2011 02:05:02 +0000 (11:05 +0900)
committerShilpa Singh <shilpa.singh@samsung.com>
Fri, 21 Oct 2011 08:47:43 +0000 (17:47 +0900)
unlinked first]
[elc_naviframe]: 1. item_promote API added 2. Issue fix when app calls
top get immediately after calling pop, top get returns currently
popping item instead of prev item.

Change-Id: Id85722b5a9dbfca88cc3cb97b917a06ca7f1ccb4

src/lib/Elementary.h.in
src/lib/elc_naviframe.c

index 68b96eb..87f0a55 100644 (file)
@@ -8425,6 +8425,17 @@ extern "C" {
     */
    EAPI void                elm_naviframe_item_pop_to(Elm_Object_Item *it) EINA_ARG_NONNULL(1);
    /**
+   * Promote an item already in the naviframe stack to the top of the stack
+   *
+   * @param it The naviframe item
+   *
+   * This will take the indicated item and promote it to the top of the stack
+   * as if it had been pushed there. The item must already be inside the
+   * naviframe stack to work.
+   *
+   */
+   EAPI void                elm_naviframe_item_promote(Elm_Object_Item *it) EINA_ARG_NONNULL(1);
+   /**
     * @brief Delete the given item instantly.
     *
     * @param it The naviframe item
index c1e919a..8e97fa6 100644 (file)
@@ -148,7 +148,10 @@ _del_hook(Evas_Object *obj)
    if (!wd) return;
 
    EINA_INLIST_REVERSE_FOREACH(wd->stack, it)
-     _item_del(it);
+     {
+        wd->stack = eina_inlist_remove(wd->stack, EINA_INLIST_GET(it));
+        _item_del(it);
+     }
    free(wd);
 }
 
@@ -716,8 +719,6 @@ _item_del(Elm_Naviframe_Item *it)
 
    eina_stringshare_del(it->style);
 
-   wd->stack = eina_inlist_remove(wd->stack, EINA_INLIST_GET(it));
-
    elm_widget_item_del(it);
 }
 
@@ -1033,6 +1034,7 @@ elm_naviframe_item_pop(Evas_Object *obj)
    if (wd->stack->last->prev)
      prev_it = EINA_INLIST_CONTAINER_GET(wd->stack->last->prev,
                                          Elm_Naviframe_Item);
+   wd->stack = eina_inlist_remove(wd->stack, EINA_INLIST_GET(it));
    if (prev_it)
      {
         if (wd->freeze_events)
@@ -1071,6 +1073,7 @@ elm_naviframe_item_pop_to(Elm_Object_Item *it)
         if (EINA_INLIST_CONTAINER_GET(l, Elm_Naviframe_Item) ==
             ((Elm_Naviframe_Item *) it)) break;
         prev_l = l->prev;
+        wd->stack = eina_inlist_remove(wd->stack, EINA_INLIST_GET((Elm_Naviframe_Item *) it));
         _item_del(EINA_INLIST_CONTAINER_GET(l, Elm_Naviframe_Item));
         l = prev_l;
      }
@@ -1078,6 +1081,34 @@ elm_naviframe_item_pop_to(Elm_Object_Item *it)
 }
 
 EAPI void
+elm_naviframe_item_promote(Elm_Object_Item *it)
+{
+   ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
+   Elm_Naviframe_Item *navi_it = (Elm_Naviframe_Item *) it;
+   Elm_Naviframe_Item *prev_it = NULL;
+   Widget_Data *wd = elm_widget_data_get(navi_it->base.widget);
+   if (it == elm_naviframe_top_item_get(navi_it->base.widget)) return;
+   wd->stack = eina_inlist_demote(wd->stack, EINA_INLIST_GET(navi_it));
+   prev_it = EINA_INLIST_CONTAINER_GET(wd->stack->last->prev,
+                                         Elm_Naviframe_Item);
+   if (wd->freeze_events)
+     {
+        evas_object_show(wd->rect);
+        //FIXME:
+        evas_object_pass_events_set(wd->base, EINA_TRUE);
+     }
+   edje_object_signal_emit(prev_it->base.view,
+                           "elm,state,cur,pushed",
+                           "elm");
+   evas_object_show(navi_it->base.view);
+   evas_object_raise(navi_it->base.view);
+   edje_object_signal_emit(navi_it->base.view,
+                           "elm,state,new,pushed",
+                           "elm");
+
+}
+
+EAPI void
 elm_naviframe_item_del(Elm_Object_Item *it)
 {
    ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
@@ -1085,6 +1116,7 @@ elm_naviframe_item_del(Elm_Object_Item *it)
    Widget_Data *wd = elm_widget_data_get(navi_it->base.widget);
    if (it == elm_naviframe_top_item_get(navi_it->base.widget))
      {
+        wd->stack = eina_inlist_remove(wd->stack, EINA_INLIST_GET(navi_it));
         _item_del(navi_it);
         navi_it = EINA_INLIST_CONTAINER_GET(wd->stack->last,
                                             Elm_Naviframe_Item);
@@ -1093,7 +1125,10 @@ elm_naviframe_item_del(Elm_Object_Item *it)
         edje_object_signal_emit(navi_it->base.view, "elm,state,visible", "elm");
      }
    else
-     _item_del(navi_it);
+     {
+        wd->stack = eina_inlist_remove(wd->stack, EINA_INLIST_GET(navi_it));
+        _item_del(navi_it);
+     }
 }
 
 EAPI void