[naviframe] Add signal for text sliding on genlist title item.
authorhyunseok yang <hs0219.yang@samsung.com>
Fri, 10 Apr 2020 07:05:53 +0000 (16:05 +0900)
committerHosang Kim <hosang12.kim@samsung.com>
Thu, 16 Apr 2020 03:58:14 +0000 (12:58 +0900)
[Model] Tizen5.5
[BinType] AP
[Customer] OPEN
[Issue#] N/A
[Request] N/A
[Problem] Add signal for text sliding on genlist title item.
[Measure] N/A
[Checking Method] N/A
[Team] UIFW
[Developer] hyunseok yang
[Change Type] Commit Propagation

Change-Id: I94fcfb0573f64adfc9a5eb42216545b0f3c2e45a
Signed-off-by: hyunseok yang <hs0219.yang@samsung.com>
src/lib/elementary/elc_naviframe.c [changed mode: 0644->0755]
src/lib/elementary/elm_naviframe_eo.c
src/lib/elementary/elm_widget_naviframe.h [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index 08c8acc..b90179a
@@ -1267,6 +1267,15 @@ _on_item_push_finished(void *data,
 
    if (sd->freeze_events)
      evas_object_freeze_events_set(VIEW(it), EINA_FALSE);
+
+   if (!sd->fully_obscured)
+     {
+        //TIZEN ONLY(26Aug2019): Merged to Stem Branch
+        //evas_object_smart_callback_call(WIDGET(it), "item,hide,internal", VIEW(it));
+        //
+        elm_object_signal_emit(VIEW(it), "elm,state,title_text,sliding,stop", "elm");
+        edje_object_message_signal_process(elm_layout_edje_get(VIEW(it)));
+     }
 }
 
 /* "elm,state,cur,popped"
@@ -1295,6 +1304,15 @@ _on_item_pop_finished(void *data,
      elm_widget_tree_unfocusable_set(VIEW(it), EINA_FALSE);
    sd->popping = eina_list_remove(sd->popping, it);
 
+   if (!sd->fully_obscured)
+     {
+        //TIZEN ONLY(26Aug2019): Merged to Stem Branch
+        //evas_object_smart_callback_call(WIDGET(it), "item,hide,internal", VIEW(it));
+        //
+        elm_object_signal_emit(VIEW(it), "elm,state,title_text,sliding,stop", "elm");
+        edje_object_message_signal_process(elm_layout_edje_get(VIEW(it)));
+     }
+
    efl_del(EO_OBJ(it));
 }
 
@@ -1329,6 +1347,13 @@ _on_item_show_finished(void *data,
 
    it->pushing = EINA_FALSE;
 
+   if (!sd->fully_obscured)
+     {
+        evas_object_smart_callback_call(WIDGET(it), "item,show,internal", VIEW(it));
+        elm_object_signal_emit(VIEW(it), "elm,state,title_text,sliding,start", "elm");
+        edje_object_message_signal_process(elm_layout_edje_get(VIEW(it)));
+     }
+
    //TIZEN_ONLY(20161122): add state_notify api
    if (EO_OBJ(it) == elm_naviframe_top_item_get(WIDGET(it)))
      {
@@ -1455,7 +1480,12 @@ _elm_naviframe_item_efl_object_invalidate(Eo *eo_item, Elm_Naviframe_Item_Data *
         else
           elm_object_signal_emit(VIEW(prev_it), "elm,state,visible", "elm");
         //
-
+        if (!sd->fully_obscured)
+         {
+            evas_object_smart_callback_call(WIDGET(prev_it), "item,show,internal", VIEW(prev_it));
+            elm_object_signal_emit(VIEW(prev_it), "elm,state,title_text,sliding,start", "elm");
+            edje_object_message_signal_process(elm_layout_edje_get(VIEW(prev_it)));
+         }
         //TIZEN_ONLY(20171019): add state_notify api
         if (_elm_atspi_enabled())
           efl_access_object_state_notify(VIEW(prev_it), ACCESS_STATE(EFL_ACCESS_STATE_TYPE_SHOWING)
@@ -1515,6 +1545,7 @@ _item_new(Evas_Object *obj,
      (VIEW(it), EVAS_CALLBACK_CHANGED_SIZE_HINTS,
      _on_item_size_hints_changed, obj);
 
+   evas_object_data_set(VIEW(it), "NaviframeItem", (void *)1);
    elm_object_signal_callback_add
      (VIEW(it), "elm,action,show,finished", "*", _on_item_show_finished, it);
    elm_object_signal_callback_add
@@ -1839,6 +1870,11 @@ _elm_naviframe_efl_canvas_group_group_del(Eo *obj, Elm_Naviframe_Data *sd)
    Elm_Naviframe_Op *nfo;
    Eina_Inlist *l = NULL;
 
+   if (sd->prop_hdl)
+     {
+        ecore_event_handler_del(sd->prop_hdl);
+        sd->prop_hdl = NULL;
+     }
    sd->on_deletion = EINA_TRUE;
    if (sd->stack) l = sd->stack->last;
 
@@ -1880,6 +1916,68 @@ _elm_naviframe_efl_gfx_entity_visible_set(Eo *obj, Elm_Naviframe_Data *sd EINA_U
 }
 
 static Eina_Bool
+_elm_naviframe_visibility_change(void *data, int type EINA_UNUSED, void *event)
+{
+   Ecore_Evas *ee;
+   Ecore_Wl2_Event_Window_Visibility_Change *ev;
+   Elm_Object_Item *eo_item;
+
+   ev = event;
+   ee = ecore_evas_ecore_evas_get(evas_object_evas_get(data));
+   if (!ee) return ECORE_CALLBACK_PASS_ON; /* pass on event */
+   if (ev->win != ecore_evas_window_get(ee)) return ECORE_CALLBACK_PASS_ON;
+
+   ELM_NAVIFRAME_DATA_GET(data, sd);
+
+   if (sd->fully_obscured == ev->fully_obscured)
+     return ECORE_CALLBACK_PASS_ON;
+
+   eo_item = elm_naviframe_top_item_get(data);
+   if (eo_item)
+     {
+        ELM_NAVIFRAME_ITEM_DATA_GET(eo_item, top);
+        if (ev->fully_obscured)
+         {
+            evas_object_smart_callback_call(WIDGET(top), "item,hide,internal", VIEW(top));
+            sd->fully_obscured = ev->fully_obscured;
+            elm_object_signal_emit(VIEW(top), "elm,state,title_text,sliding,stop", "elm");
+            edje_object_message_signal_process(elm_layout_edje_get(VIEW(top)));
+         }
+        else
+          {
+             evas_object_smart_callback_call(WIDGET(top), "item,show,internal", VIEW(top));
+             sd->fully_obscured = ev->fully_obscured;
+             elm_object_signal_emit(VIEW(top), "elm,state,title_text,sliding,start", "elm");
+             edje_object_message_signal_process(elm_layout_edje_get(VIEW(top)));
+          }
+     }
+
+   return ECORE_CALLBACK_PASS_ON;
+}
+
+//MCD_TEMP(03Mar2020): Enable parent set API
+EOLIAN static void
+_elm_naviframe_efl_ui_widget_parent_set(Eo *obj, Elm_Naviframe_Data *pd EINA_UNUSED, Eo *parent)
+//
+{
+   if (!parent) goto super;
+   Evas_Object *top = elm_widget_top_get(parent);
+   Ecore_Wl_Window* win = NULL;
+   if (top)
+      win = elm_win_wl_window_get(top);
+
+   if ((win) && (!elm_win_inlined_image_object_get(top)))
+     {
+        ELM_NAVIFRAME_DATA_GET(obj, sd);
+
+        sd->prop_hdl = ecore_event_handler_add(ECORE_WL2_EVENT_WINDOW_VISIBILITY_CHANGE,
+                             _elm_naviframe_visibility_change, obj);
+     }
+super:
+   efl_ui_widget_parent_set(efl_super(obj, MY_CLASS), parent);
+}
+
+static Eina_Bool
 _key_action_top_item_get(Evas_Object *obj, const char *params EINA_UNUSED)
 {
    Elm_Object_Item *eo_item = NULL;
@@ -2020,6 +2118,9 @@ _item_push_helper(Elm_Naviframe_Item_Data *item)
 
         if (top_item) top_item->pushing = EINA_FALSE;
         item->pushing = EINA_TRUE;
+
+        if (!sd->fully_obscured)
+          evas_object_smart_callback_call(obj, "item,hide,internal", VIEW(top_item));
      }
    else
      {
@@ -2037,6 +2138,13 @@ _item_push_helper(Elm_Naviframe_Item_Data *item)
      {
         if (!_tizen_effect_enabled_get(item))
           elm_object_signal_emit(VIEW(item), "elm,state,visible", "elm");
+
+        if (!sd->fully_obscured)
+          {
+             evas_object_smart_callback_call(WIDGET(item), "item,show,internal", VIEW(item));
+             elm_object_signal_emit(VIEW(item), "elm,state,title_text,sliding,start", "elm");
+             edje_object_message_signal_process(elm_layout_edje_get(VIEW(item)));
+          }
      }
    //
 
@@ -2218,6 +2326,16 @@ _elm_naviframe_item_insert_after(Eo *obj, Elm_Naviframe_Data *sd, Elm_Object_Ite
         if (!_tizen_effect_enabled_get(after))
           elm_object_signal_emit(VIEW(after), "elm,state,invisible", "elm");
         //
+        if (!sd->fully_obscured)
+          {
+             evas_object_smart_callback_call(WIDGET(after), "item,hide,internal", VIEW(after));
+             elm_object_signal_emit(VIEW(after), "elm,state,title_text,sliding,stop", "elm");
+             edje_object_message_signal_process(elm_layout_edje_get(VIEW(after)));
+
+             evas_object_smart_callback_call(WIDGET(it), "item,show,internal", VIEW(it));
+             elm_object_signal_emit(VIEW(it), "elm,state,title_text,sliding,start", "elm");
+             edje_object_message_signal_process(elm_layout_edje_get(VIEW(it)));
+          }
      }
    else
    //TIZEN ONLY(20161208): Support tizen transition
@@ -2303,6 +2421,8 @@ _elm_naviframe_item_pop(Eo *obj, Elm_Naviframe_Data *sd)
          (sd->stack->last->prev, Elm_Naviframe_Item_Data);
 
    sd->stack = eina_inlist_remove(sd->stack, EINA_INLIST_GET(it));
+   if (!sd->fully_obscured)
+     evas_object_smart_callback_call(obj, "item,hide,internal", VIEW(it));
 
    if (prev_it)
      {
index 509cc8d..d2072a8 100755 (executable)
@@ -165,6 +165,7 @@ const Efl_Access_Action_Data *_elm_naviframe_efl_access_widget_action_elm_action
 
 void _elm_naviframe_efl_ui_widget_resize_object_set(Eo *obj, Elm_Naviframe_Data *pd, Efl_Canvas_Object *sobj);
 
+void _elm_naviframe_efl_ui_widget_parent_set(Eo *obj, Elm_Naviframe_Data *pd, Eo *parent);
 
 Efl_Object *_elm_naviframe_efl_part_part_get(const Eo *obj, Elm_Naviframe_Data *pd, const char *name);
 
@@ -229,6 +230,7 @@ _elm_naviframe_class_initializer(Efl_Class *klass)
       EFL_OBJECT_OP_FUNC(efl_layout_signal_emit, _elm_naviframe_efl_layout_signal_signal_emit),
       EFL_OBJECT_OP_FUNC(efl_access_widget_action_elm_actions_get, _elm_naviframe_efl_access_widget_action_elm_actions_get),
       EFL_OBJECT_OP_FUNC(efl_ui_widget_resize_object_set, _elm_naviframe_efl_ui_widget_resize_object_set),
+      EFL_OBJECT_OP_FUNC(efl_ui_widget_parent_set, _elm_naviframe_efl_ui_widget_parent_set),
       EFL_OBJECT_OP_FUNC(efl_part_get, _elm_naviframe_efl_part_part_get),
       EFL_OBJECT_OP_FUNC(efl_ui_widget_screen_reader, _elm_naviframe_efl_ui_widget_screen_reader),
       EFL_OBJECT_OP_FUNC(efl_ui_widget_part_access_object_get, _elm_naviframe_efl_ui_widget_part_access_object_get),
old mode 100644 (file)
new mode 100755 (executable)
index 6e752ec..e675062
@@ -33,6 +33,8 @@ struct _Elm_Naviframe_Data
    Eina_List            *ops;
    Evas_Object          *dummy_edje;
    Evas_Display_Mode     dispmode;
+   Ecore_Event_Handler    *prop_hdl;
+   Eina_Bool              fully_obscured;
 
    Eina_Bool             preserve : 1;
    Eina_Bool             on_deletion : 1;