diff pidgin/gtkblist.c @ 30165:378cceb9131d

Add an autojoin connection signal UIs should use this so plugins can delay autojoining by blocking this signal and re-emitting it later. For example, IRC Helper now delays autojoins until after it has identified with NickServ/AuthServ/etc.
author Richard Laager <rlaager@wiktel.com>
date Sun, 18 Apr 2010 22:39:01 +0000
parents 0646207f360f
children 06fa97f637a7 39c1720db373
line wrap: on
line diff
--- a/pidgin/gtkblist.c	Sat Apr 17 22:22:52 2010 +0000
+++ b/pidgin/gtkblist.c	Sun Apr 18 22:39:01 2010 +0000
@@ -7461,7 +7461,7 @@
 	return gtkblist;
 }
 
-static void account_signon_cb(PurpleConnection *gc, gpointer z)
+static gboolean autojoin_cb(PurpleConnection *gc, gpointer data)
 {
 	PurpleAccount *account = purple_connection_get_account(gc);
 	PurpleBlistNode *gnode, *cnode;
@@ -7487,6 +7487,9 @@
 				serv_join_chat(gc, chat->components);
 		}
 	}
+
+	/* Stop processing; we handled the autojoins. */
+	return TRUE;
 }
 
 void *
@@ -7563,10 +7566,6 @@
 
 	cached_emblems = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
 
-	purple_signal_connect(purple_connections_get_handle(), "signed-on",
-						gtk_blist_handle, PURPLE_CALLBACK(account_signon_cb),
-						NULL);
-
 	/* Initialize prefs */
 	purple_prefs_add_none(PIDGIN_PREFS_ROOT "/blist");
 	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons", TRUE);
@@ -7625,6 +7624,9 @@
 	purple_signal_connect(purple_blist_get_handle(), "buddy-privacy-changed",
 			gtk_blist_handle, PURPLE_CALLBACK(pidgin_blist_update_privacy_cb), NULL);
 
+	purple_signal_connect_priority(purple_connections_get_handle(), "autojoin",
+	                               gtk_blist_handle, PURPLE_CALLBACK(autojoin_cb),
+	                               NULL, PURPLE_SIGNAL_PRIORITY_HIGHEST);
 }
 
 void
@@ -7740,7 +7742,6 @@
 		return;
 	}
 
-
 	if (!gtk_tree_model_iter_children(GTK_TREE_MODEL(gtkblist->treemodel), &more_z, &groupiter)) {
 		gtk_tree_store_insert(gtkblist->treemodel, iter, &groupiter, 0);
 		return;