fix valgrind issues on frees of evas screwing deletions of widgets - this

might fix a slew of bugs on dialog close.


SVN revision: 29846
This commit is contained in:
Carsten Haitzler 2007-05-04 15:55:24 +00:00
parent 96db0e5fa1
commit 941d1d56f7
4 changed files with 20 additions and 4 deletions

View File

@ -309,7 +309,8 @@ _e_config_dialog_cb_ok(void *data, E_Dialog *dia)
if (cfd->view->advanced.apply_cfdata)
ok = cfd->view->advanced.apply_cfdata(cfd, cfd->cfdata);
}
if (ok) e_object_del(E_OBJECT(cfd));
if (ok)
e_util_defer_object_del(E_OBJECT(cfd));
}
static void
@ -388,5 +389,5 @@ _e_config_dialog_cb_close(void *data, E_Dialog *dia)
ok = cfd->view->close_cfdata(cfd, cfd->cfdata);
if (ok)
e_object_del(E_OBJECT(dia));
e_util_defer_object_del(E_OBJECT(cfd));
}

View File

@ -202,7 +202,7 @@ _e_configure_cb_close(void *data, void *data2)
eco = data;
if (!eco) return;
e_object_del(E_OBJECT(eco));
e_util_defer_object_del(E_OBJECT(eco));
}
static E_Configure_Category *

View File

@ -27,6 +27,7 @@ struct _E_Util_Fake_Mouse_Up_Info
};
/* local subsystem functions */
static int _e_util_cb_delayed_del(void *data);
static void _e_util_container_fake_mouse_up_cb(void *data);
static int _e_util_wakeup_cb(void *data);
@ -906,7 +907,20 @@ e_util_dir_check(const char *dir)
return 1;
}
EAPI void
e_util_defer_object_del(E_Object *obj)
{
ecore_idle_enterer_add(_e_util_cb_delayed_del, obj);
}
/* local subsystem functions */
static int
_e_util_cb_delayed_del(void *data)
{
e_object_del(E_OBJECT(data));
return 0;
}
static void
_e_util_container_fake_mouse_up_cb(void *data)
{

View File

@ -52,6 +52,7 @@ EAPI Evas_Object *e_util_desktop_icon_add(Efreet_Desktop *desktop, const char *s
EAPI Evas_Object *e_util_icon_theme_icon_add(const char *icon_name, const char *size, Evas *evas);
EAPI void e_util_desktop_menu_item_icon_add(Efreet_Desktop *desktop, const char *size, E_Menu_Item *mi);
EAPI int e_util_dir_check(const char *dir);
EAPI void e_util_defer_object_del(E_Object *obj);
#endif
#endif