changeset 20513:8b8effa59cc6

explicit merge of '736907efe1b492215cd5e4b57bbcec0d4bb977e6' and 'eb8280d5d4c85b1f5b5b7baba3849e3b3b6e1337'
author Richard Laager <rlaager@wiktel.com>
date Sun, 16 Sep 2007 18:03:41 +0000
parents 7e2327d291fb (diff) f489d760121f (current diff)
children 723b5a2f91ce
files COPYRIGHT libpurple/protocols/msn/msn-utils.c libpurple/protocols/msn/msn-utils.h libpurple/util.c
diffstat 83 files changed, 244 insertions(+), 131 deletions(-) [+]
line wrap: on
line diff
--- a/COPYRIGHT	Sun Sep 16 18:02:50 2007 +0000
+++ b/COPYRIGHT	Sun Sep 16 18:03:41 2007 +0000
@@ -339,7 +339,6 @@
 Michael Shkutkov
 Ettore Simone
 John Silvestri
-Ankit Singla
 Craig Slusher
 Alex Smith
 Brad Smith
--- a/finch/gntui.c	Sun Sep 16 18:02:50 2007 +0000
+++ b/finch/gntui.c	Sun Sep 16 18:03:41 2007 +0000
@@ -91,8 +91,6 @@
 	gnt_register_action(_("Statuses"), finch_savedstatus_show_all);
 
 #ifdef STANDALONE
-
-	finch_plugins_save_loaded();
 }
 
 void gnt_ui_uninit()
--- a/libpurple/plugins/ssl/ssl-nss.c	Sun Sep 16 18:02:50 2007 +0000
+++ b/libpurple/plugins/ssl/ssl-nss.c	Sun Sep 16 18:03:41 2007 +0000
@@ -107,6 +107,20 @@
 	}
 }
 
