diff options
-rw-r--r-- | src/lib/elementary/efl_ui_layout.c | 19 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_layout_base.eo | 1 | ||||
-rw-r--r-- | 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 @@ -1926,6 +1926,16 @@ _efl_ui_layout_base_efl_layout_group_part_exist_get(const Eo *obj, Efl_Ui_Layout } 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) { Efl_Ui_Layout_Data *sd; @@ -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 |