From faed229440a62b19ab2df3c4324039bcc45c6eda Mon Sep 17 00:00:00 2001 From: Tae-Hwan Kim Date: Tue, 23 Apr 2013 00:41:54 +0900 Subject: [PATCH] [Genlist] When scrolling, do no processe queueing. When many items are appended, it can reduce performance. Change-Id: I9671b2d056d7796b87d974f75633ba6d1049a0e9 --- src/lib/elm_genlist.c | 11 ++++++++++- src/lib/elm_widget_genlist.h | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c index 40216e3..6830782 100644 --- a/src/lib/elm_genlist.c +++ b/src/lib/elm_genlist.c @@ -4045,8 +4045,8 @@ _queue_process(Elm_Genlist_Smart_Data *sd) sd->queue = eina_list_remove_list(sd->queue, sd->queue); it->item->queued = EINA_FALSE; if (_item_process(sd, it)) continue; - t = ecore_time_get(); _item_process_post(sd, it, EINA_TRUE); + t = ecore_time_get(); /* same as eina_inlist_count > 1 */ if (sd->blocks && sd->blocks->next) { @@ -4061,6 +4061,7 @@ _item_idle_enterer(void *data) { Elm_Genlist_Smart_Data *sd = data; + if (sd->scrolling) return ECORE_CALLBACK_RENEW; if (sd->prev_viewport_w == 0) return ECORE_CALLBACK_RENEW; if (_queue_process(sd) > 0) { @@ -4550,9 +4551,11 @@ static void _scroll_animate_start_cb(Evas_Object *obj, void *data __UNUSED__) { + ELM_GENLIST_DATA_GET(obj, sd); #if GENLIST_FX_SUPPORT _elm_genlist_fx_clear(obj, EINA_FALSE); #endif + sd->scrolling = EINA_TRUE; evas_object_smart_callback_call(obj, SIG_SCROLL_ANIM_START, NULL); } @@ -4560,9 +4563,11 @@ static void _scroll_animate_stop_cb(Evas_Object *obj, void *data __UNUSED__) { + ELM_GENLIST_DATA_GET(obj, sd); #if GENLIST_FX_SUPPORT _elm_genlist_fx_clear(obj, EINA_FALSE); #endif + sd->scrolling = EINA_FALSE; evas_object_smart_callback_call(obj, SIG_SCROLL_ANIM_STOP, NULL); } @@ -4570,6 +4575,8 @@ static void _scroll_drag_start_cb(Evas_Object *obj, void *data __UNUSED__) { + ELM_GENLIST_DATA_GET(obj, sd); + sd->scrolling = EINA_TRUE; evas_object_smart_callback_call(obj, SIG_SCROLL_DRAG_START, NULL); } @@ -4577,6 +4584,8 @@ static void _scroll_drag_stop_cb(Evas_Object *obj, void *data __UNUSED__) { + ELM_GENLIST_DATA_GET(obj, sd); + sd->scrolling = EINA_FALSE; evas_object_smart_callback_call(obj, SIG_SCROLL_DRAG_STOP, NULL); } diff --git a/src/lib/elm_widget_genlist.h b/src/lib/elm_widget_genlist.h index 07967d8..3a31e21 100644 --- a/src/lib/elm_widget_genlist.h +++ b/src/lib/elm_widget_genlist.h @@ -296,6 +296,7 @@ struct _Elm_Genlist_Smart_Data Evas_Coord pinch_pan_y, pinch_zoom_h; #endif Eina_Bool sorting : 1; + Eina_Bool scrolling : 1; }; typedef struct _Item_Block Item_Block; -- 2.7.4