+static gchar *get_error_text()
+{
+	PRInt32 len = PR_GetErrorTextLength();
+	gchar *ret = NULL;
+
+	if (len > 0) {
+		ret = g_malloc(len + 1);
+		len = PR_GetErrorText(ret);
+		ret[len] = '\0';
+	}
+
+	return ret;
+}
+
 static void
 ssl_nss_init_nss(void)
 {
@@ -220,11 +234,14 @@
 	 * It seems to work because it'll eventually use the cached value
 	 */
 	if(SSL_ForceHandshake(nss_data->in) != SECSuccess) {
+		gchar *error_txt;
 		set_errno(PR_GetError());
 		if (errno == EAGAIN || errno == EWOULDBLOCK)
 			return;
 
-		purple_debug_error("nss", "Handshake failed %d\n", PR_GetError());
+		error_txt = get_error_text();
+		purple_debug_error("nss", "Handshake failed %s (%d)\n", error_txt ? error_txt : "", PR_GetError());
+		g_free(error_txt);
 
 		if (gsc->error_cb != NULL)
 			gsc->error_cb(gsc, PURPLE_SSL_HANDSHAKE_FAILED, gsc->connect_cb_data);
@@ -265,8 +282,11 @@
 	socket_opt.option = PR_SockOpt_Nonblocking;
 	socket_opt.value.non_blocking = PR_TRUE;
 
-	if (PR_SetSocketOption(nss_data->fd, &socket_opt) != PR_SUCCESS)
-		purple_debug_warning("nss", "unable to set socket into non-blocking mode: %d\n", PR_GetError());
+	if (PR_SetSocketOption(nss_data->fd, &socket_opt) != PR_SUCCESS) {
+		gchar *error_txt = get_error_text();
+		purple_debug_warning("nss", "unable to set socket into non-blocking mode: %s (%d)\n", error_txt ? error_txt : "", PR_GetError());
+		g_free(error_txt);
+	}
 
 	nss_data->in = SSL_ImportFD(NULL, nss_data->fd);
 
@@ -365,10 +385,12 @@
 ssl_nss_peer_certs(PurpleSslConnection *gsc)
 {
 	PurpleSslNssData *nss_data = PURPLE_SSL_NSS_DATA(gsc);
+	CERTCertificate *cert;
+/*
 	GList *chain = NULL;
-	CERTCertificate *cert;
 	void *pinArg;
 	SECStatus status;
+*/
 
 	/* TODO: this is a blind guess */
 	cert = SSL_PeerCertificate(nss_data->fd);
@@ -487,6 +509,7 @@
 	g_free(crt);
 }
 
+#if 0
 /** Determines whether one certificate has been issued and signed by another
  *
  * @param crt       Certificate to check the signature of
@@ -501,6 +524,7 @@
 {
 	return FALSE;
 }
+#endif
 
 static GByteArray *
 x509_sha1sum(PurpleCertificate *crt)
--- a/libpurple/protocols/bonjour/bonjour.c	Sun Sep 16 18:02:50 2007 +0000
+++ b/libpurple/protocols/bonjour/bonjour.c	Sun Sep 16 18:03:41 2007 +0000
@@ -592,8 +592,8 @@
 		fullname = info->pw_gecos;
 	else if ((info != NULL) && (info->pw_name != NULL) && (info->pw_name[0] != '\0'))
 		fullname = info->pw_name;
-	else if (((fullname = getlogin()) != NULL) && (fullname[0] != '\0'))
-		;
+	else if (((fullname = getlogin()) != NULL) && (fullname[0] == '\0'))
+		fullname = NULL;
 #else
 	/* The Win32 username lookup functions are synchronous so we do it in a thread */
 	g_thread_create(_win32_name_lookup_thread, NULL, FALSE, NULL);
--- a/libpurple/protocols/jabber/auth.c	Sun Sep 16 18:02:50 2007 +0000
+++ b/libpurple/protocols/jabber/auth.c	Sun Sep 16 18:03:41 2007 +0000
@@ -203,8 +203,15 @@
 	return TRUE;
 }
 	
-static void auth_pass_cb(JabberStream *js, PurpleRequestFields *fields)
+static void auth_pass_cb(PurpleConnection *conn, PurpleRequestFields *fields)
 {
+	JabberStream *js;
+
+	/* The password prompt dialog doesn't get disposed if the account disconnects */
+	if (!PURPLE_CONNECTION_IS_VALID(conn))
+		return;
+
+	js = conn->proto_data;
 
 	if (!auth_pass_generic(js, fields))
 		return;
@@ -217,8 +224,16 @@
 }
 
 static void
-auth_old_pass_cb(JabberStream *js, PurpleRequestFields *fields)
+auth_old_pass_cb(PurpleConnection *conn, PurpleRequestFields *fields)
 {
+	JabberStream *js;
+
+	/* The password prompt dialog doesn't get disposed if the account disconnects */
+	if (!PURPLE_CONNECTION_IS_VALID(conn))
+		return;
+
+	js = conn->proto_data;
+
 	if (!auth_pass_generic(js, fields))
 		return;
 	
@@ -228,9 +243,17 @@
 
 
 static void
-auth_no_pass_cb(JabberStream *js, PurpleRequestFields *fields)
+auth_no_pass_cb(PurpleConnection *conn, PurpleRequestFields *fields)
 {
-	purple_connection_error(js->gc, _("Password is required to sign on."));
+	JabberStream *js;
+
+	/* The password prompt dialog doesn't get disposed if the account disconnects */
+	if (!PURPLE_CONNECTION_IS_VALID(conn))
+		return;
+
+	js = conn->proto_data;
+
+	purple_connection_error(conn, _("Password is required to sign on."));
 }
 
 static void jabber_auth_start_cyrus(JabberStream *js)
@@ -283,7 +306,7 @@
 				 */
 
 				if (!purple_account_get_password(js->gc->account)) {
-					purple_account_request_password(js->gc->account, G_CALLBACK(auth_pass_cb), G_CALLBACK(auth_no_pass_cb), js);
+					purple_account_request_password(js->gc->account, G_CALLBACK(auth_pass_cb), G_CALLBACK(auth_no_pass_cb), js->gc);
 					return;
 
 				/* If we've got a password, but aren't sending
@@ -597,7 +620,7 @@
 	 */
 	
 	if (!purple_account_get_password(js->gc->account)) {
-		purple_account_request_password(js->gc->account, G_CALLBACK(auth_old_pass_cb), G_CALLBACK(auth_no_pass_cb), js);
+		purple_account_request_password(js->gc->account, G_CALLBACK(auth_old_pass_cb), G_CALLBACK(auth_no_pass_cb), js->gc);
 		return;
 	}
 #endif
--- a/libpurple/protocols/jabber/chat.c	Sun Sep 16 18:02:50 2007 +0000
+++ b/libpurple/protocols/jabber/chat.c	Sun Sep 16 18:03:41 2007 +0000
@@ -833,12 +833,18 @@
 
 gboolean jabber_chat_ban_user(JabberChat *chat, const char *who, const char *why)
 {
+	JabberChatMember *jcm;
+	const char *jid;
+	char *to;
 	JabberIq *iq;
-	JabberChatMember *jcm = g_hash_table_lookup(chat->members, who);
-	char *to;
 	xmlnode *query, *item, *reason;
 
-	if(!jcm || !jcm->jid)
+	jcm = g_hash_table_lookup(chat->members, who);
+	if (jcm && jcm->jid)
+		jid = jcm->jid;
+	else if (g_utf8_strchr(who, -1, '@') != NULL)
+		jid = who;
+	else
 		return FALSE;
 
 	iq = jabber_iq_new_query(chat->js, JABBER_IQ_SET,
@@ -850,7 +856,7 @@
 
 	query = xmlnode_get_child(iq->node, "query");
 	item = xmlnode_new_child(query, "item");
-	xmlnode_set_attrib(item, "jid", jcm->jid);
+	xmlnode_set_attrib(item, "jid", jid);
 	xmlnode_set_attrib(item, "affiliation", "outcast");
 	if(why) {
 		reason = xmlnode_new_child(item, "reason");
@@ -864,14 +870,18 @@
 
 gboolean jabber_chat_affiliate_user(JabberChat *chat, const char *who, const char *affiliation)
 {
+	JabberChatMember *jcm;
+	const char *jid;
 	char *to;
 	JabberIq *iq;
 	xmlnode *query, *item;
-	JabberChatMember *jcm;
 
 	jcm = g_hash_table_lookup(chat->members, who);
-
-	if (!jcm || !jcm->jid)
+	if (jcm && jcm->jid)
+		jid = jcm->jid;
+	else if (g_utf8_strchr(who, -1, '@') != NULL)
+		jid = who;
+	else
 		return FALSE;
 
 	iq = jabber_iq_new_query(chat->js, JABBER_IQ_SET,
@@ -883,7 +893,7 @@
 
 	query = xmlnode_get_child(iq->node, "query");
 	item = xmlnode_new_child(query, "item");
-	xmlnode_set_attrib(item, "jid", jcm->jid);
+	xmlnode_set_attrib(item, "jid", jid);
 	xmlnode_set_attrib(item, "affiliation", affiliation);
 
 	jabber_iq_send(iq);
--- a/libpurple/protocols/jabber/si.c	Sun Sep 16 18:02:50 2007 +0000
+++ b/libpurple/protocols/jabber/si.c	Sun Sep 16 18:03:41 2007 +0000
@@ -708,6 +708,10 @@
 
 	jabber_iq_set_callback(iq, jabber_si_xfer_send_method_cb, xfer);
 
+	/* Store the IQ id so that we can cancel the callback */
+	g_free(jsx->iq_id);
+	jsx->iq_id = g_strdup(iq->id);
+
 	jabber_iq_send(iq);
 }
 
@@ -722,6 +726,8 @@
 		purple_proxy_connect_cancel(jsx->connect_data);
 	if (jsx->listen_data != NULL)
 		purple_network_listen_cancel(jsx->listen_data);
+	if (jsx->iq_id != NULL)
+		jabber_iq_remove_callback_by_id(js, jsx->iq_id);
 
 	g_free(jsx->stream_id);
 	g_free(jsx->iq_id);
--- a/libpurple/protocols/myspace/myspace.c	Sun Sep 16 18:02:50 2007 +0000
+++ b/libpurple/protocols/myspace/myspace.c	Sun Sep 16 18:03:41 2007 +0000
@@ -1543,6 +1543,12 @@
 
 	if (msim_msg_get_integer(msg, "uniquenick") == session->userid) {
 		purple_debug_info("msim_we_are_logged_on", "TODO: pick username\n");
+		/* No username is set. */
+		purple_notify_error(session->account, 
+				_("No username set"),
+				_("Please go to http://editprofile.myspace.com/index.cfm?fuseaction=profile.username and choose a username and try to login again."), NULL);
+		purple_connection_error(session->gc, _("No username set"));
+		return FALSE;
 	}
 
 	body = msim_msg_new(
@@ -1864,9 +1870,14 @@
 		purple_debug_info("msim", "msim_status: found buddy %s\n", username);
 	}
 
-	/* The status headline is plaintext, but libpurple treats it as HTML,
-	 * so escape any HTML characters to their entity equivalents. */
-	status_headline_escaped = g_markup_escape_text(status_headline, strlen(status_headline));
+	if (status_headline) {
+		/* The status headline is plaintext, but libpurple treats it as HTML,
+		 * so escape any HTML characters to their entity equivalents. */
+		status_headline_escaped = g_markup_escape_text(status_headline, strlen(status_headline));
+	} else {
+		status_headline_escaped = NULL;
+	}
+
 	g_free(status_headline);
 
 	if (user->headline) 
--- a/libpurple/protocols/oscar/oft.c	Sun Sep 16 18:02:50 2007 +0000
+++ b/libpurple/protocols/oscar/oft.c	Sun Sep 16 18:03:41 2007 +0000
@@ -266,7 +266,7 @@
 	size_t length;
 	ByteStream bs;
 
-	length = 192 + MAX(64, frame->name_length + 1);
+	length = 192 + frame->name_length;
 	byte_stream_new(&bs, length);
 	byte_stream_putraw(&bs, conn->magic, 4);
 	byte_stream_put16(&bs, length);
@@ -300,7 +300,7 @@
 	 * The name can be more than 64 characters, but if it is less than
 	 * 64 characters it is padded with NULLs.
 	 */
-	byte_stream_putraw(&bs, frame->name, MAX(64, frame->name_length + 1));
+	byte_stream_putraw(&bs, frame->name, frame->name_length);
 
 	peer_connection_send(conn, &bs);
 
@@ -340,8 +340,7 @@
 peer_oft_send_done(PeerConnection *conn)
 {
 	conn->xferdata.type = PEER_TYPE_DONE;
-	conn->xferdata.filesleft = 0;
-	conn->xferdata.partsleft = 0;
+	conn->xferdata.rfrcsum = 0xffff0000;
 	conn->xferdata.nrecvd = purple_xfer_get_bytes_sent(conn->xfer);
 	peer_oft_send(conn, &conn->xferdata);
 }
@@ -677,12 +676,12 @@
 	conn->xferdata.rfrcsum = 0xffff0000;
 	conn->xferdata.rfcsum = 0xffff0000;
 	conn->xferdata.recvcsum = 0xffff0000;
-	strncpy((gchar *)conn->xferdata.idstring, "OFT_Windows ICBMFT V1.1 32", 31);
+	strncpy((gchar *)conn->xferdata.idstring, "Cool FileXfer", 31);
 	conn->xferdata.modtime = 0;
 	conn->xferdata.cretime = 0;
 	xfer->filename = g_path_get_basename(xfer->local_filename);
-	conn->xferdata.name = (guchar *)g_strdup(xfer->filename);
-	conn->xferdata.name_length = strlen(xfer->filename);
+	conn->xferdata.name_length = MAX(64, strlen(xfer->filename) + 1);
+	conn->xferdata.name = (guchar *)g_strndup(xfer->filename, conn->xferdata.name_length - 1);
 
 	peer_oft_checksum_file(conn, xfer,
 			peer_oft_checksum_calculated_cb, G_MAXUINT32);
--- a/libpurple/protocols/oscar/peer.c	Sun Sep 16 18:02:50 2007 +0000
+++ b/libpurple/protocols/oscar/peer.c	Sun Sep 16 18:03:41 2007 +0000
@@ -416,6 +416,25 @@
 	{
 		purple_input_remove(conn->watcher_outgoing);
 		conn->watcher_outgoing = 0;
+		/*
+		 * The buffer is currently empty, so reset the current input
+		 * and output positions to the start of the buffer.  We do
+		 * this so that the next chunk of data that we put into the
+		 * buffer can be read back out of the buffer in one fell swoop.
+		 * Otherwise it gets fragmented and we have to read from the
+		 * second half of the buffer than go back and read the rest of
+		 * the chunk from the first half.
+		 *
+		 * We're using TCP, which is a stream based protocol, so this
+		 * isn't supposed to matter.  However, experience has shown
+		 * that at least the proxy file transfer code in AIM 6.1.41.2
+		 * requires that the entire OFT frame arrive all at once.  If
+		 * the frame is fragmented then AIM freaks out and aborts the
+		 * file transfer.  Somebody should teach those guys how to
+		 * write good TCP code.
+		 */
+		conn->buffer_outgoing->inptr = conn->buffer_outgoing->buffer;
+		conn->buffer_outgoing->outptr = conn->buffer_outgoing->buffer;
 		return;
 	}
 
--- a/libpurple/protocols/simple/simple.c	Sun Sep 16 18:02:50 2007 +0000
+++ b/libpurple/protocols/simple/simple.c	Sun Sep 16 18:03:41 2007 +0000
@@ -1066,6 +1066,7 @@
 	if(!pidf) {
 		purple_debug_info("simple", "process_incoming_notify: no parseable pidf\n");
 		g_free(from);
+		send_sip_response(sip->gc, msg, 200, "OK", NULL);
 		return;
 	}
 
--- a/libpurple/protocols/yahoo/yahoo.c	Sun Sep 16 18:02:50 2007 +0000
+++ b/libpurple/protocols/yahoo/yahoo.c	Sun Sep 16 18:03:41 2007 +0000
@@ -3505,7 +3505,7 @@
 static void yahoo_show_chat_goto(PurplePluginAction *action)
 {
 	PurpleConnection *gc = (PurpleConnection *) action->context;
-	purple_request_input(gc, NULL, _("Join who in chat?"), NULL,
+	purple_request_input(gc, NULL, _("Join whom in chat?"), NULL,
 					   "", FALSE, FALSE, NULL,
 					   _("OK"), G_CALLBACK(yahoo_chat_goto),
 					   _("Cancel"), NULL,
--- a/pidgin/gtkconv.c	Sun Sep 16 18:02:50 2007 +0000
+++ b/pidgin/gtkconv.c	Sun Sep 16 18:03:41 2007 +0000
@@ -929,6 +929,7 @@
 	PurpleConversation *conv = (PurpleConversation *)user_data;
 	FILE *fp;
 	const char *name;
+	char **lines;
 	gchar *text;
 
 	if ((fp = g_fopen(filename, "w+")) == NULL) {
@@ -940,10 +941,12 @@
 	fprintf(fp, "<html>\n<head><title>%s</title></head>\n<body>", name);
 	fprintf(fp, _("<h1>Conversation with %s</h1>\n"), name);
 
-	text = gtk_imhtml_get_markup(
+	lines = gtk_imhtml_get_markup_lines(
 		GTK_IMHTML(PIDGIN_CONVERSATION(conv)->imhtml));
+	text = g_strjoinv("<br>\n", lines);
 	fprintf(fp, "%s", text);
 	g_free(text);
+	g_strfreev(lines);
 
 	fprintf(fp, "\n</body>\n</html>\n");
 	fclose(fp);
@@ -1301,6 +1304,7 @@
 	add_remove_cb(NULL, PIDGIN_CONVERSATION(conv));
 }
 
+#if 0
 static void
 menu_hide_conv_cb(gpointer data, guint action, GtkWidget *widget)
 {
@@ -1311,6 +1315,7 @@
 			"conversation-hiding", gtkconv);
 	purple_conversation_set_ui_ops(conv, NULL);
 }
+#endif
 
 static void
 menu_close_conv_cb(gpointer data, guint action, GtkWidget *widget)
@@ -2903,8 +2908,6 @@
 	{ "/Conversation/sep4", NULL, NULL, 0, "<Separator>", NULL },
 
 
-	{ N_("/Conversation/_Hide"), NULL, menu_hide_conv_cb, 0,
-			"<Item>", NULL},
 	{ N_("/Conversation/_Close"), NULL, menu_close_conv_cb, 0,
 			"<StockItem>", GTK_STOCK_CLOSE },
 
@@ -4497,12 +4500,12 @@
 pidgin_conv_motion_cb (GtkWidget *infopane, GdkEventMotion *event, PidginConversation *gtkconv)
 {
 	int delay = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/blist/tooltip_delay");
-	
+
 	pidgin_blist_tooltip_destroy();
 	if (delay == 0)
 		return FALSE;
 
-	if (tooltip.timeout != 0) 
+	if (tooltip.timeout != 0)
 		g_source_remove(tooltip.timeout);
 
 	tooltip.timeout = g_timeout_add(delay, (GSourceFunc)pidgin_conv_tooltip_timeout, gtkconv);
@@ -4516,7 +4519,6 @@
 	PurplePluginProtocolInfo *prpl_info;
 	PurpleConversation *conv = gtkconv->active_conv;
 	PidginChatPane *gtkchat;
-	PurpleConnection *gc;
 	PurpleBlistNode *node = NULL;
 	PurpleAccount *account;
 	GtkTreePath *path;
@@ -4528,8 +4530,11 @@
 
 	gtkchat = gtkconv->u.chat;
 	account = purple_conversation_get_account(conv);
-	gc = account->gc;
-	prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl);
+
+	if (account->gc == NULL)
+		return FALSE;
+
+	prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(account->gc->prpl);
 
 	model = gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list));
 
@@ -4543,7 +4548,7 @@
 	gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &who, -1);
 
 	node = (PurpleBlistNode*)(purple_find_buddy(conv->account, who));
-	if (node && prpl_info && (prpl_info->options & OPT_PROTO_UNIQUE_CHATNAME)) 
+	if (node && prpl_info && (prpl_info->options & OPT_PROTO_UNIQUE_CHATNAME))
 		pidgin_blist_draw_tooltip(node, gtkconv->infopane);
 
 	g_free(who);
@@ -4553,20 +4558,26 @@
 	return FALSE;
 }
 
-static gboolean 
+static gboolean
 pidgin_userlist_motion_cb (GtkWidget *w, GdkEventMotion *event, PidginConversation *gtkconv)
 {
 	PurpleConversation *conv;
+	PurpleAccount *account;
 	int delay = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/blist/tooltip_delay");
 	
 	pidgin_blist_tooltip_destroy();
 	if (delay == 0)
 		return FALSE;
 
-	if (tooltip.timeout != 0) 
+	if (tooltip.timeout != 0)
 		g_source_remove(tooltip.timeout);
-	
+	tooltip.timeout = 0;
+
 	conv = gtkconv->active_conv;
+	account = purple_conversation_get_account(conv);
+
+	if (account->gc == NULL)
+		return FALSE;
 
 	tooltip.timeout = g_timeout_add(delay, (GSourceFunc)pidgin_userlist_tooltip_timeout, gtkconv);
 	tooltip.gtkconv = gtkconv;
@@ -4606,7 +4617,7 @@
 	gtk_widget_show(gtkconv->infopane_hbox);
 	gtk_widget_add_events(event_box,
 	                      GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK);
-	g_signal_connect(G_OBJECT(event_box), "button_press_event",
+	g_signal_connect(G_OBJECT(event_box), "button-press-event",
 	                 G_CALLBACK(infopane_press_cb), gtkconv);
 
 	g_signal_connect(G_OBJECT(event_box), "motion-notify-event", 
--- a/pidgin/gtkimhtml.c	Sun Sep 16 18:02:50 2007 +0000
+++ b/pidgin/gtkimhtml.c	Sun Sep 16 18:03:41 2007 +0000
@@ -4890,7 +4890,7 @@
 		} else if (c == '"') {
 			str = g_string_append(str, "&quot;");
 		} else if (c == '\n') {
-			str = g_string_append(str, "<br>\n");
+			str = g_string_append(str, "<br>");
 		} else {
 			str = g_string_append_unichar(str, c);
 		}
--- a/pidgin/gtkprefs.c	Sun Sep 16 18:02:50 2007 +0000
+++ b/pidgin/gtkprefs.c	Sun Sep 16 18:03:41 2007 +0000
@@ -1510,6 +1510,7 @@
 
 	gtk_widget_set_sensitive(vbox, strcmp(method, "none"));
 }
+#endif /* !_WIN32 */
 
 #ifdef USE_GSTREAMER
 static void
@@ -1524,7 +1525,6 @@
 			!strcmp(method, "esd"));
 }
 #endif /* USE_GSTREAMER */
-#endif /* !_WIN32 */
 
 
 static void
@@ -1693,9 +1693,11 @@
 	int j;
 	const char *file;
 	char *pref;
+#if !defined _WIN32 || defined USE_GSTREAMER
+	GtkWidget *label;
+#endif
 #ifndef _WIN32
 	GtkWidget *dd;
-	GtkWidget *label;
 	GtkWidget *entry;
 	const char *cmd;
 #endif
--- a/pidgin/gtksound.c	Sun Sep 16 18:02:50 2007 +0000
+++ b/pidgin/gtksound.c	Sun Sep 16 18:03:41 2007 +0000
@@ -446,6 +446,8 @@
 		g_free(command);
 		return;
 	}
+#endif /* _WIN32 */
+
 #ifdef USE_GSTREAMER
 	if (gst_init_failed)  /* Perhaps do gdk_beep instead? */
 		return;
@@ -460,7 +462,9 @@
 			purple_debug_error("sound", "Unable to create GStreamer audiosink.\n");
 			return;
 		}
-	} else if (!strcmp(method, "esd")) {
+	}
+#ifndef _WIN32
+	else if (!strcmp(method, "esd")) {
 		sink = gst_element_factory_make("esdsink", "sink");
 		if (!sink) {
 			purple_debug_error("sound", "Unable to create GStreamer audiosink.\n");
@@ -472,7 +476,9 @@
 			purple_debug_error("sound", "Unable to create GStreamer audiosink.\n");
 			return;
 		}
-	} else {
+	}
+#endif
+	else {
 		purple_debug_error("sound", "Unknown sound method '%s'\n", method);
 		return;
 	}
@@ -498,9 +504,9 @@
 	g_free(uri);
 
 #else /* USE_GSTREAMER */
+
+#ifndef _WIN32
 	gdk_beep();
-	return;
-#endif /* USE_GSTREAMER */
 #else /* _WIN32 */
 	purple_debug_info("sound", "Playing %s\n", filename);
 
@@ -518,6 +524,8 @@
 		g_free(l_filename);
 	}
 #endif /* _WIN32 */
+
+#endif /* USE_GSTREAMER */
 }
 
 static void
