From 23851808bba0a7204aea00f4ea396886a01789da Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 23 Oct 2019 10:27:04 -0400 Subject: [PATCH] elm/genlist: defer recalc when applying a name filter this may be called successively during the same mainloop iteration, so it's important to defer this as much as possible Reviewed-by: Cedric BAIL Differential Revision: https://phab.enlightenment.org/D10524 --- src/lib/elementary/elm_genlist.c | 9 +++++++-- src/lib/elementary/elm_widget_genlist.h | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/lib/elementary/elm_genlist.c b/src/lib/elementary/elm_genlist.c index f54040ac8c..61e91ed046 100644 --- a/src/lib/elementary/elm_genlist.c +++ b/src/lib/elementary/elm_genlist.c @@ -788,6 +788,7 @@ _calc_job(void *data) Evas_Coord minw = -1, minh = 0, y = 0, ow = 0, vw = 0; Evas *e; + sd->need_calc = EINA_FALSE; evas_object_geometry_get(sd->pan_obj, NULL, NULL, &ow, &sd->h); if (sd->mode == ELM_LIST_COMPRESS) elm_interface_scrollable_content_viewport_geometry_get @@ -944,12 +945,14 @@ _elm_genlist_efl_canvas_group_group_calculate(Eo *obj, Elm_Genlist_Data *sd) { itb->must_recalc = EINA_TRUE; } - _calc_job(sd); + sd->need_calc = EINA_TRUE; } minw = vmw; minh = vmh; } else + sd->need_calc = EINA_TRUE; + if (sd->need_calc) _calc_job(sd); if (sd->scr_minw) @@ -7896,6 +7899,7 @@ _item_filtered_get(Elm_Gen_Item *it) if (it->item->block) it->item->block->changed = EINA_TRUE; efl_canvas_group_change(sd->obj); + sd->need_calc = EINA_TRUE; } if (!it->hide) return EINA_TRUE; return EINA_FALSE; @@ -7995,6 +7999,8 @@ _elm_genlist_filter_set(Eo *obj EINA_UNUSED, Elm_Genlist_Data *sd, void *filter_ sd->filter_queue = eina_list_append(sd->filter_queue, it); } itb->changed = EINA_TRUE; + evas_object_smart_changed(obj); + sd->need_calc = EINA_TRUE; } else { @@ -8006,7 +8012,6 @@ _elm_genlist_filter_set(Eo *obj EINA_UNUSED, Elm_Genlist_Data *sd, void *filter_ } } } - _calc_job(sd); sd->queue_filter_enterer = ecore_idle_enterer_add(_item_filter_enterer, sd->obj); diff --git a/src/lib/elementary/elm_widget_genlist.h b/src/lib/elementary/elm_widget_genlist.h index b7ce598390..94b3b8465f 100644 --- a/src/lib/elementary/elm_widget_genlist.h +++ b/src/lib/elementary/elm_widget_genlist.h @@ -205,6 +205,7 @@ struct _Elm_Genlist_Data Eina_Bool tree_effect_animator : 1; Eina_Bool pin_item_top : 1; + Eina_Bool need_calc : 1; /* _calc_job() must be called in group_calc */ }; typedef struct _Item_Block Item_Block;