e confirm dialogs no longer crash constantly

SVN revision: 75923
This commit is contained in:
Mike Blumenkrantz 2012-08-31 18:53:26 +00:00
parent c342111786
commit e440668ea8
1 changed files with 13 additions and 10 deletions

View File

@ -63,8 +63,12 @@ e_confirm_dialog_show(const char *title, const char *icon, const char *text,
static void
_e_confirm_dialog_free(E_Confirm_Dialog *cd)
{
if ((cd->dia) && (cd->dia->win))
_e_confirm_dialog_delete(cd->dia->win);
E_Dialog *dia;
dia = cd->dia;
if (cd->del.func) cd->del.func(cd->del.data);
e_object_del(E_OBJECT(cd->dia));
free(cd);
}
static void
@ -73,8 +77,10 @@ _e_confirm_dialog_yes(void *data, E_Dialog *dia __UNUSED__)
E_Confirm_Dialog *cd;
cd = data;
e_object_ref(data);
if (cd->yes.func) cd->yes.func(cd->yes.data);
_e_confirm_dialog_delete(cd->dia->win);
e_object_del(data);
e_object_unref(data);
}
static void
@ -83,21 +89,18 @@ _e_confirm_dialog_no(void *data, E_Dialog *dia __UNUSED__)
E_Confirm_Dialog *cd;
cd = data;
e_object_ref(data);
if (cd->no.func) cd->no.func(cd->no.data);
_e_confirm_dialog_delete(cd->dia->win);
e_object_del(data);
e_object_unref(data);
}
static void
_e_confirm_dialog_delete(E_Win *win)
{
E_Dialog *dia;
E_Confirm_Dialog *cd;
dia = win->data;
cd = dia->data;
if (cd->del.func) cd->del.func(cd->del.data);
e_util_defer_object_del(E_OBJECT(dia));
free(cd);
e_object_del(dia->data);
}