--- a/pidgin/win32/nsis/pidgin-installer.nsi	Sun Sep 16 18:02:50 2007 +0000
+++ b/pidgin/win32/nsis/pidgin-installer.nsi	Sun Sep 16 18:03:41 2007 +0000
@@ -694,6 +694,7 @@
 
     Delete "$INSTDIR\ca-certs\Equifax_Secure_CA.pem"
     Delete "$INSTDIR\ca-certs\GTE_CyberTrust_Global_Root.pem"
+    Delete "$INSTDIR\ca-certs\Verisign_Class3_Extended_Validation_CA.pem"
     Delete "$INSTDIR\ca-certs\Verisign_Class3_Primary_CA.pem"
     Delete "$INSTDIR\ca-certs\Verisign_RSA_Secure_Server_CA.pem"
     RMDir "$INSTDIR\ca-certs"
@@ -704,7 +705,7 @@
     Delete "$INSTDIR\plugins\buddynote.dll"
     Delete "$INSTDIR\plugins\convcolors.dll"
     Delete "$INSTDIR\plugins\extplacement.dll"
-    Delete "$INSTDIR\plugins\pidginrc.dll"
+    Delete "$INSTDIR\plugins\gtkbuddynote.dll"
     Delete "$INSTDIR\plugins\history.dll"
     Delete "$INSTDIR\plugins\iconaway.dll"
     Delete "$INSTDIR\plugins\idle.dll"
