diff src/gtkblist.c @ 12070:e4666705944b

[gaim-migrate @ 14365] patches [ 1353462 ] account-disabled/enabled signals, use them in account dialog and [ 1355690 ] Add/remove statusbox when accounts are enabled/disabled some parts of the first one didn't apply, but they were doc changes, so i figured charkins could diff them. committer: Tailor Script <tailor@pidgin.im>
author Tim Ringenbach <marv@pidgin.im>
date Sun, 13 Nov 2005 03:45:16 +0000
parents ac18b43b0495
children 3b52d94437f3
line wrap: on
line diff
--- a/src/gtkblist.c	Sun Nov 13 03:39:06 2005 +0000
+++ b/src/gtkblist.c	Sun Nov 13 03:45:16 2005 +0000
@@ -3247,6 +3247,41 @@
 	return result;
 }
 
+static void account_enabled(GaimAccount *account, GaimGtkBuddyList *gtkblist)
+{
+	GtkWidget *box;
+	
+	if (!gtkblist)
+		return;
+	
+	box = gtk_gaim_status_box_new_with_account(account);
+	gtkblist->statusboxes = g_list_append(gtkblist->statusboxes, box);
+	gtk_box_pack_start(GTK_BOX(gtkblist->statusboxbox), box, FALSE, TRUE, 0);
+	gtk_widget_show(box);
+}
+
+static void account_disabled(GaimAccount *account, GaimGtkBuddyList *gtkblist)
+{
+	GList *iter;
+
+	if (!gtkblist)
+		return;
+
+	for (iter = gtkblist->statusboxes; iter; iter = iter->next)
+	{
+		GtkWidget *box = iter->data;
+		GaimAccount *ac = NULL;
+
+		g_object_get(G_OBJECT(box), "account", &ac, NULL);
+		if (ac == account)
+		{
+			gtkblist->statusboxes = g_list_remove_link(gtkblist->statusboxes, iter);
+			gtk_widget_destroy(box);
+			break;
+		}
+	}
+}
+
 static void gaim_gtk_blist_show(GaimBuddyList *list)
 {
 	void *handle;
@@ -3480,6 +3515,11 @@
 			gaim_gtk_blist_sound_method_pref_cb, NULL);
 
 	/* Setup some gaim signal handlers. */
+	gaim_signal_connect(gaim_accounts_get_handle(), "account-disabled",
+			gtkblist, GAIM_CALLBACK(account_disabled), gtkblist);
+	gaim_signal_connect(gaim_accounts_get_handle(), "account-enabled",
+			gtkblist, GAIM_CALLBACK(account_enabled), gtkblist);
+
 	gaim_signal_connect(gaim_connections_get_handle(), "signed-on",
 						gtkblist, GAIM_CALLBACK(sign_on_off_cb), list);
 	gaim_signal_connect(gaim_connections_get_handle(), "signed-off",