From 02893c39ba5644ecb9263aeaddb22bfe02b71514 Mon Sep 17 00:00:00 2001 From: Jeeyong Um Date: Fri, 9 Jun 2017 14:34:58 +0900 Subject: [PATCH] Genlist: Calculate the min size of content before item realize Summary: Genlist item doesn't change its size when its content size is changed, but its size is determined in realization. Therefore, deferred calculations for content should be performed immediately before swallowing it by genlist item. Test Plan: make and run attached sample Reviewers: jpeg, SanghyeonLee, cedric Differential Revision: https://phab.enlightenment.org/D4705 --- src/bin/elementary/test_genlist.c | 3 --- src/lib/elementary/elm_genlist.c | 36 +++++++++++++++++++++++++----------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/bin/elementary/test_genlist.c b/src/bin/elementary/test_genlist.c index 9565ece..2e5c093 100644 --- a/src/bin/elementary/test_genlist.c +++ b/src/bin/elementary/test_genlist.c @@ -203,9 +203,6 @@ Evas_Object *gl_content_full_get(void *data EINA_UNUSED, Evas_Object *obj, const elm_box_pack_end(bx, ck); elm_layout_content_set(fr, NULL, bx); - evas_object_size_hint_min_set(fr, - ELM_SCALE_SIZE(100), - ELM_SCALE_SIZE(100)); return fr; } diff --git a/src/lib/elementary/elm_genlist.c b/src/lib/elementary/elm_genlist.c index 5a5436b..35f6bc8 100644 --- a/src/lib/elementary/elm_genlist.c +++ b/src/lib/elementary/elm_genlist.c @@ -364,6 +364,24 @@ _item_text_realize(Elm_Gen_Item *it, } static void +_widget_calculate_recursive(Eo *obj) +{ + Elm_Widget_Smart_Data *pd = NULL; + Eina_List *l; + Evas_Object *child; + + if (!efl_isa(obj, ELM_WIDGET_CLASS)) return; + + pd = efl_data_scope_get(obj, ELM_WIDGET_CLASS); + if (!pd) return; + + EINA_LIST_FOREACH(pd->subobjs, l, child) + _widget_calculate_recursive(child); + + efl_canvas_group_calculate(obj); +} + +static void _item_content_realize(Elm_Gen_Item *it, Evas_Object *target, Eina_List **contents, @@ -409,18 +427,14 @@ _item_content_realize(Elm_Gen_Item *it, if (content != old) { - // FIXME: cause elm_layout sizing eval is delayed by smart calc, - // genlist cannot get actual min size of edje. - // This is workaround code to set min size directly. - if (efl_class_get(content) == ELM_LAYOUT_CLASS) + // FIXME: Genlist item doesn't update its size when the size of + // content is changed, so deferred calculation for content should + // be performed before realization. + if (efl_isa(content, ELM_WIDGET_CLASS)) { - Evas_Coord old_w, old_h, minw = 0, minh = 0; - efl_gfx_size_hint_combined_min_get(content, &old_w, &old_h); - edje_object_size_min_calc(elm_layout_edje_get(content), &minw, &minh); - - if (old_w > minw) minw = old_w; - if (old_h > minh) minw = old_h; - evas_object_size_hint_min_set(content, minw, minh); + ELM_WIDGET_DATA_GET_OR_RETURN(content, wd); + if (efl_canvas_group_need_recalculate_get(wd->resize_obj)) + _widget_calculate_recursive(content); } if (!edje_object_part_swallow(target, key, content)) -- 2.7.4