@@ -731,6 +732,7 @@
     Delete "$INSTDIR\plugins\notify.dll"
     Delete "$INSTDIR\plugins\offlinemsg.dll"
     Delete "$INSTDIR\plugins\perl.dll"
+    Delete "$INSTDIR\plugins\pidginrc.dll"
     Delete "$INSTDIR\plugins\psychic.dll"
     Delete "$INSTDIR\plugins\relnot.dll"
     Delete "$INSTDIR\plugins\spellchk.dll"
@@ -744,12 +746,12 @@
     Delete "$INSTDIR\plugins\win2ktrans.dll"
     Delete "$INSTDIR\plugins\winprefs.dll"
     RMDir "$INSTDIR\plugins"
-    Delete "$INSTDIR\sounds\pidgin\alert.wav"
-    Delete "$INSTDIR\sounds\pidgin\login.wav"
-    Delete "$INSTDIR\sounds\pidgin\logout.wav"
-    Delete "$INSTDIR\sounds\pidgin\receive.wav"
-    Delete "$INSTDIR\sounds\pidgin\send.wav"
-    RMDir "$INSTDIR\sounds\pidgin"
+    Delete "$INSTDIR\sounds\purple\alert.wav"
+    Delete "$INSTDIR\sounds\purple\login.wav"
+    Delete "$INSTDIR\sounds\purple\logout.wav"
+    Delete "$INSTDIR\sounds\purple\receive.wav"
+    Delete "$INSTDIR\sounds\purple\send.wav"
+    RMDir "$INSTDIR\sounds\purple"
     RMDir "$INSTDIR\sounds"
     Delete "$INSTDIR\freebl3.dll"
     Delete "$INSTDIR\idletrack.dll"
