forked from enlightenment/efl
fix valgrind reported problems.
GENERAL WARNING: do NOT delete sub-objects (elm_widget_sub_object_add) or resize object (elm_widget_resize_object_set) from del_hook()!! These are deleted automatically before this function is called, thus you might double free. Fixed all occurrences I've spotted with valgrind. Please do not add more :-) SVN revision: 43682
This commit is contained in:
parent
16fec09332
commit
24d6072ecc
|
@ -49,19 +49,12 @@ static void _parent_del(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
|||
|
||||
static void
|
||||
_del_pre_hook(Evas_Object *obj)
|
||||
{
|
||||
elm_hoversel_hover_end(obj);
|
||||
elm_hoversel_hover_parent_set(obj, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_del_hook(Evas_Object *obj)
|
||||
{
|
||||
Elm_Hoversel_Item *it;
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
|
||||
if (!wd) return;
|
||||
elm_hoversel_hover_end(obj);
|
||||
elm_hoversel_hover_parent_set(obj, NULL);
|
||||
EINA_LIST_FREE(wd->items, it)
|
||||
{
|
||||
if (it->del_cb) it->del_cb((void *)it->data, it->obj, it);
|
||||
|
@ -70,6 +63,12 @@ _del_hook(Evas_Object *obj)
|
|||
eina_stringshare_del(it->icon_group);
|
||||
free(it);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_del_hook(Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
free(wd);
|
||||
}
|
||||
|
||||
|
|
|
@ -37,14 +37,13 @@ _del_pre_hook(Evas_Object *obj)
|
|||
|
||||
evas_object_event_callback_del_full
|
||||
(wd->box, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj);
|
||||
evas_object_box_remove_all(wd->box, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
_del_hook(Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
evas_object_box_remove_all(wd->box, 0);
|
||||
evas_object_del(wd->box);
|
||||
free(wd);
|
||||
}
|
||||
|
||||
|
|
|
@ -335,14 +335,20 @@ _del_hook(Evas_Object *obj)
|
|||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
|
||||
elm_genlist_clear(obj);
|
||||
evas_object_del(wd->pan_smart);
|
||||
wd->pan_smart = NULL;
|
||||
if (wd->calc_job) ecore_job_del(wd->calc_job);
|
||||
if (wd->update_job) ecore_job_del(wd->update_job);
|
||||
free(wd);
|
||||
}
|
||||
|
||||
static void
|
||||
_del_pre_hook(Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
evas_object_del(wd->pan_smart);
|
||||
wd->pan_smart = NULL;
|
||||
elm_genlist_clear(obj);
|
||||
}
|
||||
|
||||
static void
|
||||
_theme_hook(Evas_Object *obj)
|
||||
{
|
||||
|
@ -1274,6 +1280,7 @@ elm_genlist_add(Evas_Object *parent)
|
|||
elm_widget_sub_object_add(parent, obj);
|
||||
elm_widget_data_set(obj, wd);
|
||||
elm_widget_del_hook_set(obj, _del_hook);
|
||||
elm_widget_del_pre_hook_set(obj, _del_pre_hook);
|
||||
elm_widget_theme_hook_set(obj, _theme_hook);
|
||||
|
||||
wd->scr = elm_smart_scroller_add(e);
|
||||
|
|
|
@ -41,10 +41,18 @@ _del_hook(Evas_Object *obj)
|
|||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
|
||||
if (!wd) return;
|
||||
evas_object_del(wd->img);
|
||||
free(wd);
|
||||
}
|
||||
|
||||
static void
|
||||
_del_pre_hook(Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
|
||||
if (!wd) return;
|
||||
evas_object_del(wd->img);
|
||||
}
|
||||
|
||||
static void
|
||||
_theme_hook(Evas_Object *obj)
|
||||
{
|
||||
|
@ -115,6 +123,7 @@ elm_image_add(Evas_Object *parent)
|
|||
elm_widget_sub_object_add(parent, obj);
|
||||
elm_widget_data_set(obj, wd);
|
||||
elm_widget_del_hook_set(obj, _del_hook);
|
||||
elm_widget_del_pre_hook_set(obj, _del_pre_hook);
|
||||
elm_widget_theme_hook_set(obj, _theme_hook);
|
||||
elm_widget_can_focus_set(obj, 0);
|
||||
|
||||
|
|
|
@ -664,18 +664,12 @@ _mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event_info)
|
|||
wd->on_hold = EINA_FALSE;
|
||||
}
|
||||
|
||||
static Evas_Smart_Class _pan_sc = {NULL};
|
||||
static Evas_Smart_Class _pan_sc = EVAS_SMART_CLASS_INIT_NULL;
|
||||
|
||||
static void
|
||||
static void
|
||||
_del_hook(Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
Grid *g;
|
||||
|
||||
grid_clearall(obj);
|
||||
evas_object_del(wd->pan_smart);
|
||||
evas_object_del(wd->rect);
|
||||
wd->pan_smart = NULL;
|
||||
if (wd->calc_job) ecore_job_del(wd->calc_job);
|
||||
if (wd->scr_timer) ecore_timer_del(wd->scr_timer);
|
||||
if (wd->zoom_animator) ecore_animator_del(wd->zoom_animator);
|
||||
|
@ -683,6 +677,15 @@ _del_hook(Evas_Object *obj)
|
|||
free(wd);
|
||||
}
|
||||
|
||||
static void
|
||||
_del_pre_hook(Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
grid_clearall(obj);
|
||||
evas_object_del(wd->pan_smart);
|
||||
wd->pan_smart = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
_theme_hook(Evas_Object *obj)
|
||||
{
|
||||
|
@ -933,6 +936,7 @@ elm_map_add(Evas_Object *parent)
|
|||
elm_widget_sub_object_add(parent, obj);
|
||||
elm_widget_data_set(obj, wd);
|
||||
elm_widget_del_hook_set(obj, _del_hook);
|
||||
elm_widget_del_pre_hook_set(obj, _del_pre_hook);
|
||||
elm_widget_theme_hook_set(obj, _theme_hook);
|
||||
|
||||
wd->scr = elm_smart_scroller_add(e);
|
||||
|
|
|
@ -656,7 +656,7 @@ _mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event_info)
|
|||
wd->on_hold = EINA_FALSE;
|
||||
}
|
||||
|
||||
static Evas_Smart_Class _pan_sc = {NULL};
|
||||
static Evas_Smart_Class _pan_sc = EVAS_SMART_CLASS_INIT_NULL;
|
||||
|
||||
static void
|
||||
_del_hook(Evas_Object *obj)
|
||||
|
@ -1394,6 +1394,12 @@ elm_photocam_region_get(Evas_Object *obj, int *x, int *y, int *w, int *h)
|
|||
else if (*w < 0) *w = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (x) *x = 0;
|
||||
if (w) *w = 0;
|
||||
}
|
||||
|
||||
if (wd->size.h > 0)
|
||||
{
|
||||
if (y)
|
||||
|
@ -1409,7 +1415,11 @@ elm_photocam_region_get(Evas_Object *obj, int *x, int *y, int *w, int *h)
|
|||
else if (*h < 0) *h = 0;
|
||||
}
|
||||
}
|
||||
wd->size.w;
|
||||
else
|
||||
{
|
||||
if (y) *y = 0;
|
||||
if (h) *h = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -28,13 +28,13 @@ _del_pre_hook(Evas_Object *obj)
|
|||
|
||||
evas_object_event_callback_del_full
|
||||
(wd->tbl, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj);
|
||||
evas_object_del(wd->tbl);
|
||||
}
|
||||
|
||||
static void
|
||||
_del_hook(Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
evas_object_del(wd->tbl);
|
||||
free(wd);
|
||||
}
|
||||
|
||||
|
|
|
@ -100,6 +100,14 @@ _menu_hide(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
|||
elm_toolbar_item_unselect_all(it->obj);
|
||||
}
|
||||
|
||||
static void
|
||||
_menu_del(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
// avoid hide being emitted during object deletion
|
||||
evas_object_event_callback_del_full
|
||||
(obj, EVAS_CALLBACK_HIDE, _menu_hide, data);
|
||||
}
|
||||
|
||||
static void
|
||||
_menu_move_resize(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
|
@ -134,24 +142,21 @@ _del_pre_hook(Evas_Object *obj)
|
|||
|
||||
if (!wd) return;
|
||||
EINA_LIST_FREE(wd->items, it)
|
||||
elm_toolbar_item_menu_set(it, 0);
|
||||
{
|
||||
eina_stringshare_del(it->label);
|
||||
if (it->icon) evas_object_del(it->icon);
|
||||
if ((!wd->menu_parent) && (it->o_menu)) evas_object_del(it->o_menu);
|
||||
evas_object_del(it->base);
|
||||
free(it);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_del_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)
|
||||
{
|
||||
eina_stringshare_del(it->label);
|
||||
if (it->icon) evas_object_del(it->icon);
|
||||
evas_object_del(it->base);
|
||||
free(it);
|
||||
elm_toolbar_item_menu_set(it, 0);
|
||||
}
|
||||
free(wd);
|
||||
}
|
||||
|
||||
|
@ -562,11 +567,11 @@ elm_toolbar_item_menu_set(Elm_Toolbar_Item *item, Eina_Bool menu)
|
|||
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_DEL,
|
||||
_menu_del, item);
|
||||
}
|
||||
else if (item->o_menu)
|
||||
{
|
||||
evas_object_event_callback_del_full(item->o_menu, EVAS_CALLBACK_HIDE,
|
||||
_menu_hide, item);
|
||||
evas_object_del(item->o_menu);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue