summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/elementary/efl_ui_layout.c19
-rw-r--r--src/lib/elementary/efl_ui_layout_base.eo1
-rw-r--r--src/lib/elementary/elm_widget_layout.h1
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