--- a/po/af.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/af.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11331,7 +11331,7 @@
 msgstr "Aktiveer watter ID?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3345
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Sluit wie by geselsie aan?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3357
--- a/po/am.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/am.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10501,7 +10501,7 @@
 
 #: src/protocols/yahoo/yahoo.c:2972
 #, fuzzy
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "ውሪን አገጣጥም"
 
 #: src/protocols/yahoo/yahoo.c:2982
--- a/po/ar.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/ar.po	Sun Sep 16 18:03:41 2007 +0000
@@ -13172,7 +13172,7 @@
 msgstr "وضعية رقم الانترنت النشطة"
 
 #: ../src/protocols/yahoo/yahoo.c:3094
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr ""
 
 #: ../src/protocols/yahoo/yahoo.c:3104
--- a/po/az.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/az.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10340,7 +10340,7 @@
 msgstr "Hansı ID fəallaşdırılsın?"
 
 #: src/protocols/yahoo/yahoo.c:2972
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Söhbəttə kimə qoşulsun?"
 
 #: src/protocols/yahoo/yahoo.c:2982
--- a/po/bg.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/bg.po	Sun Sep 16 18:03:41 2007 +0000
@@ -14520,7 +14520,7 @@
 msgstr "Активиране на коя идентификация?"
 
 #: ../libgaim/protocols/yahoo/yahoo.c:3214
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Присъединяване към кого в чата?"
 
 #: ../libgaim/protocols/yahoo/yahoo.c:3224
