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 <mail@marcel-hollerbach.de>
Differential Revision: https://phab.enlightenment.org/D11628
This commit is contained in:
Mike Blumenkrantz 2020-03-31 12:40:25 -04:00 committed by Marcel Hollerbach
parent 4ad9081c81
commit 39b7069a0b
3 changed files with 19 additions and 2 deletions

View File

@ -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

View File

@ -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; }

View File

@ -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