From f29e1db94bf091c33c3558a639cae852d9af23b9 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Mon, 7 May 2018 16:48:10 -0700 Subject: [PATCH] elementary: make toolbar 'more_item' properly self destruct. --- src/lib/elementary/elm_toolbar.c | 21 ++++++++++++++------- src/lib/elementary/elm_toolbar_item.eo | 2 +- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/lib/elementary/elm_toolbar.c b/src/lib/elementary/elm_toolbar.c index 36ecff0296..4fd8c2dc3a 100644 --- a/src/lib/elementary/elm_toolbar.c +++ b/src/lib/elementary/elm_toolbar.c @@ -2286,7 +2286,7 @@ _access_state_cb(void *data, Evas_Object *obj EINA_UNUSED) } EOLIAN static void -_elm_toolbar_item_efl_object_destructor(Eo *eo_item, Elm_Toolbar_Item_Data *item) +_elm_toolbar_item_efl_object_invalidate(Eo *eo_item, Elm_Toolbar_Item_Data *item) { Elm_Toolbar_Item_Data *next = NULL; Evas_Object *obj; @@ -2315,7 +2315,7 @@ _elm_toolbar_item_efl_object_destructor(Eo *eo_item, Elm_Toolbar_Item_Data *item if (item != sd->more_item) efl_ui_widget_theme_apply(obj); - efl_destructor(efl_super(eo_item, ELM_TOOLBAR_ITEM_CLASS)); + efl_invalidate(efl_super(eo_item, ELM_TOOLBAR_ITEM_CLASS)); } static void @@ -3347,6 +3347,14 @@ _elm_toolbar_item_separator_get(const Eo *eo_item EINA_UNUSED, Elm_Toolbar_Item_ return it->separator; } +static void +_cleanup_more_item(void *data, const Efl_Event *ev EINA_UNUSED) +{ + Elm_Toolbar_Data *sd = data; + + sd->more_item = NULL; +} + EOLIAN static void _elm_toolbar_shrink_mode_set(Eo *obj, Elm_Toolbar_Data *sd, Elm_Toolbar_Shrink_Mode shrink_mode) { @@ -3359,11 +3367,7 @@ _elm_toolbar_shrink_mode_set(Eo *obj, Elm_Toolbar_Data *sd, Elm_Toolbar_Shrink_M (shrink_mode == ELM_TOOLBAR_SHRINK_SCROLL); elm_interface_scrollable_bounce_allow_set(obj, bounce, EINA_FALSE); - if (sd->more_item) - { - efl_del(EO_OBJ(sd->more_item)); - sd->more_item = NULL; - } + if (sd->more_item) efl_del(EO_OBJ(sd->more_item)); if (shrink_mode == ELM_TOOLBAR_SHRINK_MENU) { @@ -3397,6 +3401,9 @@ _elm_toolbar_shrink_mode_set(Eo *obj, Elm_Toolbar_Data *sd, Elm_Toolbar_Shrink_M elm_interface_scrollable_policy_set (obj, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_OFF); + if (sd->more_item) + efl_event_callback_add(EO_OBJ(sd->more_item), EFL_EVENT_INVALIDATE, _cleanup_more_item, sd); + EINA_INLIST_FOREACH(sd->items, it) _item_shrink_signal_emit(VIEW(it), sd->shrink_mode); diff --git a/src/lib/elementary/elm_toolbar_item.eo b/src/lib/elementary/elm_toolbar_item.eo index ab48bf51df..b5c8ec7aa9 100644 --- a/src/lib/elementary/elm_toolbar_item.eo +++ b/src/lib/elementary/elm_toolbar_item.eo @@ -312,7 +312,7 @@ class Elm.Toolbar_Item(Elm.Widget.Item, Efl.Ui.Focus.Object, Efl.Ui.Legacy) } implements { Efl.Object.constructor; - Efl.Object.destructor; + Efl.Object.invalidate; Elm.Widget.Item.disable; Elm.Widget.Item.disabled { set; } Elm.Widget.Item.item_focus { get; set; }