--- a/po/bn.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/bn.po	Sun Sep 16 18:03:41 2007 +0000
@@ -14284,7 +14284,7 @@
 msgstr "কোন আইডি সক্রিয় করা হবে?"
 
 #: ../libgaim/protocols/yahoo/yahoo.c:3214
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "কার সাথে আড্ডা?"
 
 #: ../libgaim/protocols/yahoo/yahoo.c:3224
--- a/po/bs.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/bs.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10646,7 +10646,7 @@
 msgstr "Aktivirati koji ID?"
 
 #: src/protocols/yahoo/yahoo.c:2947
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Kome se želite pridružiti na chat?"
 
 #: src/protocols/yahoo/yahoo.c:2957
--- a/po/ca.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/ca.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10594,7 +10594,7 @@
 msgstr "Quin ID voleu activar?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3234
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "A qui us voleu unir al xat?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3244
--- a/po/ca@valencia.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/ca@valencia.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11263,7 +11263,7 @@
 msgstr "Quin ID voleu activar?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3256
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "A qui vos voleu unir al xat?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3268
--- a/po/cs.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/cs.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11905,7 +11905,7 @@
 msgstr "Které ID aktivovat?"
 
 #: ../src/protocols/yahoo/yahoo.c:3069
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Připojit koho k chatu?"
 
 #: ../src/protocols/yahoo/yahoo.c:3079
--- a/po/da.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/da.po	Sun Sep 16 18:03:41 2007 +0000
@@ -14318,7 +14318,7 @@
 msgstr "Aktivér hvilket ID?"
 
 #: ../libgaim/protocols/yahoo/yahoo.c:3214
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Deltag med hvem i chat?"
 
 #: ../libgaim/protocols/yahoo/yahoo.c:3224
--- a/po/de.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/de.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11443,7 +11443,7 @@
 msgstr "Welche ID aktivieren?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3345
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Wen wollen Sie zum Chat einladen?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3357
--- a/po/dz.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/dz.po	Sun Sep 16 18:03:41 2007 +0000
@@ -13959,7 +13959,7 @@
 msgstr "ཨའི་ཌི་ག་འདི་ཤུགས་ལྡན་སྨོ?"
 
 #: ../libgaim/protocols/yahoo/yahoo.c:3220
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "ག་ ཁ་སླབ་ཀྱི་གྲངས་སུ་འཛུལ་ཡི?"
 
 #: ../libgaim/protocols/yahoo/yahoo.c:3230
--- a/po/el.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/el.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10628,7 +10628,7 @@
 msgstr "Ενεργοποίηση ποιανού ID;"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3239
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Ποιανού συμμετοχή στη συζήτηση;"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3251
--- a/po/en_AU.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/en_AU.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10735,8 +10735,8 @@
 msgstr "Active which ID?"
 
 #: src/protocols/yahoo/yahoo.c:2972
-msgid "Join who in chat?"
-msgstr "Join who in chat?"
+msgid "Join whom in chat?"
+msgstr "Join whom in chat?"
 
 #: src/protocols/yahoo/yahoo.c:2982
 msgid "Activate ID..."
--- a/po/en_CA.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/en_CA.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10715,8 +10715,8 @@
 msgstr "Active which ID?"
 
 #: src/protocols/yahoo/yahoo.c:2972
-msgid "Join who in chat?"
-msgstr "Join who in chat?"
+msgid "Join whom in chat?"
+msgstr "Join whom in chat?"
 
 #: src/protocols/yahoo/yahoo.c:2982
 msgid "Activate ID..."
--- a/po/en_GB.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/en_GB.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10576,8 +10576,8 @@
 msgstr "Active which ID?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3241
-msgid "Join who in chat?"
-msgstr "Join who in chat?"
+msgid "Join whom in chat?"
+msgstr "Join whom in chat?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3253
 msgid "Activate ID..."
--- a/po/eo.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/eo.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10243,7 +10243,7 @@
 msgstr "Ŝaltu kiun ID?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3234
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Kiun kuniĝi en babilejo?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3244
--- a/po/es.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/es.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11319,7 +11319,7 @@
 msgstr "¿Qué ID quiere activar?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3256
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "¿Juntarse con quién en un chat?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3268
--- a/po/et.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/et.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11029,7 +11029,7 @@
 msgstr "Milline ID aktiveerida?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3345
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Kellega ühineda jututoas?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3357
--- a/po/eu.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/eu.po	Sun Sep 16 18:03:41 2007 +0000
@@ -12276,7 +12276,7 @@
 msgstr "Zein ID aktibatu?"
 
 #: ../src/protocols/yahoo/yahoo.c:3070
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Norekin elkartu nahi duzu berriketan?"
 
 #: ../src/protocols/yahoo/yahoo.c:3080
