jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=02893c39ba5644ecb9263aeaddb22bfe02b71514

commit 02893c39ba5644ecb9263aeaddb22bfe02b71514
Author: Jeeyong Um <[email protected]>
Date:   Fri Jun 9 14:34:58 2017 +0900

    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 9565ece864..2e5c093bd7 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 5a5436ba5c..35f6bc8f64 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))

-- 


Reply via email to