jaehyun pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=17ac58a081a05f6e96b248f80c007e67d1f4ff44

commit 17ac58a081a05f6e96b248f80c007e67d1f4ff44
Author: Jaehyun Cho <jae_hyun....@samsung.com>
Date:   Tue Oct 4 15:50:42 2016 +0900

    naviframe: Add "push,finished" and "pop,finished" smart callbacks.
    
    "push,finished" and "pop,finished" smart callbacks are added to notice
    when push and pop operation is finished.
    
    New smart callback signals are added as follows.
    
    "push,finished,item,activated" : Called when item push is finished and
    void *event_info in smart callback is activated item (new item).
    
    "push,finished,item,deactivated" : Called when item push is finished and
    void *event_info in smart callback is deactivated item (current item).
    
    "pop,finished,item,activated" : Called when item pop is finished and
    void *event_info in smart callback is activated item (previous item).
    
    "pop,finished,item,deactivated" : Called when item pop is finished and
    void *event_info in smart callback is deactivated item (current item).
---
 src/bin/elementary/test_naviframe.c | 36 ++++++++++++++++++++++++++++++++++
 src/lib/elementary/elc_naviframe.c  | 39 +++++++++++++++++++++++++++++++++++--
 src/lib/elementary/elm_naviframe.eo |  4 ++++
 3 files changed, 77 insertions(+), 2 deletions(-)

diff --git a/src/bin/elementary/test_naviframe.c 
b/src/bin/elementary/test_naviframe.c
index 4a8e4e8..25184ff 100644
--- a/src/bin/elementary/test_naviframe.c
+++ b/src/bin/elementary/test_naviframe.c
@@ -45,6 +45,38 @@ _title_clicked(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event
 }
 
 void
