Genlist: Calculate the min size of content before item realize
authorJeeyong Um <conr2d@gmail.com>
Fri, 10 Mar 2017 05:59:47 +0000 (14:59 +0900)
committerJean-Philippe Andre <jp.andre@samsung.com>
Fri, 10 Mar 2017 05:59:48 +0000 (14:59 +0900)
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: cedric, SanghyeonLee, jpeg

Reviewed By: jpeg

Differential Revision: https://phab.enlightenment.org/D4705

src/lib/elementary/elm_genlist.c

index 3197500..aa049c8 100644 (file)
@@ -412,16 +412,17 @@ _item_content_realize(Elm_Gen_Item *it,
              // 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)
+             Evas_Object *resize_obj = NULL;
+             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);
+                  resize_obj = wd->resize_obj;
                }
+             else if (efl_isa(content, EFL_CANVAS_GROUP_CLASS))
+               resize_obj = content;
+
+             if (resize_obj && efl_canvas_group_need_recalculate_get(resize_obj))
+               efl_canvas_group_calculate(content);
 
              if (!edje_object_part_swallow(target, key, content))
                {