im.pidgin.pidgin: 1db48062464daa0913a6b22ccd36ca90fef29f90

resiak at soc.pidgin.im resiak at soc.pidgin.im
Sat Feb 16 09:45:42 EST 2008


-----------------------------------------------------------------
Revision: 1db48062464daa0913a6b22ccd36ca90fef29f90
Ancestor: dc53960d0e40861598072b15f5de1f6decbbd619
Author: resiak at soc.pidgin.im
Date: 2008-02-16T14:42:57
Branch: im.pidgin.pidgin
URL: http://d.pidgin.im/viewmtn/revision/info/1db48062464daa0913a6b22ccd36ca90fef29f90

Modified files:
        pidgin/gtkblist.c

ChangeLog: 

Don't clear account errors during account-error-changed emission.  I can't
reproduce Stu's crash, but this fixes the error minidialog duplication I was
seeing when trying to reproduce it, and I believe the cause is the same.

References #4815

-------------- next part --------------
============================================================
--- pidgin/gtkblist.c	079a3f5cfa5d3df520c5207875ceb0c8b75f12d2
+++ pidgin/gtkblist.c	9a82011280f123f76282e230a1ba56029b16bcbe
@@ -4408,6 +4408,7 @@ headline_box_press_cb(GtkWidget *widget,
 /***********************************/
 
 #define OBJECT_DATA_KEY_ACCOUNT "account"
+#define DO_NOT_CLEAR_ERROR "do-not-clear-error"
 
 static gboolean
 find_account_widget(GObject *widget,
@@ -4470,6 +4471,11 @@ remove_child_widget_by_account(GtkContai
 {
 	GtkWidget *widget = find_child_widget_by_account(container, account);
 	if(widget) {
+		/* Since we are destroying the widget in response to a change in
+		 * error, we should not clear the error.
+		 */
+		g_object_set_data(G_OBJECT(widget), DO_NOT_CLEAR_ERROR,
+			GINT_TO_POINTER(TRUE));
 		gtk_widget_destroy(widget);
 	}
 }
@@ -4495,7 +4501,12 @@ generic_error_destroy_cb(GtkObject *dial
                          PurpleAccount *account)
 {
 	g_hash_table_remove(gtkblist->connection_errors, account);
-	purple_account_clear_current_error(account);
+	/* If the error dialog is being destroyed in response to the
+	 * account-error-changed signal, we don't want to clear the current
+	 * error.
+	 */
+	if (g_object_get_data(G_OBJECT(dialog), DO_NOT_CLEAR_ERROR) == NULL)
+		purple_account_clear_current_error(account);
 }
 
 #define SSL_FAQ_URI "http://d.pidgin.im/wiki/FAQssl"


More information about the Commits mailing list