+_push_finished_item_activated(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event_info)
+{
+   Elm_Object_Item *it = event_info;
+   printf("Item Push is Finished! Item(%p) becomes Activated! The Title is 
\"%s\"\n",
+          it, elm_object_item_text_get(it));
+}
+
+void
+_push_finished_item_deactivated(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event_info)
+{
+   Elm_Object_Item *it = event_info;
+   printf("Item Push is Finished! Item(%p) becomes Deactivated! The Title is 
\"%s\"\n",
+          it, elm_object_item_text_get(it));
+}
+
+void
+_pop_finished_item_activated(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event_info)
+{
+   Elm_Object_Item *it = event_info;
+   printf("Item Pop is Finished! Item(%p) becomes Activated! The Title is 
\"%s\"\n",
+          it, elm_object_item_text_get(it));
+}
+
+void
+_pop_finished_item_deactivated(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event_info)
+{
+   Elm_Object_Item *it = event_info;
+   printf("Item Pop is Finished! Item(%p) becomes Deactivated! The Title is 
\"%s\"\n",
+          it, elm_object_item_text_get(it));
+}
+
+void
 _title_visible(void *data, Evas_Object *obj EINA_UNUSED, void *event_info 
EINA_UNUSED)
 {
    elm_naviframe_item_title_enabled_set(data,
@@ -280,6 +312,10 @@ test_naviframe(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event
    elm_win_resize_object_add(win, nf);
    evas_object_show(nf);
    evas_object_smart_callback_add(nf, "title,clicked", _title_clicked, 0);
+   evas_object_smart_callback_add(nf, "push,finished,item,activated", 
_push_finished_item_activated, NULL);
+   evas_object_smart_callback_add(nf, "push,finished,item,deactivated", 
_push_finished_item_deactivated, NULL);
+   evas_object_smart_callback_add(nf, "pop,finished,item,activated", 
_pop_finished_item_activated, NULL);
+   evas_object_smart_callback_add(nf, "pop,finished,item,deactivated", 
_pop_finished_item_deactivated, NULL);
 
    btn = elm_button_add(nf);
    evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
diff --git a/src/lib/elementary/elc_naviframe.c 
b/src/lib/elementary/elc_naviframe.c
index 3589434..97c19fb 100644
--- a/src/lib/elementary/elc_naviframe.c
+++ b/src/lib/elementary/elc_naviframe.c
@@ -30,6 +30,10 @@ static const char TITLE_ACCESS_PART[] = "access.title";
 static const char SIG_TRANSITION_FINISHED[] = "transition,finished";
 static const char SIG_TITLE_TRANSITION_FINISHED[] = 
"title,transition,finished";
 static const char SIG_TITLE_CLICKED[] = "title,clicked";
+static const char SIG_PUSH_FINISHED_ITEM_ACTIVATED[] = 
"push,finished,item,activated";
+static const char SIG_PUSH_FINISHED_ITEM_DEACTIVATED[] = 
"push,finished,item,deactivated";
+static const char SIG_POP_FINISHED_ITEM_ACTIVATED[] = 
"pop,finished,item,activated";
+static const char SIG_POP_FINISHED_ITEM_DEACTIVATED[] = 
"pop,finished,item,deactivated";
 
 static const Evas_Smart_Cb_Description _smart_callbacks[] = {
    {SIG_TRANSITION_FINISHED, ""},
@@ -39,6 +43,10 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] = {
    {SIG_WIDGET_ACCESS_CHANGED, ""}, /**< handled by elm_widget */
    {SIG_LAYOUT_FOCUSED, ""}, /**< handled by elm_layout */
    {SIG_LAYOUT_UNFOCUSED, ""}, /**< handled by elm_layout */
+   {SIG_PUSH_FINISHED_ITEM_ACTIVATED, ""},
+   {SIG_PUSH_FINISHED_ITEM_DEACTIVATED, ""},
+   {SIG_POP_FINISHED_ITEM_ACTIVATED, ""},
+   {SIG_POP_FINISHED_ITEM_DEACTIVATED, ""},
    {NULL, NULL}
 };
 
@@ -569,6 +577,7 @@ _elm_naviframe_item_efl_object_destructor(Eo *eo_item, 
Elm_Naviframe_Item_Data *
         if (!prev_it)
           {
              elm_widget_tree_unfocusable_set(VIEW(nit), EINA_TRUE);
+             efl_event_callback_legacy_call(WIDGET(nit), 
ELM_NAVIFRAME_EVENT_POP_FINISHED_ITEM_DEACTIVATED, EO_OBJ(nit));
              goto end;
           }
 
@@ -583,6 +592,9 @@ _elm_naviframe_item_efl_object_destructor(Eo *eo_item, 
Elm_Naviframe_Item_Data *
         _prev_page_focus_recover(prev_it);
 
         elm_object_signal_emit(VIEW(prev_it), "elm,state,visible", "elm");
+
+        efl_event_callback_legacy_call(WIDGET(nit), 
ELM_NAVIFRAME_EVENT_POP_FINISHED_ITEM_ACTIVATED, EO_OBJ(prev_it));
+        efl_event_callback_legacy_call(WIDGET(nit), 
ELM_NAVIFRAME_EVENT_POP_FINISHED_ITEM_DEACTIVATED, EO_OBJ(nit));
      }
 
 end:
@@ -595,7 +607,6 @@ end:
      }
 
    _item_free(nit);
-
    efl_destructor(efl_super(eo_item, ELM_NAVIFRAME_ITEM_CLASS));
 }
 
@@ -1114,6 +1125,8 @@ _on_item_push_finished(void *data,
 
    if (sd->freeze_events)
      evas_object_freeze_events_set(VIEW(it), EINA_FALSE);
+
+   efl_event_callback_legacy_call(WIDGET(it), 
ELM_NAVIFRAME_EVENT_PUSH_FINISHED_ITEM_DEACTIVATED, EO_OBJ(it));
 }
 
 /* "elm,state,cur,popped"
@@ -1132,6 +1145,7 @@ _on_item_pop_finished(void *data,
      elm_widget_tree_unfocusable_set(VIEW(it), EINA_FALSE);
    sd->popping = eina_list_remove(sd->popping, it);
 
+   efl_event_callback_legacy_call(WIDGET(it), 
ELM_NAVIFRAME_EVENT_POP_FINISHED_ITEM_DEACTIVATED, EO_OBJ(it));
    elm_wdg_item_del(EO_OBJ(it));
 }
 
@@ -1155,9 +1169,18 @@ _on_item_show_finished(void *data,
    if (sd->freeze_events)
      evas_object_freeze_events_set(VIEW(it), EINA_FALSE);
 
+   Eina_Bool is_pushed = it->pushing;
    it->pushing = EINA_FALSE;
 
    efl_event_callback_legacy_call(WIDGET(it), 
ELM_NAVIFRAME_EVENT_TRANSITION_FINISHED, EO_OBJ(it));
+
+   if (EO_OBJ(it) == elm_naviframe_top_item_get(WIDGET(it)))
+     {
+        if (is_pushed)
+          efl_event_callback_legacy_call(WIDGET(it), 
ELM_NAVIFRAME_EVENT_PUSH_FINISHED_ITEM_ACTIVATED, EO_OBJ(it));
+        else
+          efl_event_callback_legacy_call(WIDGET(it), 
ELM_NAVIFRAME_EVENT_POP_FINISHED_ITEM_ACTIVATED, EO_OBJ(it));
+     }
 }
 
 static void
@@ -1598,6 +1621,9 @@ _item_push_helper(Elm_Naviframe_Item_Data *item)
      elm_object_signal_emit(VIEW(item), "elm,state,visible", "elm");
 
    elm_layout_sizing_eval(obj);
+
+   if (!top_item)
+     efl_event_callback_legacy_call(obj, 
ELM_NAVIFRAME_EVENT_PUSH_FINISHED_ITEM_ACTIVATED, EO_OBJ(item));
 }
 
 EAPI Evas_Object *
@@ -1712,6 +1738,12 @@ _elm_naviframe_item_insert_after(Eo *obj, 
Elm_Naviframe_Data *sd, Elm_Object_Ite
 
    elm_layout_sizing_eval(obj);
 
+   if (top_inserted)
+     {
+        efl_event_callback_legacy_call(obj, 
ELM_NAVIFRAME_EVENT_PUSH_FINISHED_ITEM_ACTIVATED, eo_item);
+        efl_event_callback_legacy_call(obj, 
ELM_NAVIFRAME_EVENT_PUSH_FINISHED_ITEM_DEACTIVATED, EO_OBJ(after));
+     }
+
    return eo_item;
 }
 
@@ -1802,7 +1834,10 @@ _elm_naviframe_item_pop(Eo *obj, Elm_Naviframe_Data *sd)
         _schedule_deferred(nfo, sd);
      }
    else
-     elm_wdg_item_del(eo_item);
+     {
+        efl_event_callback_legacy_call(obj, 
ELM_NAVIFRAME_EVENT_POP_FINISHED_ITEM_DEACTIVATED, eo_item);
+        elm_wdg_item_del(eo_item);
+     }
 
  on_error:
    return content;
diff --git a/src/lib/elementary/elm_naviframe.eo 
b/src/lib/elementary/elm_naviframe.eo
index ae0dda4..0075e3f 100644
--- a/src/lib/elementary/elm_naviframe.eo
+++ b/src/lib/elementary/elm_naviframe.eo
@@ -164,6 +164,10 @@ class Elm.Naviframe (Elm.Layout, 
Elm.Interface.Atspi_Widget_Action)
       transition,finished;
       title,transition,finished;
       title,clicked;
+      push,finished,item,activated;
+      push,finished,item,deactivated;
+      pop,finished,item,activated;
+      pop,finished,item,deactivated;
    }
 
 }

-- 


Reply via email to