elc_naviframe: Remove default label when necessary 73/280473/5
authorArtur Świgoń <a.swigon@samsung.com>
Tue, 30 Aug 2022 13:14:22 +0000 (15:14 +0200)
committerArtur Świgoń <a.swigon@samsung.com>
Wed, 12 Oct 2022 09:10:28 +0000 (11:10 +0200)
When using a Naviframe inside of another Naviframe the default label
stack can become corrupted, i.e. the items from both naviframes can get
intermixed (as in the case of wifi-efl-ug), causing navigation issues.
Limiting the default label stack to one item per Naviframe helps solve
this issue.

@tizen_only

Change-Id: I4cebbe76067616d7055021e60e51a472c2f679a2

src/lib/elementary/elc_naviframe.c

index c452fe7..00982c0 100755 (executable)
@@ -2200,13 +2200,20 @@ _item_push_helper(Elm_Naviframe_Item_Data *item)
 
    elm_layout_sizing_eval(obj);
 
-   if (!top_item)
+   //TIZEN_ONLY(20220830): Remove default label when necessary
+   if (top_item)
+     {
+        _elm_win_default_label_obj_remove(VIEW(top_item));
+        // new default label will be registered by _on_item_show_finished()
+     }
+   else
      {
         //TIZEN_ONLY(20170919): Handle default label object
         _elm_win_default_label_obj_append(VIEW(item));
         //
         efl_event_callback_legacy_call(obj, ELM_NAVIFRAME_EVENT_ITEM_ACTIVATED, EO_OBJ(item));
      }
+   //
 }
 
 EAPI Evas_Object *
@@ -2400,6 +2407,9 @@ _elm_naviframe_item_insert_after(Eo *obj, Elm_Naviframe_Data *sd, Elm_Object_Ite
 
    if (top_inserted)
         {
+           //TIZEN_ONLY(20220830): Remove default label when necessary
+           _elm_win_default_label_obj_remove(VIEW(after));
+           //
            //TIZEN_ONLY(20171019): Handle default label object
            _elm_win_default_label_obj_append(VIEW(it));
            if (_elm_atspi_enabled())
@@ -2437,6 +2447,10 @@ _elm_naviframe_item_pop(Eo *obj, Elm_Naviframe_Data *sd)
         if (hobj && efl_isa(hobj, ELM_ACCESS_CLASS)) efl_access_component_highlight_clear(hobj);
      }
 
+   //TIZEN_ONLY(20220830): Remove default label when necessary
+   _elm_win_default_label_obj_remove(VIEW(it));
+   //
+
    evas_object_ref(obj);
    if (it->pop_cb)
      {