From 93273d5f0bbb289462cb199582d511da309f58a0 Mon Sep 17 00:00:00 2001 From: godlytalias14573465 Date: Mon, 30 Dec 2019 19:27:51 +0530 Subject: [PATCH] [Genlist] Highlight item without animation Change-Id: If76d3a4d6cdefb456857e6d331f9f5961a60cc77 Signed-off-by: godlytalias14573465 --- src/lib/elementary_tizen/elm_genlist.c | 54 ++++++++++++++++++++++++++++++---- 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/src/lib/elementary_tizen/elm_genlist.c b/src/lib/elementary_tizen/elm_genlist.c index 56d5e5f..79ce253 100644 --- a/src/lib/elementary_tizen/elm_genlist.c +++ b/src/lib/elementary_tizen/elm_genlist.c @@ -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; -- 2.7.4