bu5hm4n pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=39b7069a0ba7dc2d3df2766c83a609ed8299cda5

commit 39b7069a0ba7dc2d3df2766c83a609ed8299cda5
Author: Mike Blumenkrantz <[email protected]>
Date:   Tue Mar 31 12:40:25 2020 -0400

    efl_ui/layout: correctly batch object changed state when using freeze/thaw
    
    previously this would always queue a recalc when calling thaw even if the
    object hadn't changed
    
    also mimic edje internal behavior with unsetting 'frozen' during force calc
    for possible future handling even though it has no effect presently
    
    Reviewed-by: Marcel Hollerbach <[email protected]>
    Differential Revision: https://phab.enlightenment.org/D11628
---
 src/lib/elementary/efl_ui_layout.c       | 19 +++++++++++++++++--
 src/lib/elementary/efl_ui_layout_base.eo |  1 +
 src/lib/elementary/elm_widget_layout.h   |  1 +
 3 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/src/lib/elementary/efl_ui_layout.c 
b/src/lib/elementary/efl_ui_layout.c
index cc1f8e93a0..209665b1ad 100644
--- a/src/lib/elementary/efl_ui_layout.c
+++ b/src/lib/elementary/efl_ui_layout.c
@@ -1925,6 +1925,16 @@ 
_efl_ui_layout_base_efl_layout_group_part_exist_get(const Eo *obj, Efl_Ui_Layout
    return efl_layout_group_part_exist_get(wd->resize_obj, part);
 }
 
+EOLIAN static void
+_efl_ui_layout_base_efl_canvas_group_group_change(Eo *obj, Efl_Ui_Layout_Data 
*sd)
+{
+   if (sd->frozen)
+     /* cleared in thaw */
+     sd->frozen_changed = EINA_TRUE;
+   else
+     efl_canvas_group_change(efl_super(obj, MY_CLASS));
+}
+
 EOLIAN static void
 _elm_layout_efl_canvas_group_change(Eo *obj, Elm_Layout_Data *ld)
 {
@@ -1991,7 +2001,9 @@ _efl_ui_layout_base_efl_layout_calc_calc_thaw(Eo *obj, 
Efl_Ui_Layout_Data *sd)
    if (!ret)
      {
         sd->frozen = EINA_FALSE;
-        efl_canvas_group_change(obj);
+        if (sd->frozen_changed)
+          efl_canvas_group_change(obj);
+        sd->frozen_changed = EINA_FALSE;
      }
 
    return ret;
@@ -2026,10 +2038,13 @@ 
_efl_ui_layout_base_efl_layout_calc_calc_parts_extends(Eo *obj EINA_UNUSED, Efl_
 }
 
 EOLIAN void
-_efl_ui_layout_base_efl_layout_calc_calc_force(Eo *obj EINA_UNUSED, 
Efl_Ui_Layout_Data *sd EINA_UNUSED)
+_efl_ui_layout_base_efl_layout_calc_calc_force(Eo *obj EINA_UNUSED, 
Efl_Ui_Layout_Data *sd)
 {
+   Eina_Bool prev_frozen = sd->frozen;
    ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
+   sd->frozen = EINA_FALSE;
    efl_layout_calc_force(wd->resize_obj);
+   sd->frozen = prev_frozen;
 }
 
 static Eina_Bool
diff --git a/src/lib/elementary/efl_ui_layout_base.eo 
b/src/lib/elementary/efl_ui_layout_base.eo
index 8cd206c310..91b4f49049 100644
--- a/src/lib/elementary/efl_ui_layout_base.eo
+++ b/src/lib/elementary/efl_ui_layout_base.eo
@@ -110,6 +110,7 @@ abstract Efl.Ui.Layout_Base extends Efl.Ui.Widget 
implements Efl.Container,
       Efl.Object.finalize;
       Efl.Object.invalidate;
       Efl.Canvas.Group.group_calculate;
+      Efl.Canvas.Group.group_change;
       Efl.Layout.Calc.calc_freeze;
       Efl.Layout.Calc.calc_thaw;
       Efl.Layout.Calc.calc_auto_update_hints { get; set; }
diff --git a/src/lib/elementary/elm_widget_layout.h 
b/src/lib/elementary/elm_widget_layout.h
index 69565b6fd9..a024656c7d 100644
--- a/src/lib/elementary/elm_widget_layout.h
+++ b/src/lib/elementary/elm_widget_layout.h
@@ -76,6 +76,7 @@ typedef struct _Efl_Ui_Layout_Data
    Eina_Bool             calc_subobjs : 1; /**< Set to true if group_calc 
should also handle subobjs during manual calc */
    Eina_Bool             cb_theme_changed : 1; /**< if theme,changed event 
subscriber has been added */
    Eina_Bool             needs_theme_apply : 1; /**< if theme has not been 
manually set during construction */
+   Eina_Bool             frozen_changed : 1; /**< only set if object was 
changed while frozen */
 } Efl_Ui_Layout_Data;
 
 typedef struct _Elm_Layout_Data

-- 


Reply via email to