naviframe - merged with opensource
authorChunEon Park <chuneon.park@samsung.com>
Wed, 21 Sep 2011 04:24:00 +0000 (13:24 +0900)
committerChunEon Park <chuneon.park@samsung.com>
Wed, 21 Sep 2011 04:24:00 +0000 (13:24 +0900)
added one more convenient API

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

index 1bc75cd..cd2b022 100644 (file)
@@ -8274,6 +8274,7 @@ extern "C" {
    Eina_Bool         elm_navigationbar_ex_title_object_visible_get(Elm_Navigationbar_ex_Item* item);
 
   /* naviframe */
+  #define ELM_NAVIFRAME_ITEM_CONTENT "elm.swallow.content"
   #define ELM_NAVIFRAME_ITEM_ICON "elm.swallow.icon"
   #define ELM_NAVIFRAME_ITEM_OPTIONHEADER "elm.swallow.optionheader"
   #define ELM_NAVIFRAME_ITEM_TITLE_LABEL "elm.text.title"
@@ -8284,6 +8285,7 @@ extern "C" {
    EAPI Evas_Object        *elm_naviframe_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
    EAPI Elm_Object_Item    *elm_naviframe_item_push(Evas_Object *obj, const char *title_label, Evas_Object *prev_btn, Evas_Object *next_btn, Evas_Object *content, const char *item_style) EINA_ARG_NONNULL(1, 5);
    EAPI Evas_Object        *elm_naviframe_item_pop(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                elm_naviframe_item_pop_to(Elm_Object_Item *it) EINA_ARG_NONNULL(1);
    EAPI void                elm_naviframe_content_preserve_on_pop_set(Evas_Object *obj, Eina_Bool preserve) EINA_ARG_NONNULL(1);
    EAPI Eina_Bool           elm_naviframe_content_preserve_on_pop_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI Elm_Object_Item    *elm_naviframe_top_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
index dc24e21..f76e5ab 100644 (file)
@@ -136,7 +136,7 @@ _del_hook(Evas_Object *obj)
    wd = elm_widget_data_get(obj);
    if (!wd) return;
 
-   EINA_LIST_FOREACH(wd->stack, list, it)
+   EINA_LIST_REVERSE_FOREACH(wd->stack, list, it)
      _item_del(it);
    eina_list_free(wd->stack);
    free(wd);
@@ -618,11 +618,9 @@ _item_del(Elm_Naviframe_Item *it)
    eina_list_free(it->content_list);
    eina_list_free(it->text_list);
 
-   evas_object_del(it->base.view);
-
    wd->stack = eina_list_remove(wd->stack, it);
 
-   free(it);
+   elm_widget_item_del(it);
 }
 
 static void
@@ -761,14 +759,13 @@ elm_naviframe_item_push(Evas_Object *obj, const char *title_label, Evas_Object *
                                    "elm,action,popped,finished",
                                    "",
                                    _popped_finished, it);
-   elm_naviframe_item_style_set(ELM_CAST(it), item_style);
-
-   //title
    edje_object_signal_callback_add(it->base.view,
                                    "elm,action,title,clicked",
-                                   "elm",
+                                   "",
                                    _title_clicked, it);
 
+   elm_naviframe_item_style_set(ELM_CAST(it), item_style);
+
    _item_text_set_hook(ELM_CAST(it), "elm.text.title", title_label);
 
    //title buttons
@@ -843,6 +840,29 @@ elm_naviframe_item_pop(Evas_Object *obj)
 }
 
 EAPI void
+elm_naviframe_item_pop_to(Elm_Object_Item *it)
+{
+   ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
+   Elm_Naviframe_Item *navi_it = ELM_CAST(it);
+   Widget_Data *wd = elm_widget_data_get(navi_it->base.widget);
+   Eina_List *l, *prev_l;
+
+   if (it == elm_naviframe_top_item_get(navi_it->base.widget)) return;
+
+   l = eina_list_last(wd->stack)->prev;
+
+   while(l)
+     {
+        if (l->data == it) break;
+        prev_l = l->prev;
+        _item_del(l->data);
+        wd->stack = eina_list_remove(wd->stack, l);
+        l = prev_l;
+     }
+   elm_naviframe_item_pop(navi_it->base.widget);
+}
+
+EAPI void
 elm_naviframe_content_preserve_on_pop_set(Evas_Object *obj, Eina_Bool preserve)
 {
    ELM_CHECK_WIDTYPE(obj, widtype);