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:
parent
4ad9081c81
commit
39b7069a0b
|
@ -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
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue