summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@samsung.com>2019-10-23 10:27:04 -0400
committerMarcel Hollerbach <mail@marcel-hollerbach.de>2019-10-29 16:09:22 +0100
commit23851808bba0a7204aea00f4ea396886a01789da (patch)
treebf5fd310ca27cd0b263cde1f54fc07d7825e8858
parent712266fb9ae3e7cd2ea009189b2d94cd4ec333ab (diff)
downloadefl-23851808bba0a7204aea00f4ea396886a01789da.tar.gz
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 <cedric.bail@free.fr> Differential Revision: https://phab.enlightenment.org/D10524
-rw-r--r--src/lib/elementary/elm_genlist.c9
-rw-r--r--src/lib/elementary/elm_widget_genlist.h1
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;