diff libpurple/account.c @ 21373:cbf197042bad

Add the old error to the account-error-changed signal.
author Will Thompson <will.thompson@collabora.co.uk>
date Sun, 28 Oct 2007 13:01:45 +0000
parents 0aa18e21a595
children 71c1f2da4ff2
line wrap: on
line diff
--- a/libpurple/account.c	Sun Oct 28 11:04:04 2007 +0000
+++ b/libpurple/account.c	Sun Oct 28 13:01:45 2007 +0000
@@ -2236,14 +2236,18 @@
 clear_current_error(PurpleAccount *account)
 {
 	PurpleAccountPrivate *priv = PURPLE_ACCOUNT_GET_PRIVATE(account);
+	PurpleAccountCurrentError *old;
+
 	if (priv->current_error)
 	{
-		g_free (priv->current_error);
+		old = priv->current_error;
 		priv->current_error = NULL;
+		purple_signal_emit(purple_accounts_get_handle(),
+		                   "account-error-changed",
+		                   account, old, priv->current_error);
+		g_free (old);
 	}
 
-	purple_signal_emit(purple_accounts_get_handle(), "account-error-changed",
-	                   account, priv->current_error);
 }
 
 static void
@@ -2262,14 +2266,16 @@
 {
 	PurpleAccount *account = purple_connection_get_account(gc);
 	PurpleAccountPrivate *priv = PURPLE_ACCOUNT_GET_PRIVATE(account);
-
-	if (!priv->current_error)
-		priv->current_error = g_new0(PurpleAccountCurrentError, 1);
+	PurpleAccountCurrentError *old = priv->current_error;
+
+	priv->current_error = g_new0(PurpleAccountCurrentError, 1);
 	priv->current_error->reason = err;
 	priv->current_error->description = desc;
 
-	purple_signal_emit(purple_accounts_get_handle(), "account-error-changed",
-	                   account, priv->current_error);
+	purple_signal_emit(purple_accounts_get_handle(),
+	                   "account-error-changed",
+	                   account, old, priv->current_error);
+	g_free(old);
 }
 
 const PurpleAccountCurrentError *
@@ -2581,9 +2587,11 @@
 						purple_value_new(PURPLE_TYPE_STRING));
 
 	purple_signal_register(handle, "account-error-changed",
-	                       purple_marshal_VOID__POINTER_POINTER, NULL, 2,
+	                       purple_marshal_VOID__POINTER_POINTER_POINTER,
+	                       NULL, 3,
 	                       purple_value_new(PURPLE_TYPE_SUBTYPE,
 	                                        PURPLE_SUBTYPE_ACCOUNT),
+	                       purple_value_new(PURPLE_TYPE_POINTER),
 	                       purple_value_new(PURPLE_TYPE_POINTER));
 
 	purple_signal_connect(conn_handle, "signed-on", handle,