diff finch/gntblist.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 259bbfb423d4
children 53dd827e6bb2
line wrap: on
line diff
--- a/finch/gntblist.c	Sat Apr 17 22:22:52 2010 +0000
+++ b/finch/gntblist.c	Sun Apr 18 22:39:01 2010 +0000
@@ -144,7 +144,7 @@
 static void blist_show(PurpleBuddyList *list);
 static void update_node_display(PurpleBlistNode *buddy, FinchBlist *ggblist);
 static void update_buddy_display(PurpleBuddy *buddy, FinchBlist *ggblist);
-static void account_signed_on_cb(PurpleConnection *pc, gpointer null);
+static gboolean account_autojoin_cb(PurpleConnection *pc, gpointer null);
 static void finch_request_add_buddy(PurpleAccount *account, const char *username, const char *grp, const char *alias);
 static void menu_group_set_cb(GntMenuItem *item, gpointer null);
 
@@ -2213,8 +2213,10 @@
 	purple_prefs_connect_callback(finch_blist_get_handle(),
 			PREF_ROOT "/grouping", redraw_blist, NULL);
 
-	purple_signal_connect(purple_connections_get_handle(), "signed-on", purple_blist_get_handle(),
-			G_CALLBACK(account_signed_on_cb), NULL);
+	purple_signal_connect_priority(purple_connections_get_handle(),
+	                               "autojoin", purple_blist_get_handle(),
+			               G_CALLBACK(account_autojoin_cb), NULL,
+	                               PURPLE_SIGNAL_PRIORITY_HIGHEST);
 
 	finch_blist_install_manager(&default_manager);
 
@@ -2684,10 +2686,11 @@
 	return FALSE;
 }
 
-static void
-account_signed_on_cb(PurpleConnection *gc, gpointer null)
+static gboolean
+account_autojoin_cb(PurpleConnection *gc, gpointer null)
 {
 	g_idle_add(auto_join_chats, gc);
+	return TRUE;
 }
 
 static void toggle_pref_cb(GntMenuItem *item, gpointer n)