From 0679411d0e2e43981501cbf0f84ec2ca5ea1d655 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 29 Sep 2008 10:07:12 +0000 Subject: ** Fix for bug #530716 2008-09-29 Milan Crha ** Fix for bug #530716 * mail/mail-session.c: (user_message_response), (user_message_exec), (user_message_response_free): Differentiate between response with valid message pointer and with one already freed. * widgets/misc/e-activity-handler.c: (error_cleanup): GtkDialog errors close by the response message, not as other widgets, because creator of the dialog waits for that signal and takes care of the widget. svn path=/trunk/; revision=36473 --- mail/mail-session.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) (limited to 'mail/mail-session.c') diff --git a/mail/mail-session.c b/mail/mail-session.c index b317612960..9009bb607b 100644 --- a/mail/mail-session.c +++ b/mail/mail-session.c @@ -286,20 +286,13 @@ struct _user_message_msg { static void user_message_exec (struct _user_message_msg *m); -/* clicked, send back the reply */ static void -user_message_response (GtkDialog *dialog, int button, struct _user_message_msg *m) +user_message_response_free (GtkDialog *dialog, int button, struct _user_message_msg *m) { gtk_widget_destroy ((GtkWidget *) dialog); user_message_dialog = NULL; - /* if !allow_cancel, then we've already replied */ - if (m->allow_cancel) { - m->result = button == GTK_RESPONSE_OK; - e_flag_set (m->done); - } - /* check for pendings */ if (!g_queue_is_empty (&user_message_queue)) { m = g_queue_pop_head (&user_message_queue); @@ -308,6 +301,19 @@ user_message_response (GtkDialog *dialog, int button, struct _user_message_msg * } } +/* clicked, send back the reply */ +static void +user_message_response (GtkDialog *dialog, int button, struct _user_message_msg *m) +{ + /* if !allow_cancel, then we've already replied */ + if (m->allow_cancel) { + m->result = button == GTK_RESPONSE_OK; + e_flag_set (m->done); + } + + user_message_response_free (dialog, button, m); +} + static void user_message_exec (struct _user_message_msg *m) { @@ -364,7 +370,7 @@ user_message_exec (struct _user_message_msg *m) } else { g_signal_connect ( user_message_dialog, "response", - G_CALLBACK (user_message_response), m); + G_CALLBACK (user_message_response_free), m); g_object_set_data ( user_message_dialog, "response-handled", GINT_TO_POINTER (TRUE)); @@ -375,8 +381,8 @@ user_message_exec (struct _user_message_msg *m) static void user_message_free (struct _user_message_msg *m) { - g_free(m->prompt); - e_flag_free(m->done); + g_free (m->prompt); + e_flag_free (m->done); } static MailMsgInfo user_message_info = { -- cgit v1.2.3