cedric pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=8249b87d7ee5ddb867c8eeed9bc568f6d1e687b2
commit 8249b87d7ee5ddb867c8eeed9bc568f6d1e687b2 Author: Cedric BAIL <ced...@osg.samsung.com> Date: Thu Oct 15 16:33:15 2015 -0700 toolbar: delay evaluation of the toolbar size until it stabilize. Elementary is not using much the calculate callback from Evas. This create all sort of problem where it transform O(n) algorithm. Like sizing a toolbar for next frame to O(n^n) by actually sizing the toolbar every time an object is inserted. T2777 --- src/lib/elm_toolbar.c | 16 +++++++++++----- src/lib/elm_toolbar.eo | 1 + 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/lib/elm_toolbar.c b/src/lib/elm_toolbar.c index e93c552..d523947 100644 --- a/src/lib/elm_toolbar.c +++ b/src/lib/elm_toolbar.c @@ -1304,7 +1304,7 @@ _item_theme_hook(Evas_Object *obj, (VIEW(it), EVAS_HINT_FILL, EVAS_HINT_FILL); } _resizing_eval_item(it); - _sizing_eval(obj); + evas_object_smart_need_recalculate_set(obj, EINA_TRUE); } static void @@ -1475,7 +1475,7 @@ _elm_toolbar_elm_widget_theme_apply(Eo *obj, Elm_Toolbar_Data *sd) _item_theme_hook(obj, sd->more_item, scale, sd->icon_size); _elm_toolbar_highlight_in_theme(obj); - _sizing_eval(obj); + evas_object_smart_need_recalculate_set(obj, EINA_TRUE); return EINA_TRUE; } @@ -1659,9 +1659,8 @@ _item_resize(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { - _sizing_eval(data); + evas_object_smart_need_recalculate_set(data, EINA_TRUE); _resizing_eval(data); - } static void @@ -3360,7 +3359,7 @@ _elm_toolbar_shrink_mode_set(Eo *obj, Elm_Toolbar_Data *sd, Elm_Toolbar_Shrink_M eo_do(obj, elm_interface_scrollable_policy_set (ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_OFF)); - _sizing_eval(obj); + evas_object_smart_need_recalculate_set(obj, EINA_TRUE); } EOLIAN static Elm_Toolbar_Shrink_Mode @@ -3958,5 +3957,12 @@ _elm_toolbar_elm_interface_atspi_selection_child_deselect(Eo *obj EINA_UNUSED, E return EINA_FALSE; } +EOLIAN void +_elm_toolbar_evas_object_smart_calculate(Eo *obj, Elm_Toolbar_Data *pd) +{ + _sizing_eval(obj); +} + + #include "elm_toolbar.eo.c" #include "elm_toolbar_item.eo.c" diff --git a/src/lib/elm_toolbar.eo b/src/lib/elm_toolbar.eo index 3069c03..25e6034 100644 --- a/src/lib/elm_toolbar.eo +++ b/src/lib/elm_toolbar.eo @@ -359,6 +359,7 @@ class Elm.Toolbar (Elm.Widget, Elm_Interface_Scrollable, implements { class.constructor; Eo.Base.constructor; + Evas.Object_Smart.calculate; Evas.Object_Smart.move; Evas.Object_Smart.add; Evas.Object_Smart.del; --