[Genlist] Highlight item without animation
authorgodlytalias14573465 <godly.talias@samsung.com>
Mon, 30 Dec 2019 13:57:51 +0000 (19:27 +0530)
committerJongmin Lee <jm105.lee@samsung.com>
Mon, 6 Jan 2020 11:27:28 +0000 (20:27 +0900)
Change-Id: If76d3a4d6cdefb456857e6d331f9f5961a60cc77
Signed-off-by: godlytalias14573465 <godly.talias@samsung.com>
src/lib/elementary_tizen/elm_genlist.c

index 56d5e5f..79ce253 100644 (file)
@@ -190,6 +190,9 @@ static const char SIGNAL_ITEM_UNHIGHLIGHTED[] = "elm,state,unhighlighted";
 static const char SIGNAL_FOCUS_BG_SHOW[] = "elm,state,focus_bg,show";
 static const char SIGNAL_FOCUS_BG_HIDE[] = "elm,state,focus_bg,hide";
 //
+// TIZEN_ONLY(20170801) : for fix flickering issue at item update(circle model)
+static const char SIGNAL_ITEM_HIGHLIGHTED_DIRECT[] = "elm,state,highlighted,direct";
+//
 
 static Eina_Bool _key_action_move(Evas_Object *obj, const char *params);
 static Eina_Bool _key_action_select(Evas_Object *obj, const char *params);
@@ -402,6 +405,32 @@ _elm_genlist_pan_elm_pan_pos_get(const Eo *obj EINA_UNUSED, Elm_Genlist_Pan_Data
    if (y) *y = psd->wsd->pan_y;
 }
 
+// TIZEN_ONLY(20170801) - for fix flickering issue at item update(circle model)
+static void
+_send_item_highlighted_signal(Elm_Gen_Item *it, Eina_Bool direct)
+{
+   if (!it || !VIEW(it)) return;
+   if (GL_IT(it)->wsd->comp_y) return;
+
+   if (direct)
+     {
+        const char *highlight_direct = edje_object_data_get(VIEW(it), "highlight_direct");
+
+        if (highlight_direct && !strcmp(highlight_direct, "on"))
+          {
+             edje_object_signal_emit(VIEW(it), SIGNAL_ITEM_HIGHLIGHTED_DIRECT, "elm");
+          }
+        else
+          {
+             edje_object_signal_emit(VIEW(it), SIGNAL_ITEM_HIGHLIGHTED, "elm");
+          }
+     }
+   else
+     {
+        edje_object_signal_emit(VIEW(it), SIGNAL_ITEM_HIGHLIGHTED, "elm");
+     }
+}
+
 // TIZEN_ONLY(20150705): genlist item align feature
 static Elm_Gen_Item *
 _elm_genlist_pos_adjust_xy_item_get(const Evas_Object *obj,
@@ -1593,7 +1622,7 @@ _focus_bg_show(Elm_Gen_Item *it)
      }
 
    //TIZEN_ONLY(20170526) - focus bg size should not exceed viewport size
-   evas_object_geometry_get(sd->pan_obj, NULL, NULL, NULL, &vh);
+   evas_object_geometry_get(GL_IT(it)->wsd->pan_obj, NULL, NULL, NULL, &vh);
    if (rectangle_h > vh)
      rectangle_h = vh;
    //
@@ -1703,8 +1732,9 @@ _item_position(Elm_Gen_Item *it,
                   if ((sd->adjusted_item == target) &&
                       ((sd->adjusted_item != sd->aligned_item) || (sd->unhighlighted)))
                     {
-                       edje_object_signal_emit(VIEW(sd->adjusted_item), SIGNAL_ITEM_HIGHLIGHTED, "elm");
-
+                       // TIZEN_ONLY(20170801) - for fix flickering issue at item update(circle model)
+                       _send_item_highlighted_signal(sd->adjusted_item, EINA_FALSE);
+                       //
                        if (sd->aligned_item && sd->adjusted_item != sd->aligned_item)
                          edje_object_signal_emit(VIEW(sd->aligned_item), SIGNAL_ITEM_UNHIGHLIGHTED, "elm");
                        sd->aligned_item = sd->adjusted_item;
@@ -2203,6 +2233,12 @@ _item_realize(Elm_Gen_Item *it,
         _decorate_item_realize(it);
      }
 
+   // TIZEN_ONLY(20170525) - highlight is realized by panel operation
+   if (sd->aligned_item == it)
+     {
+       _send_item_highlighted_signal(it, EINA_TRUE);
+     }
+   //
    it->realized = EINA_TRUE;
    if (!calc)
      {
@@ -2660,7 +2696,9 @@ _item_block_realize(Item_Block *itb, Eina_Bool force)
 
    if (aligned_item)
      {
-        edje_object_signal_emit(VIEW(aligned_item), SIGNAL_ITEM_HIGHLIGHTED, "elm");
+        // TIZEN_ONLY(20170801) - for fix flickering issue at item update(circle model)
+        _send_item_highlighted_signal(aligned_item, EINA_FALSE);
+        //
         _focus_bg_show(aligned_item);
 
         edje_object_message_signal_process(VIEW(sd->aligned_item));
@@ -6555,8 +6593,10 @@ _item_update(Elm_Gen_Item *it)
    if (it->selected)
      efl_event_callback_legacy_call(WIDGET(it), ELM_GENLIST_EVENT_HIGHLIGHTED, EO_OBJ(it));
 
+   // TIZEN_ONLY(20170801) - for fix flickering issue at item update(circle model)
    if (GL_IT(it)->wsd->aligned_item == it)
-     edje_object_signal_emit(VIEW(it), SIGNAL_ITEM_HIGHLIGHTED, "elm");
+     _send_item_highlighted_signal(it, EINA_TRUE);
+   //
 
    edje_object_message_signal_process(VIEW(it));
 }
@@ -8707,8 +8747,10 @@ _elm_genlist_item_item_class_update(Eo *eo_it EINA_UNUSED, Elm_Gen_Item *it,
    sd->no_cache = EINA_FALSE;
    _item_realize(it, EINA_FALSE);
 
+   // TIZEN_ONLY(20170801) - for fix flickering issue at item update(circle model)
    if (sd->aligned_item == it)
-     edje_object_signal_emit(VIEW(it), SIGNAL_ITEM_HIGHLIGHTED, "elm");
+     _send_item_highlighted_signal(it, EINA_TRUE);
+   //
 
    GL_IT(it)->calc_done = EINA_FALSE;
    GL_IT(it)->block->calc_done = EINA_FALSE;