Elm : delete some added callback. The callbacks associated to the parent by the hover was not deleted when the parent is deleted
SVN revision: 43102
This commit is contained in:
parent
0b8583f293
commit
d434116d77
|
@ -238,7 +238,7 @@ _parent_del(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||||
{
|
{
|
||||||
Widget_Data *wd = elm_widget_data_get(data);
|
Widget_Data *wd = elm_widget_data_get(data);
|
||||||
|
|
||||||
wd->parent = NULL;
|
elm_hover_parent_set(data, NULL);
|
||||||
_sizing_eval(data);
|
_sizing_eval(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,6 +53,16 @@ static void _item_sizing_eval(Elm_Menu_Item *item);
|
||||||
static void _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
static void _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||||
static void _submenu_hide(Elm_Menu_Item *item);
|
static void _submenu_hide(Elm_Menu_Item *item);
|
||||||
static void _submenu_open(void *data, Evas_Object *obj, const char *emission, const char *source);
|
static void _submenu_open(void *data, Evas_Object *obj, const char *emission, const char *source);
|
||||||
|
static void _parent_resize(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||||
|
|
||||||
|
static void
|
||||||
|
_del_pre_hook(Evas_Object *obj)
|
||||||
|
{
|
||||||
|
Widget_Data *wd = elm_widget_data_get(obj);
|
||||||
|
|
||||||
|
evas_object_event_callback_del(wd->parent, EVAS_CALLBACK_RESIZE, _parent_resize);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_del_hook(Evas_Object *obj)
|
_del_hook(Evas_Object *obj)
|
||||||
|
@ -71,7 +81,7 @@ _del_hook(Evas_Object *obj)
|
||||||
ll = eina_list_append(ll, item->items);
|
ll = eina_list_append(ll, item->items);
|
||||||
if (item->label)
|
if (item->label)
|
||||||
eina_stringshare_del(item->label);
|
eina_stringshare_del(item->label);
|
||||||
if (item->bx)
|
if (item->hv)
|
||||||
{
|
{
|
||||||
evas_object_del(item->hv);
|
evas_object_del(item->hv);
|
||||||
evas_object_del(item->location);
|
evas_object_del(item->location);
|
||||||
|
@ -79,10 +89,15 @@ _del_hook(Evas_Object *obj)
|
||||||
free(item);
|
free(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (wd->hv)
|
||||||
|
{
|
||||||
|
evas_object_del(wd->hv);
|
||||||
|
evas_object_del(wd->location);
|
||||||
|
}
|
||||||
free(wd);
|
free(wd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_theme_hook(Evas_Object *obj)
|
_theme_hook(Evas_Object *obj)
|
||||||
{
|
{
|
||||||
Eina_List *l, *_l, *ll = NULL;
|
Eina_List *l, *_l, *ll = NULL;
|
||||||
|
@ -429,6 +444,7 @@ elm_menu_add(Evas_Object *parent)
|
||||||
elm_widget_type_set(obj, "menu");
|
elm_widget_type_set(obj, "menu");
|
||||||
elm_widget_sub_object_add(parent, obj);
|
elm_widget_sub_object_add(parent, obj);
|
||||||
elm_widget_data_set(obj, wd);
|
elm_widget_data_set(obj, wd);
|
||||||
|
elm_widget_del_hook_set(obj, _del_pre_hook);
|
||||||
elm_widget_del_hook_set(obj, _del_hook);
|
elm_widget_del_hook_set(obj, _del_hook);
|
||||||
elm_widget_theme_hook_set(obj, _theme_hook);
|
elm_widget_theme_hook_set(obj, _theme_hook);
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,21 @@ static void _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *eve
|
||||||
static void _sub_del(void *data, Evas_Object *obj, void *event_info);
|
static void _sub_del(void *data, Evas_Object *obj, void *event_info);
|
||||||
static void _calc(Evas_Object *obj);
|
static void _calc(Evas_Object *obj);
|
||||||
static void _content_resize(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
static void _content_resize(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||||
|
static void _show(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||||
|
static void _hide(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||||
|
static void _resize(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||||
|
|
||||||
|
static void
|
||||||
|
_del_pre_hook(Evas_Object *obj)
|
||||||
|
{
|
||||||
|
Widget_Data *wd = elm_widget_data_get(obj);
|
||||||
|
|
||||||
|
evas_object_event_callback_del(obj, EVAS_CALLBACK_RESIZE, _resize);
|
||||||
|
evas_object_event_callback_del(obj, EVAS_CALLBACK_MOVE, _resize);
|
||||||
|
evas_object_event_callback_del(obj, EVAS_CALLBACK_SHOW, _show);
|
||||||
|
evas_object_event_callback_del(obj, EVAS_CALLBACK_HIDE, _hide);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_del_hook(Evas_Object *obj)
|
_del_hook(Evas_Object *obj)
|
||||||
|
@ -205,6 +220,7 @@ elm_notify_add(Evas_Object *parent)
|
||||||
elm_widget_type_set(obj, "notify");
|
elm_widget_type_set(obj, "notify");
|
||||||
elm_widget_sub_object_add(parent, obj);
|
elm_widget_sub_object_add(parent, obj);
|
||||||
elm_widget_data_set(obj, wd);
|
elm_widget_data_set(obj, wd);
|
||||||
|
elm_widget_del_pre_hook_set(obj, _del_pre_hook);
|
||||||
elm_widget_del_hook_set(obj, _del_hook);
|
elm_widget_del_hook_set(obj, _del_hook);
|
||||||
elm_widget_theme_hook_set(obj, _theme_hook);
|
elm_widget_theme_hook_set(obj, _theme_hook);
|
||||||
|
|
||||||
|
|
|
@ -125,6 +125,19 @@ _item_disable(Elm_Toolbar_Item *it, Eina_Bool disabled)
|
||||||
edje_object_signal_emit(it->base, "elm,state,enabled", "elm");
|
edje_object_signal_emit(it->base, "elm,state,enabled", "elm");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_del_pre_hook(Evas_Object *obj)
|
||||||
|
{
|
||||||
|
Widget_Data *wd = elm_widget_data_get(obj);
|
||||||
|
Elm_Toolbar_Item *it;
|
||||||
|
|
||||||
|
if (!wd) return;
|
||||||
|
EINA_LIST_FREE(wd->items, it)
|
||||||
|
{
|
||||||
|
elm_toolbar_item_menu_set(it, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_del_hook(Evas_Object *obj)
|
_del_hook(Evas_Object *obj)
|
||||||
{
|
{
|
||||||
|
@ -138,6 +151,7 @@ _del_hook(Evas_Object *obj)
|
||||||
if (it->icon) evas_object_del(it->icon);
|
if (it->icon) evas_object_del(it->icon);
|
||||||
evas_object_del(it->base);
|
evas_object_del(it->base);
|
||||||
free(it);
|
free(it);
|
||||||
|
elm_toolbar_item_menu_set(it, 0);
|
||||||
}
|
}
|
||||||
free(wd);
|
free(wd);
|
||||||
}
|
}
|
||||||
|
@ -282,6 +296,7 @@ elm_toolbar_add(Evas_Object *parent)
|
||||||
elm_widget_type_set(obj, "toolbar");
|
elm_widget_type_set(obj, "toolbar");
|
||||||
elm_widget_sub_object_add(parent, obj);
|
elm_widget_sub_object_add(parent, obj);
|
||||||
elm_widget_data_set(obj, wd);
|
elm_widget_data_set(obj, wd);
|
||||||
|
elm_widget_del_pre_hook_set(obj, _del_pre_hook);
|
||||||
elm_widget_del_hook_set(obj, _del_hook);
|
elm_widget_del_hook_set(obj, _del_hook);
|
||||||
elm_widget_theme_hook_set(obj, _theme_hook);
|
elm_widget_theme_hook_set(obj, _theme_hook);
|
||||||
elm_widget_can_focus_set(obj, 0);
|
elm_widget_can_focus_set(obj, 0);
|
||||||
|
@ -539,19 +554,22 @@ elm_toolbar_item_menu_set(Elm_Toolbar_Item *item, Eina_Bool menu)
|
||||||
if (!item) return;
|
if (!item) return;
|
||||||
if (item->menu == menu) return;
|
if (item->menu == menu) return;
|
||||||
item->menu = menu;
|
item->menu = menu;
|
||||||
|
|
||||||
Widget_Data *wd = elm_widget_data_get(item->obj);
|
Widget_Data *wd = elm_widget_data_get(item->obj);
|
||||||
if (!wd) return;
|
if (!wd) return;
|
||||||
|
|
||||||
if(menu)
|
if(menu)
|
||||||
{
|
{
|
||||||
item->o_menu = elm_menu_add(item->base);
|
item->o_menu = elm_menu_add(item->base);
|
||||||
if(wd->menu_parent)
|
if(wd->menu_parent)
|
||||||
elm_menu_parent_set(item->o_menu, wd->menu_parent);
|
elm_menu_parent_set(item->o_menu, wd->menu_parent);
|
||||||
evas_object_event_callback_add(item->o_menu, EVAS_CALLBACK_HIDE, _menu_hide, item);
|
evas_object_event_callback_add(item->o_menu, EVAS_CALLBACK_HIDE, _menu_hide, item);
|
||||||
}
|
}
|
||||||
else
|
else if(item->o_menu)
|
||||||
evas_object_del(item->o_menu);
|
{
|
||||||
|
evas_object_event_callback_del(item->o_menu, EVAS_CALLBACK_HIDE, _menu_hide);
|
||||||
|
evas_object_del(item->o_menu);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI Evas_Object *
|
EAPI Evas_Object *
|
||||||
|
|
Loading…
Reference in New Issue