--- a/po/fa.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/fa.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10510,7 +10510,7 @@
 msgstr "فعال‌سازی کدام شناسه؟"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3234
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "پیوستن به کی در گپ؟"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3244
--- a/po/fi.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/fi.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11327,7 +11327,7 @@
 msgstr "Mikä tunnus (ID) aktivoidaan?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3345
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Kenen seuraan liitytään ryhmäkeskustelussa?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3357
--- a/po/fr.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/fr.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11413,7 +11413,7 @@
 msgstr "Activer quelle identité ?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3345
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Qui joindre dans une discussion ?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3357
--- a/po/gl.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/gl.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11270,7 +11270,7 @@
 msgstr "Que ID activar?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3406
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "A quen quere unir á conversa?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3418
--- a/po/gu.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/gu.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10469,7 +10469,7 @@
 msgstr "કયું ID સક્રિય કરવું છે?"
 
 #: src/protocols/yahoo/yahoo.c:2972
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "જોડાવ કે કોણ સંવાદમાં છે?"
 
 #: src/protocols/yahoo/yahoo.c:2982
--- a/po/he.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/he.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11164,7 +11164,7 @@
 msgstr "איזה ID להפעיל?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3345
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "להצטרף למי בצ'אט?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3357
--- a/po/hi.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/hi.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10987,7 +10987,7 @@
 msgstr "कोनसा आइ डी क्रियांवित करें?"
 
 #: src/protocols/yahoo/yahoo.c:2972
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "किससे संवाद करें ?"
 
 #: src/protocols/yahoo/yahoo.c:2982
--- a/po/hu.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/hu.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10433,7 +10433,7 @@
 msgstr "Melyik azonosítót aktiválja?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3239
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Kihez csatlakozik a csevegésben?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3251
--- a/po/id.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/id.po	Sun Sep 16 18:03:41 2007 +0000
@@ -14281,7 +14281,7 @@
 msgstr "Aktifkan ID yang mana?"
 
 #: ../libgaim/protocols/yahoo/yahoo.c:3214
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Gabung siapa dalam percakapan?"
 
 #: ../libgaim/protocols/yahoo/yahoo.c:3224
--- a/po/it.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/it.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11163,7 +11163,7 @@
 msgstr "Quale ID vuoi attivare?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3256
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "A chi vuoi unirti nella chat?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3268
--- a/po/ja.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/ja.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11162,7 +11162,7 @@
 msgstr "どの ID を有効化しますか?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3256
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "どのチャットへ参加しますか?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3268
--- a/po/ka.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/ka.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11603,7 +11603,7 @@
 msgstr ""
 
 #: ../src/protocols/yahoo/yahoo.c:3017
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr ""
 
 #: ../src/protocols/yahoo/yahoo.c:3027
--- a/po/kn.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/kn.po	Sun Sep 16 18:03:41 2007 +0000
@@ -13709,7 +13709,7 @@
 msgstr ""
 
 #: ../libgaim/protocols/yahoo/yahoo.c:3174
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "ಮಾತುಕತೆಯಲ್ಲಿ ಯಾರೊಡನೆ ಸೇರಬೇಕು?"
 
 #: ../libgaim/protocols/yahoo/yahoo.c:3184
--- a/po/ko.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/ko.po	Sun Sep 16 18:03:41 2007 +0000
@@ -14341,7 +14341,7 @@
 msgstr "어느 ID 를 활성화 하시겠습니까?"
 
 #: ../libgaim/protocols/yahoo/yahoo.c:3214
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "어느 대화에 참가하시겠습니까?"
 
 #: ../libgaim/protocols/yahoo/yahoo.c:3224
--- a/po/ku.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/ku.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11671,7 +11671,7 @@
 msgstr ""
 
 #: ../src/protocols/yahoo/yahoo.c:3070
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr ""
 
 #: ../src/protocols/yahoo/yahoo.c:3080
--- a/po/lt.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/lt.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11555,7 +11555,7 @@
 msgstr "Kurį ID aktyvuoti?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3345
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Prisijungti prie ko į pokalbį?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3357
--- a/po/mk.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/mk.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11347,7 +11347,7 @@
 msgstr "Кој ID. да го активирам?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3345
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Кого да приклучам во разговорот?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3357
--- a/po/my_MM.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/my_MM.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10730,8 +10730,8 @@
 msgstr "Active which ID?"
 
 #: src/protocols/yahoo/yahoo.c:2972
-msgid "Join who in chat?"
-msgstr "Join who in chat?"
+msgid "Join whom in chat?"
+msgstr "Join whom in chat?"
 
 #: src/protocols/yahoo/yahoo.c:2982
 msgid "Activate ID..."
--- a/po/nb.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/nb.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10857,7 +10857,7 @@
 msgstr "Aktiver hvilken ID?"
 
 #: src/protocols/yahoo/yahoo.c:2972
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Bli med hvem i samtalegruppe?"
 
 #: src/protocols/yahoo/yahoo.c:2982
--- a/po/ne.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/ne.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10498,7 +10498,7 @@
 msgstr "कुन ID सक्रिय गर्ने?"
 
 #: src/protocols/yahoo/yahoo.c:3028
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "जडान गर्नुहोस् को कुराकानीमा छ?"
 
 #: src/protocols/yahoo/yahoo.c:3038
--- a/po/nl.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/nl.po	Sun Sep 16 18:03:41 2007 +0000
@@ -13683,7 +13683,7 @@
 msgstr "Welk ID activeren?"
 
 #: ../libgaim/protocols/yahoo/yahoo.c:3158
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Deelnemen aan wiens chat?"
 
 #: ../libgaim/protocols/yahoo/yahoo.c:3168
--- a/po/nn.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/nn.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11191,7 +11191,7 @@
 msgstr "Kva ID skal takast i bruk?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3345
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Kven skal bli med i praterommet?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3357
--- a/po/pa.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/pa.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10385,7 +10385,7 @@
 msgstr "ਕਿਹੜਾ ID ਸਰਗਰਮ ਕਰਨਾ ਹੈ?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3239
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "ਗੱਲਬਾਤ ਵਿੱਚ ਕੌਣ ਸ਼ਾਮਿਲ ?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3251
--- a/po/pl.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/pl.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11665,7 +11665,7 @@
 msgstr "Które ID aktywować?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3345
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Kogo przyłączyć do konferencji?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3357
--- a/po/ps.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/ps.po	Sun Sep 16 18:03:41 2007 +0000
@@ -13801,7 +13801,7 @@
 msgstr ""
 
 #: ../libgaim/protocols/yahoo/yahoo.c:3214
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "چه سره ګپ شپ کول غواړی؟"
 
 #: ../libgaim/protocols/yahoo/yahoo.c:3224
