elementary: make toolbar 'more_item' properly self destruct.

This commit is contained in:
Cedric BAIL 2018-05-07 16:48:10 -07:00
parent 2ce788063a
commit f29e1db94b
2 changed files with 15 additions and 8 deletions

View File

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

View File

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