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 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; Elm_Toolbar_Item_Data *next = NULL;
Evas_Object *obj; 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) if (item != sd->more_item)
efl_ui_widget_theme_apply(obj); 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 static void
@ -3347,6 +3347,14 @@ _elm_toolbar_item_separator_get(const Eo *eo_item EINA_UNUSED, Elm_Toolbar_Item_
return it->separator; 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 EOLIAN static void
_elm_toolbar_shrink_mode_set(Eo *obj, Elm_Toolbar_Data *sd, Elm_Toolbar_Shrink_Mode shrink_mode) _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); (shrink_mode == ELM_TOOLBAR_SHRINK_SCROLL);
elm_interface_scrollable_bounce_allow_set(obj, bounce, EINA_FALSE); elm_interface_scrollable_bounce_allow_set(obj, bounce, EINA_FALSE);
if (sd->more_item) if (sd->more_item) efl_del(EO_OBJ(sd->more_item));
{
efl_del(EO_OBJ(sd->more_item));
sd->more_item = NULL;
}
if (shrink_mode == ELM_TOOLBAR_SHRINK_MENU) 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 elm_interface_scrollable_policy_set
(obj, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_OFF); (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) EINA_INLIST_FOREACH(sd->items, it)
_item_shrink_signal_emit(VIEW(it), sd->shrink_mode); _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 { implements {
Efl.Object.constructor; Efl.Object.constructor;
Efl.Object.destructor; Efl.Object.invalidate;
Elm.Widget.Item.disable; Elm.Widget.Item.disable;
Elm.Widget.Item.disabled { set; } Elm.Widget.Item.disabled { set; }
Elm.Widget.Item.item_focus { get; set; } Elm.Widget.Item.item_focus { get; set; }