--- a/po/pt.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/pt.po	Sun Sep 16 18:03:41 2007 +0000
@@ -12084,7 +12084,7 @@
 msgstr "Activar qual ID?"
 
 #: ../src/protocols/yahoo/yahoo.c:3070
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Juntar a quem no chat?"
 
 #: ../src/protocols/yahoo/yahoo.c:3080
--- a/po/pt_BR.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/pt_BR.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11386,7 +11386,7 @@
 msgstr "Ativar qual ID?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3345
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Juntar-se a quem no bate-papo?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3357
--- a/po/ro.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/ro.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11251,7 +11251,7 @@
 msgstr "Ce identitate doriţi să activaţi?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3256
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Cui doriţi să vă alăturaţi în chat?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3268
--- a/po/ru.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/ru.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11217,7 +11217,7 @@
 msgstr "Какой ID активировать?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3345
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "К кому присоединиться в чате?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3357
--- a/po/sk.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/sk.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11360,7 +11360,7 @@
 msgstr "Aktivovať s ID?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3406
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "S kým sa spojiť v chate?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3418
--- a/po/sl.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/sl.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11254,7 +11254,7 @@
 msgstr "Kateri ID naj bo aktiviran?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3345
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Komu se želite pridružiti v pomenku?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3357
--- a/po/sq.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/sq.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10811,7 +10811,7 @@
 msgstr "Veprues cili ID?"
 
 #: src/protocols/yahoo/yahoo.c:2972
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "T'i bashkohem kujt në fjalosje?"
 
 #: src/protocols/yahoo/yahoo.c:2982
--- a/po/sr.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/sr.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10533,7 +10533,7 @@
 msgstr "Активирај ИД (који)?"
 
 #: src/protocols/yahoo/yahoo.c:2972
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Прикључи се коме разговору?"
 
 #: src/protocols/yahoo/yahoo.c:2982
--- a/po/sr@Latn.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/sr@Latn.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10770,7 +10770,7 @@
 msgstr "Aktiviraj ID (koji)?"
 
 #: src/protocols/yahoo/yahoo.c:2972
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Priključi se kome razgovoru?"
 
 #: src/protocols/yahoo/yahoo.c:2982
--- a/po/sv.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/sv.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11233,7 +11233,7 @@
 msgstr "Vilket ID ska aktiveras?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3345
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Anslut vem till chatten?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3357
--- a/po/ta.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/ta.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11877,7 +11877,7 @@
 msgstr "எந்த முகப்பை செயல்படுத்த?"
 
 #: ../src/protocols/yahoo/yahoo.c:3070
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "எந்த அரட்டையில் இருப்பவருடன் சேர ?"
 
 #: ../src/protocols/yahoo/yahoo.c:3080
--- a/po/te.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/te.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10983,7 +10983,7 @@
 msgstr "ఏ  IDని యాక్టివ్ చేద్దాం?"
 
 #: src/protocols/yahoo/yahoo.c:2972
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "ఎవరితో మాట్లాడుదాం ?"
 
 #: src/protocols/yahoo/yahoo.c:2982
--- a/po/th.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/th.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11710,7 +11710,7 @@
 msgstr ""
 
 #: ../src/protocols/yahoo/yahoo.c:3070
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr ""
 
 #: ../src/protocols/yahoo/yahoo.c:3080
--- a/po/tr.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/tr.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11001,7 +11001,7 @@
 msgstr "Hangi ID aktifleştirilecek?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3256
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Kullanıcıyla sohbet et..."
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3268
--- a/po/uk.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/uk.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10786,7 +10786,7 @@
 msgstr "Активувати який ID?"
 
 #: src/protocols/yahoo/yahoo.c:2972
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "До кого приєднатись у розмові?"
 
 #: src/protocols/yahoo/yahoo.c:2982
--- a/po/vi.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/vi.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10824,7 +10824,7 @@
 msgstr "Kích hoạt ID nào ?"
 
 #: src/protocols/yahoo/yahoo.c:2972
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Tham gia với ai trong Chat?"
 
 #: src/protocols/yahoo/yahoo.c:2982
--- a/po/xh.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/xh.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10832,7 +10832,7 @@
 msgstr "Sesiphi Isazisi esisebenzayo?"
 
 #: src/protocols/yahoo/yahoo.c:2972
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "Ngenela incoko?"
 
 #: src/protocols/yahoo/yahoo.c:2982
--- a/po/zh_CN.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/zh_CN.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10329,7 +10329,7 @@
 msgstr "激活哪个 ID?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3234
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "将谁加入聊天?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3244
--- a/po/zh_HK.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/zh_HK.po	Sun Sep 16 18:03:41 2007 +0000
@@ -10839,7 +10839,7 @@
 # NOTE #gaim 的 Vann 及 LSchiere 解:如果選取了的好友目前處於一個聊天,便加入該個聊天
 # NOTE Yahoo 的「Chat」正式譯文為「聯誼園地」
 #: ../libpurple/protocols/yahoo/yahoo.c:3239
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "加入哪個好友目前所在的聊天室?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3251
--- a/po/zh_TW.po	Sun Sep 16 18:02:50 2007 +0000
+++ b/po/zh_TW.po	Sun Sep 16 18:03:41 2007 +0000
@@ -11426,7 +11426,7 @@
 # NOTE #gaim 的 Vann 及 LSchiere 解:如果選取了的好友目前處於一個聊天,便加入該個聊天
 # NOTE Yahoo 的「Chat」正式譯文為「聯誼園地」
 #: ../libpurple/protocols/yahoo/yahoo.c:3256
-msgid "Join who in chat?"
+msgid "Join whom in chat?"
 msgstr "加入哪個好友目前所在的聊天室?"
 
 #: ../libpurple/protocols/yahoo/yahoo.c:3268