changeset 16930:8bf1d19a93ea

merge of '6410c883762e90fc54d85e2ca466d863b2951796' and 'cb04dc04f4ee6fdde0ec5b7a79342b8464b038ef'
author Richard Laager <rlaager@wiktel.com>
date Sat, 05 May 2007 23:56:21 +0000
parents 342107309cf3 (diff) ce2422ae793c (current diff)
children 09f0bb67a87f
files libpurple/util.c
diffstat 59 files changed, 593 insertions(+), 290 deletions(-) [+]
line wrap: on
line diff
--- a/AUTHORS	Sat May 05 23:55:29 2007 +0000
+++ b/AUTHORS	Sat May 05 23:56:21 2007 +0000
@@ -14,7 +14,7 @@
 	ICQ: 96642211
 	Yahoo:	SeanEgn
 	MSN:  seanegn@hotmail.com
-	Jabber:  seanegn@jabber.org
+	XMPP:  seanegn@jabber.org
 	Gadu-Gadu:  1511497
 
 Daniel 'datallah' Atallah - Developer
@@ -55,7 +55,7 @@
 Rob Flynn <gaim@robflynn.com> - maintainer
 Adam Fritzler - libfaim maintainer
 Syd Logan - hacker and designated driver [lazy bum]
-Jim Seymour - Jabber developer
+Jim Seymour - XMPP developer
 Mark Spencer <markster@marko.net> - original author
 Eric Warmenhoven <eric@warmenhoven.org> - lead developer
 
--- a/COPYRIGHT	Sat May 05 23:55:29 2007 +0000
+++ b/COPYRIGHT	Sat May 05 23:56:21 2007 +0000
@@ -17,6 +17,7 @@
 Christopher Ayoup
 Alex Badea
 John Bailey
+R. Tyler Ballance
 Chris Banal
 Luca Barbato
 Levi Bard
--- a/ChangeLog	Sat May 05 23:55:29 2007 +0000
+++ b/ChangeLog	Sat May 05 23:56:21 2007 +0000
@@ -1,6 +1,17 @@
 Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
-version 2.0.0:
+version 2.0.1 (??/??/????):
+	* Buddy list update speedups when buddy icons are not being
+	  displayed.  (Scott Wolchok)
+
+	Finch:
+	* Userlist in chat windows, which can be turned on or off using
+	  "/users" command.
+	* Menus in the conversation windows.
+	* Improved tab completion support.
+	* Ctrl+c prompts with a dialog before exiting.
+
+version 2.0.0 (5/3/2007):
 	* The project has new names - libpurple for the core, Pidgin for the
 	  GTK+ UI and Finch for the ncurses based console UI (AOL LLC)
 
@@ -199,8 +210,9 @@
 	* Removed the Napster and TOC protocols plugins
 
 	Other Noteworthy Changes:
-	* UPnP and NAT traversal support (Adam J. Warrington, Google Summer of
+	* NAT traversal support via UPnP (Adam J. Warrington, Google Summer of
 	  Code)
+	* NAT traversal support via NAT-PMP (Evan Schoenberg and R. Tyler Ballance)
 	* The modify account dialog now contains two tabs, which should display
 	  better at lower resolutions (Sadrul Habib Chowdhury)
 	* New "find buddy" results dialog (Alex Converse)
--- a/ChangeLog.API	Sat May 05 23:55:29 2007 +0000
+++ b/ChangeLog.API	Sat May 05 23:56:21 2007 +0000
@@ -1,6 +1,6 @@
 Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
-version 2.0.0:
+version 2.0.0 (5/3/2007):
 	Please note all functions, defines, and data structures have been
 	re-namespaced to match the new names of Pidgin, Finch, and libpurple.
 	All gaim_gtk_* functions are now pidgin_*, former libgaim functions are
--- a/ChangeLog.win32	Sat May 05 23:55:29 2007 +0000
+++ b/ChangeLog.win32	Sat May 05 23:56:21 2007 +0000
@@ -1,4 +1,4 @@
-version 2.0.0:
+version 2.0.0 (5/3/2007):
 	* URI Handler support added via `pidgin.exe --protocolhandler=`
 	* Running a second instance will popup the Buddy List, if possible.
 	* Updated GTK+ to 2.10.11 (rev.a) (Win98/ME will need to use 2.6.10)
--- a/NEWS	Sat May 05 23:55:29 2007 +0000
+++ b/NEWS	Sat May 05 23:56:21 2007 +0000
@@ -1,6 +1,13 @@
 Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
 2.0.0 (5/3/2007):
+	Sean: 2.0.0! It's real exciting to finally release Pidgin 2.0.0! I'm
+	really proud of all the work we've all done. I'm pumped. And, while
+	I could go on about all the amazing thing that have been added since
+	1.5.0, what I'm really excited about is getting back to a regular,
+	rapid, release cycle of active, open development, unhindered by legal
+	quandries. Huge thanks to everyone involved.
+
 	Luke: We have finally managed to get 2.0.0 out the door, after nearly
 	but not quite 2 years of effort and fustration.  No one regrets more
 	than I that we were unable to make any of betas 3-6 the actual release.
@@ -26,6 +33,32 @@
 	creep. As Luke said, a ton of thought and effort has gone into
 	Pidgin 2.0.0; I'm proud to have played a part.
 
+	Stu: We did it! finally, we have 2.0.0. It's been a long time coming,
+	but there's a great deal of goodness here. When I say a long time, I'm
+	not kidding - it's been 972 days since we branched off "oldstatus"
+	(aka 1.x). The early Greeks were uncertain as to whether 2 was a
+	number at all (or if we'd ever make this release) - it has a beginning
+	and an end but no middle (much like our unfortunately quiet development
+	period). 2 is the first prime number and the only even prime. 2 is also
+	the first deficient number (oh well). There are only 10 types of people
+	in the world - those who like our new names and those who do not.
+	Enjoy!
+
+	Richard: I'm very glad that we've finally gotten 2.0.0 released and
+	I look forward to returning to a more normal development schedule.
+	Again, a big thanks to everyone who helped in any way to get things
+	where they are today.  Congratulations everyone!
+
+	Sadrul: My first NEWS, and on what an occasion! Pidgin 2.0.0 is finally
+	released!! And it's *really* very good!!! Give your soul a break ...
+	Use Pidgin!
+
+	Daniel: There has been a fair amount of weeping and gnashing of teeth
+	due to the delays in getting this beast out.  I'm really happy that it
+	is done.  I'm also very happy with what we're releasing - I think it is
+	far more stable, packed with useful features and, dare I say, prettier
+	than any previous release.
+
 2.0.0beta7 (4/29/2007):
 	Sean: Beta 7. The final beta. A few major changes from beta6. For
 	starters, we have some new names. That's pretty cool. We have a new
--- a/README	Sat May 05 23:55:29 2007 +0000
+++ b/README	Sat May 05 23:56:21 2007 +0000
@@ -4,7 +4,7 @@
 
 libpurple is a library intended to be used by programmers seeking
 to write an IM client that connects to many IM networks.  It supports
-AIM, ICQ, Jabber, MSN and Yahoo!, among others.
+AIM, ICQ, XMPP, MSN and Yahoo!, among others.
 
 Pidgin is an graphical IM client written in C which uses the GTK+
 toolkit.
--- a/configure.ac	Sat May 05 23:55:29 2007 +0000
+++ b/configure.ac	Sat May 05 23:56:21 2007 +0000
@@ -46,8 +46,8 @@
 m4_define([purple_lt_current], [0])
 m4_define([purple_major_version], [2])
 m4_define([purple_minor_version], [0])
-m4_define([purple_micro_version], [0])
-m4_define([purple_version_suffix], [beta7])
+m4_define([purple_micro_version], [1])
+m4_define([purple_version_suffix], [devel])
 m4_define([purple_version],
           [purple_major_version.purple_minor_version.purple_micro_version])
 m4_define([purple_display_version], purple_version[]m4_ifdef([purple_version_suffix],[purple_version_suffix]))
@@ -55,8 +55,8 @@
 m4_define([gnt_lt_current], [0])
 m4_define([gnt_major_version], [1])
 m4_define([gnt_minor_version], [0])
-m4_define([gnt_micro_version], [0])
-m4_define([gnt_version_suffix], [beta7])
+m4_define([gnt_micro_version], [1])
+m4_define([gnt_version_suffix], [devel])
 m4_define([gnt_version],
           [gnt_major_version.gnt_minor_version.gnt_micro_version])
 m4_define([gnt_display_version], gnt_version[]m4_ifdef([gnt_version_suffix],[gnt_version_suffix]))
@@ -1187,7 +1187,7 @@
 	PERL_CFLAGS=`$perlpath -MExtUtils::Embed -e ccopts 2>/dev/null`
 	if test "_$PERL_CFLAGS" = _ ; then
 		AC_MSG_RESULT([not found, building without perl.])
-		enable_perl = no
+		enable_perl=no
 	else
 		PERL_LIBS=`$perlpath -MExtUtils::Embed -e ldopts 2>/dev/null |$sedpath 's/-lgdbm //'`
 		PERL_LIBS=`echo $PERL_LIBS |$sedpath 's/-ldb //'`
@@ -1922,6 +1922,7 @@
 AC_CHECK_HEADERS(sys/file.h sys/filio.h sys/ioctl.h sys/msgbuf.h)
 AC_CHECK_HEADERS(sys/select.h sys/uio.h sys/utsname.h sys/wait.h)
 AC_CHECK_HEADERS(termios.h)
+AC_CHECK_HEADERS(sys/sysctl.h sys/socket.h)
 AC_VAR_TIMEZONE_EXTERNALS
 
 AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
--- a/doc/finch.1.in	Sat May 05 23:55:29 2007 +0000
+++ b/doc/finch.1.in	Sat May 05 23:56:21 2007 +0000
@@ -30,7 +30,7 @@
 .SH DESCRIPTION
 .PP
 \fBfinch\fR is a console-based modular messaging client capable of using
-AIM, MSN, Yahoo!, Jabber, ICQ, IRC, SILC, Novell GroupWise, Lotus Sametime,
+AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, Novell GroupWise, Lotus Sametime,
 Zephyr, Gadu-Gadu, and QQ all at once. It has many common features found in
 other clients, as well as many unique features.  Finch is not endorsed by or
 affiliated with America Online, ICQ, Microsoft, or Yahoo.
--- a/doc/funniest_home_convos.txt	Sat May 05 23:55:29 2007 +0000
+++ b/doc/funniest_home_convos.txt	Sat May 05 23:56:21 2007 +0000
@@ -460,3 +460,15 @@
 23:59 -!- beta7 was kicked from #pidgin by elb [getting feisty, are we?]
 23:59 -!- mode/#pidgin [-o elb] by ChanServ
 23:59 <marv> elb: good job getting beta7 out
+
+14:07 <elb> rizzo: I actually prefer elb, and used it for a long time -- but 
+            switched to Paco-Paco because people kept asking me what an 'elb'
+            was
+14:08 <rizzo> elb: tell them it's short for "elbow", and don't explain any 
+              further
+14:08 <elb> rizzo: I actually had people ASK about that
+14:08 <elb> 'is your nick elbow?'
+14:08 <elb> "... yes"
+14:08 <elb> I mean, what do you say
+14:08 <Robot101> elb: was their nick "idi"?
+          
--- a/doc/pidgin.1.in	Sat May 05 23:55:29 2007 +0000
+++ b/doc/pidgin.1.in	Sat May 05 23:56:21 2007 +0000
@@ -28,7 +28,7 @@
 
 .SH DESCRIPTION
 .PP
-Pidgin is a modular messaging client capable of using AIM, MSN, Yahoo!, Jabber,
+Pidgin is a modular messaging client capable of using AIM, MSN, Yahoo!, XMPP,
 ICQ, IRC, SILC, SIP/SIMPLE Novell GroupWise, Lotus Sametime, Bonjour,
 Zephyr, Gadu-Gadu, and QQ all at once.  It has many common features found in
 other clients, as well as many unique features.  Pidgin is not endorsed by or
--- a/finch/finch.c	Sat May 05 23:55:29 2007 +0000
+++ b/finch/finch.c	Sat May 05 23:56:21 2007 +0000
@@ -303,7 +303,7 @@
 			char *text = g_strdup_printf(_(
 				"%s encountered errors migrating your settings "
 				"from %s to %s. Please investigate and complete the "
-				"migration by hand. Please report this error at http://developer.pidgin.im"), _("Finch"),
+				"migration by hand. Please report this error at http://developer.pidgin.im"), "Finch",
 				old, purple_user_dir());
 
 			g_free(old);
--- a/finch/gntconv.c	Sat May 05 23:55:29 2007 +0000
+++ b/finch/gntconv.c	Sat May 05 23:56:21 2007 +0000
@@ -37,13 +37,23 @@
 #include "gntplugin.h"
 #include "gntprefs.h"
 #include "gntstatus.h"
+#include "gntpounce.h"
 
 #include "gnt.h"
 #include "gntbox.h"
 #include "gntentry.h"
+#include "gntlabel.h"
+#include "gntmenu.h"
+#include "gntmenuitem.h"
+#include "gntmenuitemcheck.h"
 #include "gnttextview.h"
+#include "gnttree.h"
+#include "gntutils.h"
+#include "gntwindow.h"
 
 #define PREF_ROOT	"/finch/conversations"
+#define PREF_CHAT   PREF_ROOT "/chats"
+#define PREF_USERLIST PREF_CHAT "/userlist"
 
 #include "config.h"
 
@@ -266,6 +276,151 @@
 }
 
 static void
+clear_scrollback_cb(GntMenuItem *item, gpointer ggconv)
+{
+	FinchConv *ggc = ggconv;
+	gnt_text_view_clear(GNT_TEXT_VIEW(ggc->tv));
+}
+
+static void
+send_file_cb(GntMenuItem *item, gpointer ggconv)
+{
+	FinchConv *ggc = ggconv;
+	serv_send_file(purple_conversation_get_gc(ggc->active_conv),
+			purple_conversation_get_name(ggc->active_conv), NULL);
+}
+
+static void
+add_pounce_cb(GntMenuItem *item, gpointer ggconv)
+{
+	FinchConv *ggc = ggconv;
+	finch_pounce_editor_show(
+			purple_conversation_get_account(ggc->active_conv),
+			purple_conversation_get_name(ggc->active_conv), NULL);
+}
+
+static void
+get_info_cb(GntMenuItem *item, gpointer ggconv)
+{
+	FinchConv *ggc = ggconv;
+	serv_get_info(purple_conversation_get_gc(ggc->active_conv),
+			purple_conversation_get_name(ggc->active_conv));
+}
+
+static void
+toggle_timestamps_cb(GntMenuItem *item, gpointer ggconv)
+{
+	purple_prefs_set_bool(PREF_ROOT "/timestamps",
+		!purple_prefs_get_bool(PREF_ROOT "/timestamps"));
+}
+
+static void
+send_to_cb(GntMenuItem *m, gpointer n)
+{
+	PurpleAccount *account = g_object_get_data(G_OBJECT(m), "purple_account");
+	gchar *buddy = g_object_get_data(G_OBJECT(m), "purple_buddy_name");
+	PurpleConversation *conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, buddy);
+	finch_conversation_set_active(conv);
+}
+
+static void
+generate_send_to_menu(FinchConv *ggc)
+{
+	GntWidget *sub, *menu = ggc->menu;
+	GntMenuItem *item;
+	GSList *buds;
+	GList *list = NULL;
+
+	buds = purple_find_buddies(ggc->active_conv->account, ggc->active_conv->name);
+	if (!buds)
+		return;
+
+	item = gnt_menuitem_new(_("Send To"));
+	gnt_menu_add_item(GNT_MENU(menu), item);
+	sub = gnt_menu_new(GNT_MENU_POPUP);
+	gnt_menuitem_set_submenu(item, GNT_MENU(sub));
+
+	for (; buds; buds = buds->next) {
+		PurpleBlistNode *node = (PurpleBlistNode *)purple_buddy_get_contact((PurpleBuddy *)buds->data);
+		for (node = node->child; node != NULL; node = node->next) {
+			PurpleBuddy *buddy = (PurpleBuddy *)node;
+			PurpleAccount *account = purple_buddy_get_account(buddy);
+			if (purple_account_is_connected(account)) {
+				/* Use the PurplePresence to get unique buddies. */
+				PurplePresence *presence = purple_buddy_get_presence(buddy);
+				if (!g_list_find(list, presence))
+					list = g_list_prepend(list, presence);
+			}
+		}
+	}
+	for (list = g_list_last(list); list != NULL; list = list->prev) {
+		PurplePresence *pre = list->data;
+		PurpleBuddy *buddy = purple_presence_get_buddy(pre);
+		PurpleAccount *account = purple_buddy_get_account(buddy);
+		gchar *name = g_strdup(purple_buddy_get_name(buddy));
+		gchar *text = g_strdup_printf("%s (%s)", purple_buddy_get_name(buddy), purple_account_get_username(account));
+		item = gnt_menuitem_new(text);
+		g_free(text);
+		gnt_menu_add_item(GNT_MENU(sub), item);
+		gnt_menuitem_set_callback(item, send_to_cb, NULL);
+		g_object_set_data(G_OBJECT(item), "purple_account", account);
+		g_object_set_data_full(G_OBJECT(item), "purple_buddy_name", name, g_free);
+	}
+	g_list_free(list);
+	g_slist_free(buds);
+}
+
+static void
+gg_create_menu(FinchConv *ggc)
+{
+	GntWidget *menu, *sub;
+	GntMenuItem *item;
+
+	ggc->menu = menu = gnt_menu_new(GNT_MENU_TOPLEVEL);
+	gnt_window_set_menu(GNT_WINDOW(ggc->window), GNT_MENU(menu));
+
+	item = gnt_menuitem_new(_("Conversation"));
+	gnt_menu_add_item(GNT_MENU(menu), item);
+
+	sub = gnt_menu_new(GNT_MENU_POPUP);
+	gnt_menuitem_set_submenu(item, GNT_MENU(sub));
+
+	item = gnt_menuitem_new(_("Clear Scrollback"));
+	gnt_menu_add_item(GNT_MENU(sub), item);
+	gnt_menuitem_set_callback(item, clear_scrollback_cb, ggc);
+
+	item = gnt_menuitem_check_new(_("Show Timestamps"));
+	gnt_menuitem_check_set_checked(GNT_MENU_ITEM_CHECK(item),
+		purple_prefs_get_bool(PREF_ROOT "/timestamps"));
+	gnt_menu_add_item(GNT_MENU(sub), item);
+	gnt_menuitem_set_callback(item, toggle_timestamps_cb, ggc);
+
+	if (purple_conversation_get_type(ggc->active_conv) == PURPLE_CONV_TYPE_IM) {
+		item = gnt_menuitem_new(_("Send File"));
+		gnt_menu_add_item(GNT_MENU(sub), item);
+		gnt_menuitem_set_callback(item, send_file_cb, ggc);
+
+		item = gnt_menuitem_new(_("Add Buddy Pounce..."));
+		gnt_menu_add_item(GNT_MENU(sub), item);
+		gnt_menuitem_set_callback(item, add_pounce_cb, ggc);
+
+		item = gnt_menuitem_new(_("Get Info"));
+		gnt_menu_add_item(GNT_MENU(sub), item);
+		gnt_menuitem_set_callback(item, get_info_cb, ggc);
+
+		generate_send_to_menu(ggc);
+	}
+}
+
+static void
+create_conv_from_userlist(GntWidget *widget, FinchConv *fc)
+{
+	PurpleAccount *account = purple_conversation_get_account(fc->active_conv);
+	char *name = gnt_tree_get_selection_data(GNT_TREE(widget));
+	purple_conversation_new(PURPLE_CONV_TYPE_IM, account, name);
+}
+
+static void
 finch_create_conversation(PurpleConversation *conv)
 {
 	FinchConv *ggc = conv->ui_data;
@@ -296,18 +451,37 @@
 	type = purple_conversation_get_type(conv);
 	title = get_conversation_title(conv, account);
 
-	ggc->window = gnt_box_new(FALSE, TRUE);
+	ggc->window = gnt_vwindow_new(FALSE);
 	gnt_box_set_title(GNT_BOX(ggc->window), title);
 	gnt_box_set_toplevel(GNT_BOX(ggc->window), TRUE);
 	gnt_box_set_pad(GNT_BOX(ggc->window), 0);
 	gnt_widget_set_name(ggc->window, "conversation-window");
 
+	gg_create_menu(ggc);
+
 	ggc->tv = gnt_text_view_new();
-	gnt_box_add_widget(GNT_BOX(ggc->window), ggc->tv);
 	gnt_widget_set_name(ggc->tv, "conversation-window-textview");
 	gnt_widget_set_size(ggc->tv, purple_prefs_get_int(PREF_ROOT "/size/width"),
 			purple_prefs_get_int(PREF_ROOT "/size/height"));
 
+	if (type == PURPLE_CONV_TYPE_CHAT) {
+		GntWidget *hbox, *tree;
+		FinchConvChat *fc = ggc->u.chat = g_new0(FinchConvChat, 1);
+		hbox = gnt_hbox_new(FALSE);
+		gnt_box_set_pad(GNT_BOX(hbox), 0);
+		tree = fc->userlist = gnt_tree_new();
+		gnt_tree_set_compare_func(GNT_TREE(tree), (GCompareFunc)g_utf8_collate);
+		gnt_tree_set_hash_fns(GNT_TREE(tree), g_str_hash, g_str_equal, g_free);
+		GNT_WIDGET_SET_FLAGS(tree, GNT_WIDGET_NO_BORDER);
+		gnt_box_add_widget(GNT_BOX(hbox), ggc->tv);
+		gnt_box_add_widget(GNT_BOX(hbox), tree);
+		gnt_box_add_widget(GNT_BOX(ggc->window), hbox);
+		g_signal_connect(G_OBJECT(tree), "activate", G_CALLBACK(create_conv_from_userlist), ggc);
+		gnt_widget_set_visible(tree, purple_prefs_get_bool(PREF_USERLIST));
+	} else {
+		gnt_box_add_widget(GNT_BOX(ggc->window), ggc->tv);
+	}
+
 	ggc->info = gnt_vbox_new(FALSE);
 	gnt_box_add_widget(GNT_BOX(ggc->window), ggc->info);
 
@@ -338,6 +512,7 @@
 	}
 
 	g_free(title);
+	gnt_box_give_focus_to_child(GNT_BOX(ggc->window), ggc->entry);
 }
 
 static void
@@ -350,6 +525,7 @@
 		ggc->active_conv = ggc->list->data;
 	
 	if (ggc->list == NULL) {
+		g_free(ggc->u.chat);
 		gnt_widget_destroy(ggc->window);
 		g_free(ggc);
 	}
@@ -380,8 +556,7 @@
 	gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(ggconv->tv), "\n", GNT_TEXT_FLAG_NORMAL);
 
 	/* Unnecessary to print the timestamp for delayed message */
-	if (!(flags & PURPLE_MESSAGE_DELAYED) &&
-			purple_prefs_get_bool("/finch/conversations/timestamps"))
+	if (purple_prefs_get_bool("/finch/conversations/timestamps"))
 		gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(ggconv->tv),
 					purple_utf8_strftime("(%H:%M:%S) ", localtime(&mtime)), GNT_TEXT_FLAG_DIM);
 
@@ -510,8 +685,11 @@
 	for (; users; users = users->next)
 	{
 		PurpleConvChatBuddy *cbuddy = users->data;
+		GntTree *tree = GNT_TREE(ggc->u.chat->userlist);
 		gnt_entry_add_suggest(entry, cbuddy->name);
 		gnt_entry_add_suggest(entry, cbuddy->alias);
+		gnt_tree_add_row_after(tree, g_strdup(cbuddy->name),
+				gnt_tree_create_row(tree, cbuddy->alias), NULL, NULL);
 	}
 }
 
@@ -521,9 +699,13 @@
 	/* Update the name for string completion */
 	FinchConv *ggc = conv->ui_data;
 	GntEntry *entry = GNT_ENTRY(ggc->entry);
+	GntTree *tree = GNT_TREE(ggc->u.chat->userlist);
 	gnt_entry_remove_suggest(entry, old);
 	gnt_entry_add_suggest(entry, new_n);
 	gnt_entry_add_suggest(entry, new_a);
+	gnt_tree_remove(tree, (gpointer)old);
+	gnt_tree_add_row_after(tree, g_strdup(new_n),
+			gnt_tree_create_row(tree, new_a), NULL, NULL);
 }
 
 static void
@@ -532,8 +714,11 @@
 	/* Remove the name from string completion */
 	FinchConv *ggc = conv->ui_data;
 	GntEntry *entry = GNT_ENTRY(ggc->entry);
-	for (; list; list = list->next)
+	for (; list; list = list->next) {
+		GntTree *tree = GNT_TREE(ggc->u.chat->userlist);
 		gnt_entry_remove_suggest(entry, list->data);
+		gnt_tree_remove(tree, list->data);
+	}
 }
 
 static void
@@ -677,6 +862,23 @@
 	return PURPLE_CMD_STATUS_OK;
 }
 
+static PurpleCmdRet
+users_command_cb(PurpleConversation *conv, const char *cmd, char **args, char **error, gpointer data)
+{
+	FinchConv *fc = conv->ui_data;
+	FinchConvChat *ch;
+	if (!fc)
+		return PURPLE_CMD_STATUS_FAILED;
+
+	ch = fc->u.chat;
+	gnt_widget_set_visible(ch->userlist,
+			(GNT_WIDGET_IS_FLAG_SET(ch->userlist, GNT_WIDGET_INVISIBLE)));
+	gnt_box_readjust(GNT_BOX(fc->window));
+	gnt_box_give_focus_to_child(GNT_BOX(fc->window), fc->entry);
+	purple_prefs_set_bool(PREF_USERLIST, !(GNT_WIDGET_IS_FLAG_SET(ch->userlist, GNT_WIDGET_INVISIBLE)));
+	return PURPLE_CMD_STATUS_OK;
+}
+
 void finch_conversation_init()
 {
 	purple_prefs_add_none(PREF_ROOT);
@@ -686,6 +888,8 @@
 	purple_prefs_add_none(PREF_ROOT "/position");
 	purple_prefs_add_int(PREF_ROOT "/position/x", 0);
 	purple_prefs_add_int(PREF_ROOT "/position/y", 0);
+	purple_prefs_add_none(PREF_CHAT);
+	purple_prefs_add_bool(PREF_USERLIST, FALSE);
 
 	/* Xerox the commands */
 	purple_cmd_register("say", "S", PURPLE_CMD_P_DEFAULT,
@@ -703,6 +907,9 @@
 	purple_cmd_register("help", "w", PURPLE_CMD_P_DEFAULT,
 	                  PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, NULL,
 	                  help_command_cb, _("help &lt;command&gt;:  Help on a specific command."), NULL);
+	purple_cmd_register("users", "", PURPLE_CMD_P_DEFAULT,
+	                  PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, NULL,
+	                  users_command_cb, _("users:  Show the list of users in the chat."), NULL);
 
 	/* Now some commands to bring up some other windows */
 	purple_cmd_register("plugins", "", PURPLE_CMD_P_DEFAULT,
--- a/finch/libgnt/gntentry.c	Sat May 05 23:55:29 2007 +0000
+++ b/finch/libgnt/gntentry.c	Sat May 05 23:56:21 2007 +0000
@@ -44,6 +44,29 @@
 }
 
 static gboolean
+complete_suggest(GntEntry *entry, const char *text)
+{
+	gboolean changed = FALSE;
+	if (entry->word) {
+		char *s = get_beginning_of_word(entry);
+		const char *iter = text;
+		while (*iter && toupper(*s) == toupper(*iter)) {
+			if (*s != *iter)
+				changed = TRUE;
+			*s++ = *iter++;
+		}
+		if (*iter) {
+			gnt_entry_key_pressed(GNT_WIDGET(entry), iter);
+			changed = TRUE;
+		}
+	} else {
+		gnt_entry_set_text_internal(entry, text);
+		changed = TRUE;
+	}
+	return changed;
+}
+
+static gboolean
 show_suggest_dropdown(GntEntry *entry)
 {
 	char *suggest = NULL;
@@ -51,6 +74,8 @@
 	int offset = 0, x, y;
 	int count = 0;
 	GList *iter;
+	const char *text = NULL;
+	const char *sgst = NULL;
 
 	if (entry->word)
 	{
@@ -85,24 +110,28 @@
 
 	for (count = 0, iter = entry->suggests; iter; iter = iter->next)
 	{
-		const char *text = iter->data;
+		text = iter->data;
 		if (g_ascii_strncasecmp(suggest, text, len) == 0 && strlen(text) >= len)
 		{
 			gnt_tree_add_row_after(GNT_TREE(entry->ddown), (gpointer)text,
 					gnt_tree_create_row(GNT_TREE(entry->ddown), text),
 					NULL, NULL);
 			count++;
+			sgst = text;
 		}
 	}
 	g_free(suggest);
 
-	if (count == 0)
-	{
+	if (count == 0) {
 		destroy_suggest(entry);
 		return FALSE;
+	} else if (count == 1) {
+		destroy_suggest(entry);
+		return complete_suggest(entry, sgst);
+	} else {
+		gnt_widget_draw(entry->ddown->parent);
 	}
 
-	gnt_widget_draw(entry->ddown->parent);
 	return TRUE;
 }
 
@@ -324,10 +353,7 @@
 {
 	GntEntry *entry = GNT_ENTRY(bind);
 	if (entry->ddown) {
-		if (g_list_length(GNT_TREE(entry->ddown)->list) == 1)
-			gnt_entry_key_pressed(GNT_WIDGET(entry), "\r");
-		else
-			gnt_bindable_perform_action_named(GNT_BINDABLE(entry->ddown), "move-down");
+		gnt_bindable_perform_action_named(GNT_BINDABLE(entry->ddown), "move-down");
 		return TRUE;
 	}
 	return show_suggest_dropdown(entry);
@@ -512,33 +538,11 @@
 	}
 	else
 	{
-		if (text[0] == '\t')
-		{
-			if (entry->ddown)
-				destroy_suggest(entry);
-			else if (entry->suggests)
-				return show_suggest_dropdown(entry);
-
-			return FALSE;
-		}
-		else if (text[0] == '\r' && entry->ddown)
+		if ((text[0] == '\r' || text[0] == ' ') && entry->ddown)
 		{
 			char *text = g_strdup(gnt_tree_get_selection_data(GNT_TREE(entry->ddown)));
 			destroy_suggest(entry);
-			if (entry->word)
-			{
-				char *s = get_beginning_of_word(entry);
-				char *iter = text;
-				while (*iter && toupper(*s) == toupper(*iter))
-				{
-					*s++ = *iter++;
-				}
-				gnt_entry_key_pressed(widget, iter);
-			}
-			else
-			{
-				gnt_entry_set_text_internal(entry, text);
-			}
+			complete_suggest(entry, text);
 			g_free(text);
 			entry_text_changed(entry);
 			return TRUE;
--- a/finch/libgnt/gntmain.c	Sat May 05 23:55:29 2007 +0000
+++ b/finch/libgnt/gntmain.c	Sat May 05 23:56:21 2007 +0000
@@ -12,13 +12,16 @@
 
 #include "gnt.h"
 #include "gntbox.h"
+#include "gntbutton.h"
 #include "gntcolors.h"
 #include "gntclipboard.h"
 #include "gntkeys.h"
+#include "gntlabel.h"
 #include "gntmenu.h"
 #include "gntstyle.h"
 #include "gnttree.h"
 #include "gntutils.h"
+#include "gntwindow.h"
 #include "gntwm.h"
 
 #include <panel.h>
@@ -303,6 +306,49 @@
 }
 
 static void
+exit_confirmed(gpointer null)
+{
+	gnt_bindable_perform_action_named(GNT_BINDABLE(wm), "wm-quit", NULL);
+}
+
+static void
+exit_win_close(GntWidget *w, GntWidget **win)
+{
+	*win = NULL;
+}
+
+static void
+ask_before_exit()
+{
+	static GntWidget *win = NULL;
+	GntWidget *bbox, *button;
+
+	if (win)
+		goto raise;
+
+	win = gnt_vwindow_new(FALSE);
+	gnt_box_add_widget(GNT_BOX(win), gnt_label_new("Are you sure you want to quit?"));
+	gnt_box_set_title(GNT_BOX(win), "Quit?");
+	gnt_box_set_alignment(GNT_BOX(win), GNT_ALIGN_MID);
+	g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK(exit_win_close), &win);
+
+	bbox = gnt_hbox_new(FALSE);
+	gnt_box_add_widget(GNT_BOX(win), bbox);
+
+	button = gnt_button_new("Quit");
+	g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(exit_confirmed), NULL);
+	gnt_box_add_widget(GNT_BOX(bbox), button);
+
+	button = gnt_button_new("Cancel");
+	g_signal_connect_swapped(G_OBJECT(button), "activate", G_CALLBACK(gnt_widget_destroy), win);
+	gnt_box_add_widget(GNT_BOX(bbox), button);
+
+	gnt_widget_show(win);
+raise:
+	gnt_wm_raise_window(wm, win);
+}
+
+static void
 sighandler(int sig)
 {
 	switch (sig) {
@@ -318,6 +364,10 @@
 		clean_pid();
 		signal(SIGCHLD, sighandler);
 		break;
+	case SIGINT:
+		ask_before_exit();
+		signal(SIGINT, sighandler);
+		break;
 	}
 }
 
@@ -387,6 +437,7 @@
 	signal(SIGWINCH, sighandler);
 #endif
 	signal(SIGCHLD, sighandler);
+	signal(SIGINT, sighandler);
 	signal(SIGPIPE, SIG_IGN);
 
 	g_type_init();
--- a/finch/libgnt/wms/Makefile.am	Sat May 05 23:55:29 2007 +0000
+++ b/finch/libgnt/wms/Makefile.am	Sat May 05 23:56:21 2007 +0000
@@ -15,7 +15,6 @@
 
 AM_CPPFLAGS = \
 	-DDATADIR=\"$(datadir)\" \
-	-DVERSION=\"$(VERSION)\" \
 	-I$(top_srcdir)/libpurple \
 	-I$(top_srcdir)/finch \
 	-I$(top_srcdir)/finch/libgnt \
--- a/finch/plugins/Makefile.am	Sat May 05 23:55:29 2007 +0000
+++ b/finch/plugins/Makefile.am	Sat May 05 23:56:21 2007 +0000
@@ -32,7 +32,6 @@
 
 AM_CPPFLAGS = \
 	-DDATADIR=\"$(datadir)\" \
-	-DVERSION=\"$(VERSION)\" \
 	-I$(top_builddir)/libpurple \
 	-I$(top_srcdir)/libpurple \
 	-I$(top_srcdir) \
--- a/libpurple/buddyicon.c	Sat May 05 23:55:29 2007 +0000
+++ b/libpurple/buddyicon.c	Sat May 05 23:56:21 2007 +0000
@@ -279,6 +279,7 @@
 	icon->account = account;
 	icon->username = g_strdup(username);
 	icon->checksum = NULL;
+	icon->ref_count = 1;
 
 	icon_cache = g_hash_table_lookup(account_cache, account);
 
@@ -653,7 +654,6 @@
 				const char *checksum;
 
 				icon = purple_buddy_icon_create(account, username);
-				icon->ref_count = 0;
 				icon->img = NULL;
 				checksum = purple_blist_node_get_string((PurpleBlistNode*)b, "icon_checksum");
 				purple_buddy_icon_set_data(icon, data, len, checksum);
--- a/libpurple/dnssrv.c	Sat May 05 23:55:29 2007 +0000
+++ b/libpurple/dnssrv.c	Sat May 05 23:56:21 2007 +0000
@@ -192,11 +192,19 @@
 	PurpleSrvCallback cb = query_data->cb;
 	int status;
 
-	read(source, &size, sizeof(int));
-	purple_debug_info("dnssrv","found %d SRV entries\n", size);
-	tmp = res = g_new0(PurpleSrvResponse, size);
-	for (i = 0; i < size; i++) {
-		read(source, tmp++, sizeof(PurpleSrvResponse));
+	if (read(source, &size, sizeof(int)) > 0)
+	{
+		purple_debug_info("dnssrv","found %d SRV entries\n", size);
+		tmp = res = g_new0(PurpleSrvResponse, size);
+		for (i = 0; i < size; i++) {
+			read(source, tmp++, sizeof(PurpleSrvResponse));
+		}
+	}
+	else
+	{
+		purple_debug_info("dnssrv","found 0 SRV entries; errno is %i\n", errno);
+		size = 0;
+		res = NULL;
 	}
 
 	cb(res, size, query_data->extradata);
--- a/libpurple/internal.h	Sat May 05 23:55:29 2007 +0000
+++ b/libpurple/internal.h	Sat May 05 23:56:21 2007 +0000
@@ -183,6 +183,7 @@
 #define purple_strlcat(dest, src) g_strlcat(dest, src, sizeof(dest))
 
 #define PURPLE_WEBSITE "http://pidgin.im/"
+#define PURPLE_DEVEL_WEBSITE "http://developer.pidgin.im/"
 
 /* This is for the accounts code to notify the buddy icon code that
  * it's done loading.  We may want to replace this with a signal. */
--- a/libpurple/nat-pmp.c	Sat May 05 23:55:29 2007 +0000
+++ b/libpurple/nat-pmp.c	Sat May 05 23:56:21 2007 +0000
@@ -29,64 +29,58 @@
  */
 
 #include "nat-pmp.h"
+#include "internal.h"
 #include "debug.h"
 #include "signals.h"
 #include "network.h"
 
-#include <sys/types.h>
-#ifndef _WIN32
-#include <arpa/inet.h>
-#include <netinet/in.h>
-#include <sys/socket.h>
+#ifdef HAVE_SYS_SYSCTL_H
 #include <sys/sysctl.h>
-
-#include <net/if.h>
-#include <net/route.h>
-
-#include <netdb.h>
-#include <err.h>
 #endif
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
 
-#include <errno.h>
+/* We will need sysctl() and NET_RT_DUMP, both of which are not present
+ * on all platforms, to continue. */
+#if defined(HAVE_SYS_SYSCTL_H) && defined(NET_RT_DUMP)
 
-#ifdef NET_RT_DUMP
+#include <sys/types.h>
+#include <net/route.h>
 
 #define PMP_DEBUG	1
 
 typedef struct {
-	uint8_t	version;
-	uint8_t opcode;
+	guint8	version;
+	guint8 opcode;
 } PurplePmpIpRequest;
 
 typedef struct {
-	uint8_t		version;
-	uint8_t		opcode; /* 128 + n */
-	uint16_t	resultcode;
-	uint32_t	epoch;
-	uint32_t	address;
+	guint8		version;
+	guint8		opcode; /* 128 + n */
+	guint16		resultcode;
+	guint32		epoch;
+	guint32		address;
 } PurplePmpIpResponse;
 
 typedef struct {
-	uint8_t		version;
-	uint8_t		opcode;
+	guint8		version;
+	guint8		opcode;
 	char		reserved[2];
-	uint16_t	privateport;
-	uint16_t	publicport;
-	uint32_t	lifetime;
+	guint16		privateport;
+	guint16		publicport;
+	guint32		lifetime;
 } PurplePmpMapRequest;
 
 struct _PurplePmpMapResponse {
-	uint8_t		version;
-	uint8_t		opcode;
-	uint16_t	resultcode;
-	uint32_t	epoch;
-	uint16_t	privateport;
-	uint16_t	publicport;
-	uint32_t	lifetime;
+	guint8		version;
+	guint8		opcode;
+	guint16		resultcode;
+	guint32		epoch;
+	guint16		privateport;
+	guint16		publicport;
+	guint32		lifetime;
 };
 
 typedef struct _PurplePmpMapResponse PurplePmpMapResponse;
@@ -549,4 +543,4 @@
 {
 
 }
-#endif /* #ifndef NET_RT_DUMP */
+#endif /* #if !(defined(HAVE_SYS_SYCTL_H) && defined(NET_RT_DUMP)) */
--- a/libpurple/nat-pmp.h	Sat May 05 23:55:29 2007 +0000
+++ b/libpurple/nat-pmp.h	Sat May 05 23:56:21 2007 +0000
@@ -31,7 +31,6 @@
 #ifndef _PURPLE_NAT_PMP_H
 #define _PURPLE_NAT_PMP_H
 
-#include <stdint.h>
 #include <glib.h>
 
 #define PURPLE_PMP_LIFETIME	3600	/* 3600 seconds */
--- a/libpurple/plugins/Makefile.am	Sat May 05 23:55:29 2007 +0000
+++ b/libpurple/plugins/Makefile.am	Sat May 05 23:56:21 2007 +0000
@@ -127,7 +127,6 @@
 
 AM_CPPFLAGS = \
 	-DDATADIR=\"$(datadir)\" \
-	-DVERSION=\"$(VERSION)\" \
 	-I$(top_srcdir)/libpurple \
 	-I$(top_builddir)/libpurple \
 	$(DEBUG_CFLAGS) \
--- a/libpurple/plugins/mono/loader/Makefile.am	Sat May 05 23:55:29 2007 +0000
+++ b/libpurple/plugins/mono/loader/Makefile.am	Sat May 05 23:56:21 2007 +0000
@@ -17,7 +17,6 @@
 mono_la_LIBADD = $(MONO_LIBS)
 
 AM_CPPFLAGS = \
-	-DVERSION=\"$(VERSION)\" \
 	-I$(top_srcdir) \
 	-I$(top_srcdir)/libpurple \
 	$(DEBUG_CFLAGS) \
--- a/libpurple/plugins/perl/Makefile.am	Sat May 05 23:55:29 2007 +0000
+++ b/libpurple/plugins/perl/Makefile.am	Sat May 05 23:56:21 2007 +0000
@@ -152,7 +152,6 @@
 	fi
 
 AM_CPPFLAGS = \
-	-DVERSION=\"$(VERSION)\" \
 	-I$(top_srcdir) \
 	-I$(top_srcdir)/libpurple \
 	-I$(top_builddir)/libpurple \
--- a/libpurple/plugins/psychic.c	Sat May 05 23:55:29 2007 +0000
+++ b/libpurple/plugins/psychic.c	Sat May 05 23:56:21 2007 +0000
@@ -21,7 +21,7 @@
 #define PLUGIN_SUMMARY  N_("Psychic mode for incoming conversation")
 #define PLUGIN_DESC     N_("Causes conversation windows to appear as other" \
 			   " users begin to message you.  This works for" \
-			   " AIM, ICQ, Jabber, Sametime, and Yahoo!")
+			   " AIM, ICQ, XMPP, Sametime, and Yahoo!")
 #define PLUGIN_AUTHOR   "Christopher O'Brien <siege@preoccupied.net>"
 
 
--- a/libpurple/plugins/tcl/Makefile.am	Sat May 05 23:55:29 2007 +0000
+++ b/libpurple/plugins/tcl/Makefile.am	Sat May 05 23:56:21 2007 +0000
@@ -12,7 +12,6 @@
 EXTRA_DIST = signal-test.tcl Makefile.mingw
 
 AM_CPPFLAGS = \
-	-DVERSION=\"$(VERSION)\" \
 	-I$(top_srcdir) \
 	-I$(top_srcdir)/libpurple \
 	-I$(top_builddir)/libpurple \
--- a/libpurple/protocols/bonjour/bonjour.c	Sat May 05 23:55:29 2007 +0000
+++ b/libpurple/protocols/bonjour/bonjour.c	Sat May 05 23:56:21 2007 +0000
@@ -602,7 +602,7 @@
 	option = purple_account_option_string_new(_("AIM Account"), "AIM", "");
 	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
 
-	option = purple_account_option_string_new(_("Jabber Account"), "jid", "");
+	option = purple_account_option_string_new(_("XMPP Account"), "jid", "");
 	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
 
 	my_protocol = plugin;
--- a/libpurple/protocols/irc/Makefile.am	Sat May 05 23:55:29 2007 +0000
+++ b/libpurple/protocols/irc/Makefile.am	Sat May 05 23:56:21 2007 +0000
@@ -1,4 +1,4 @@
-EXTRA_DIST = PROTOCOL Makefile.mingw
+EXTRA_DIST = Makefile.mingw
 
 pkgdir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
 
--- a/libpurple/protocols/jabber/buddy.c	Sat May 05 23:55:29 2007 +0000
+++ b/libpurple/protocols/jabber/buddy.c	Sat May 05 23:56:21 2007 +0000
@@ -575,8 +575,8 @@
 	if(x_vc_data != NULL)
 		xmlnode_free(x_vc_data);
 
-	purple_request_fields(gc, _("Edit Jabber vCard"),
-						_("Edit Jabber vCard"),
+	purple_request_fields(gc, _("Edit XMPP vCard"),
+						_("Edit XMPP vCard"),
 						_("All items below are optional. Enter only the "
 						  "information with which you feel comfortable."),
 						fields,
@@ -1729,7 +1729,7 @@
 		if(!instructions)
 		{
 			instructions = g_strdup(_("Fill in one or more fields to search "
-						  "for any matching Jabber users."));
+						  "for any matching XMPP users."));
 		}
 
 		if(xmlnode_get_child(query, "first")) {
@@ -1757,8 +1757,8 @@
 		usi->js = js;
 		usi->directory_server = g_strdup(from);
 
-		purple_request_fields(js->gc, _("Search for Jabber users"),
-				_("Search for Jabber users"), instructions, fields,
+		purple_request_fields(js->gc, _("Search for XMPP users"),
+				_("Search for XMPP users"), instructions, fields,
 				_("Search"), G_CALLBACK(user_search_cb),
 				_("Cancel"), G_CALLBACK(user_search_cancel_cb),
 				NULL, NULL, NULL,
--- a/libpurple/protocols/jabber/jabber.c	Sat May 05 23:55:29 2007 +0000
+++ b/libpurple/protocols/jabber/jabber.c	Sat May 05 23:56:21 2007 +0000
@@ -562,7 +562,7 @@
 	js->write_buffer = purple_circ_buffer_new(512);
 
 	if(!js->user) {
-		purple_connection_error(gc, _("Invalid Jabber ID"));
+		purple_connection_error(gc, _("Invalid XMPP ID"));
 		return;
 	}
 
@@ -868,8 +868,8 @@
 			instructions = g_strdup(_("Please fill out the information below "
 						"to register your new account."));
 
-		purple_request_fields(js->gc, _("Register New Jabber Account"),
-				_("Register New Jabber Account"), instructions, fields,
+		purple_request_fields(js->gc, _("Register New XMPP Account"),
+				_("Register New XMPP Account"), instructions, fields,
 				_("Register"), G_CALLBACK(jabber_register_cb),
 				_("Cancel"), G_CALLBACK(jabber_register_cancel_cb),
 				purple_connection_get_account(js->gc), NULL, NULL,
@@ -907,7 +907,7 @@
 	js->next_id = g_random_int();
 
 	if(!js->user) {
-		purple_connection_error(gc, _("Invalid Jabber ID"));
+		purple_connection_error(gc, _("Invalid XMPP ID"));
 		return;
 	}
 
@@ -1374,8 +1374,8 @@
 	purple_request_field_string_set_masked(field, TRUE);
 	purple_request_field_group_add_field(group, field);
 
-	purple_request_fields(js->gc, _("Change Jabber Password"),
-			_("Change Jabber Password"), _("Please enter your new password"),
+	purple_request_fields(js->gc, _("Change XMPP Password"),
+			_("Change XMPP Password"), _("Please enter your new password"),
 			fields, _("OK"), G_CALLBACK(jabber_password_change_cb),
 			_("Cancel"), NULL,
 			purple_connection_get_account(gc), NULL, NULL,			  
@@ -1489,7 +1489,7 @@
 		} else if(xmlnode_get_child(error, "item-not-found")) {
 			text = _("Item Not Found");
 		} else if(xmlnode_get_child(error, "jid-malformed")) {
-			text = _("Malformed Jabber ID");
+			text = _("Malformed XMPP ID");
 		} else if(xmlnode_get_child(error, "not-acceptable")) {
 			text = _("Not Acceptable");
 		} else if(xmlnode_get_child(error, "not-allowed")) {
--- a/libpurple/protocols/jabber/libxmpp.c	Sat May 05 23:55:29 2007 +0000
+++ b/libpurple/protocols/jabber/libxmpp.c	Sat May 05 23:56:21 2007 +0000
@@ -163,9 +163,9 @@
 	"XMPP",                                           /**< name           */
 	VERSION,                                          /**< version        */
 	                                                  /**  summary        */
-	N_("Jabber Protocol Plugin"),
+	N_("XMPP Protocol Plugin"),
 	                                                  /**  description    */
-	N_("Jabber Protocol Plugin"),
+	N_("XMPP Protocol Plugin"),
 	NULL,                                             /**< author         */
 	PURPLE_WEBSITE,                                     /**< homepage       */
 
--- a/libpurple/protocols/jabber/message.c	Sat May 05 23:55:29 2007 +0000
+++ b/libpurple/protocols/jabber/message.c	Sat May 05 23:56:21 2007 +0000
@@ -86,7 +86,6 @@
 			PurpleConversation *conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM,
 					from, jm->js->gc->account);
 			if (conv && jid->node && jid->domain) {
-#if 0  /* String freeze... make sure to mark the message for translation */
 				char buf[256];
 				PurpleBuddy *buddy;
 
@@ -100,7 +99,7 @@
 					escaped = g_markup_escape_text(who, -1);
 
 					g_snprintf(buf, sizeof(buf),
-					           "%s has left the conversation.", escaped);
+					           _("%s has left the conversation."), escaped);
 
 					/* At some point when we restructure PurpleConversation,
 					 * this should be able to be implemented by removing the
@@ -108,7 +107,6 @@
 					purple_conversation_write(conv, "", buf,
 					                        PURPLE_MESSAGE_SYSTEM, time(NULL));
 				}
-#endif
 			}
 			serv_got_typing_stopped(jm->js->gc, from);
 			
@@ -269,7 +267,7 @@
 	buf = g_strdup_printf(_("Message delivery to %s failed: %s"),
 			jm->from, jm->error ? jm->error : "");
 
-	purple_notify_formatted(jm->js->gc, _("Jabber Message Error"), _("Jabber Message Error"), buf,
+	purple_notify_formatted(jm->js->gc, _("XMPP Message Error"), _("XMPP Message Error"), buf,
 			jm->xhtml ? jm->xhtml : jm->body, NULL, NULL);
 
 	g_free(buf);
--- a/libpurple/protocols/msn/msn.c	Sat May 05 23:55:29 2007 +0000
+++ b/libpurple/protocols/msn/msn.c	Sat May 05 23:56:21 2007 +0000
@@ -368,6 +368,15 @@
 					   data);
 }
 
+static gboolean
+msn_offline_message(const PurpleBuddy *buddy) {
+	MsnUser *user;
+	if (buddy == NULL)
+		return FALSE;
+	user = buddy->proto_data;
+	return user && user->mobile;
+}
+
 static void
 initiate_chat_cb(PurpleBlistNode *node, gpointer data)
 {
@@ -2065,7 +2074,7 @@
 	msn_can_receive_file,	/* can_receive_file */
 	msn_send_file,			/* send_file */
 	msn_new_xfer,			/* new_xfer */
-	NULL,					/* offline_message */
+	msn_offline_message,			/* offline_message */
 	NULL,					/* whiteboard_prpl_ops */
 	NULL,					/* send_raw */
 	NULL,					/* roomlist_room_serialize */
--- a/libpurple/protocols/msn/user.c	Sat May 05 23:55:29 2007 +0000
+++ b/libpurple/protocols/msn/user.c	Sat May 05 23:56:21 2007 +0000
@@ -83,7 +83,7 @@
 
 	if (user->status != NULL) {
 		if (!strcmp(user->status, "offline") && user->mobile) {
-			purple_prpl_got_user_status(account, user->passport, "available", NULL);
+			purple_prpl_got_user_status(account, user->passport, "offline", NULL);
 			purple_prpl_got_user_status(account, user->passport, "mobile", NULL);
 		} else {
 			purple_prpl_got_user_status(account, user->passport, user->status, NULL);
--- a/libpurple/protocols/oscar/family_feedbag.c	Sat May 05 23:55:29 2007 +0000
+++ b/libpurple/protocols/oscar/family_feedbag.c	Sat May 05 23:56:21 2007 +0000
@@ -588,9 +588,7 @@
 	od->ssi.waiting_for_ack = TRUE;
 
 	/* Now go mail off our data and wait 4 to 6 weeks */
-	aim_ssi_addmoddel(od);
-
-	return 0;
+	return aim_ssi_addmoddel(od);;
 }
 
 /**
@@ -714,9 +712,7 @@
 		aim_ssi_itemlist_del(&od->ssi.local, cur);
 
 	/* If we've made any changes then sync our list with the server's */
-	aim_ssi_sync(od);
-
-	return 0;
+	return aim_ssi_sync(od);
 }
 
 /**
@@ -769,9 +765,7 @@
 	aim_ssi_itemlist_rebuildgroup(od->ssi.local, group);
 
 	/* Sync our local list with the server list */
-	aim_ssi_sync(od);
-
-	return 0;
+	return aim_ssi_sync(od);
 }
 
 /**
@@ -795,9 +789,7 @@
 	aim_ssi_itemlist_add(&od->ssi.local, name, 0x0000, 0xFFFF, AIM_SSI_TYPE_PERMIT, NULL);
 
 	/* Sync our local list with the server list */
-	aim_ssi_sync(od);
-
-	return 0;
+	return aim_ssi_sync(od);
 }
 
 /**
@@ -821,9 +813,7 @@
 	aim_ssi_itemlist_add(&od->ssi.local, name, 0x0000, 0xFFFF, AIM_SSI_TYPE_DENY, NULL);
 
 	/* Sync our local list with the server list */
-	aim_ssi_sync(od);
-
-	return 0;
+	return aim_ssi_sync(od);
 }
 
 /**
@@ -865,9 +855,7 @@
 	}
 
 	/* Sync our local list with the server list */
-	aim_ssi_sync(od);
-
-	return 0;
+	return aim_ssi_sync(od);
 }
 
 /**
@@ -892,9 +880,7 @@
 	aim_ssi_itemlist_del(&od->ssi.local, del);
 
 	/* Sync our local list with the server list */
-	aim_ssi_sync(od);
-
-	return 0;
+	return aim_ssi_sync(od);
 }
 
 /**
@@ -919,9 +905,7 @@
 	aim_ssi_itemlist_del(&od->ssi.local, del);
 
 	/* Sync our local list with the server list */
-	aim_ssi_sync(od);
-
-	return 0;
+	return aim_ssi_sync(od);
 }
 
 /**
@@ -977,9 +961,7 @@
 		aim_tlvlist_remove(&tmp->data, 0x0131);
 
 	/* Sync our local list with the server list */
-	aim_ssi_sync(od);
-
-	return 0;
+	return aim_ssi_sync(od);
 }
 
 /**
@@ -1009,9 +991,7 @@
 		aim_tlvlist_remove(&tmp->data, 0x013c);
 
 	/* Sync our local list with the server list */
-	aim_ssi_sync(od);
-
-	return 0;
+	return aim_ssi_sync(od);
 }
 
 /**
@@ -1037,9 +1017,7 @@
 	strcpy(group->name, newgn);
 
 	/* Sync our local list with the server list */
-	aim_ssi_sync(od);
-
-	return 0;
+	return aim_ssi_sync(od);
 }
 
 /**
@@ -1079,9 +1057,7 @@
 	aim_tlvlist_replace_32(&tmp->data, 0x00cb, vismask);
 
 	/* Sync our local list with the server list */
-	aim_ssi_sync(od);
-
-	return 0;
+	return aim_ssi_sync(od);
 }
 
 /**
@@ -1171,9 +1147,7 @@
 	aim_tlvlist_replace_32(&tmp->data, 0x00c9, presence);
 
 	/* Sync our local list with the server list */
-	aim_ssi_sync(od);
-
-	return 0;
+	return aim_ssi_sync(od);
 }
 
 /*
--- a/libpurple/protocols/oscar/oscar.c	Sat May 05 23:55:29 2007 +0000
+++ b/libpurple/protocols/oscar/oscar.c	Sat May 05 23:56:21 2007 +0000
@@ -5098,7 +5098,6 @@
 	purple_debug_info("oscar",
 			   "ssi: %s has given you permission to add him to your buddy list\n", sn);
 
-	/* XXX Should data->nick store the alias and nombre just have the sn? -evands */
 	buddy = purple_find_buddy(gc->account, sn);
 	if (buddy && (purple_buddy_get_alias_only(buddy)))
 		nombre = g_strdup_printf("%s (%s)", sn, purple_buddy_get_alias_only(buddy));
@@ -5106,10 +5105,12 @@
 		nombre = g_strdup(sn);
 
 	dialog_msg = g_strdup_printf(_("The user %s has given you permission to add you to their buddy list.  Do you want to add them?"), nombre);
+	g_free(nombre);
+
 	data = g_new(struct name_data, 1);
 	data->gc = gc;
 	data->name = g_strdup(sn);
-	data->nick = NULL;
+	data->nick = (buddy ? g_strdup(purple_buddy_get_alias_only(buddy)) : NULL);
 
 	purple_request_yes_no(gc, NULL, _("Authorization Given"), dialog_msg,
 						PURPLE_DEFAULT_ACTION_NONE,
@@ -5117,9 +5118,7 @@
 						data,
 						G_CALLBACK(purple_icq_buddyadd),
 						G_CALLBACK(oscar_free_name_data));
-
 	g_free(dialog_msg);
-	g_free(nombre);
 
 	return 1;
 }
@@ -5130,7 +5129,6 @@
 	char *sn;
 	char *msg;
 	PurpleAccount *account = purple_connection_get_account(gc);
-	gchar *nombre;
 	gchar *reason = NULL;
 	struct name_data *data;
 	PurpleBuddy *buddy;
@@ -5144,10 +5142,6 @@
 			   "ssi: received authorization request from %s\n", sn);
 
 	buddy = purple_find_buddy(account, sn);
-	if (buddy && (purple_buddy_get_alias_only(buddy)))
-		nombre = g_strdup_printf("%s (%s)", sn, purple_buddy_get_alias_only(buddy));
-	else
-		nombre = g_strdup(sn);
 
 	if (msg != NULL)
 		reason = purple_plugin_oscar_decode_im_part(account, sn, AIM_CHARSET_CUSTOM, 0x0000, msg, strlen(msg));
@@ -5155,12 +5149,12 @@
 	data = g_new(struct name_data, 1);
 	data->gc = gc;
 	data->name = g_strdup(sn);
-	data->nick = NULL;
-
-	purple_account_request_authorization(account, nombre, NULL, NULL,
+	data->nick = (buddy ? g_strdup(purple_buddy_get_alias_only(buddy)) : NULL);
+
+	purple_account_request_authorization(account, sn, NULL,
+			(buddy ? purple_buddy_get_alias_only(buddy) : NULL),
 			reason, buddy != NULL, G_CALLBACK(purple_auth_grant),
 			G_CALLBACK(purple_auth_dontgrant_msgprompt), data);
-	g_free(nombre);
 	g_free(reason);
 
 	return 1;
@@ -5791,8 +5785,8 @@
 	comment_utf8 = comment ? oscar_utf8_try_convert(gc->account, comment) : NULL;
 
 	data->gc = gc;
-	data->name = g_strdup(buddy->name);
-	data->nick = NULL;
+	data->name = g_strdup(purple_buddy_get_name(buddy));
+	data->nick = g_strdup(purple_buddy_get_alias_only(buddy));
 
 	title = g_strdup_printf(_("Buddy Comment for %s"), data->name);
 	purple_request_input(gc, title, _("Buddy Comment:"), NULL,
--- a/libpurple/protocols/qq/Makefile.am	Sat May 05 23:55:29 2007 +0000
+++ b/libpurple/protocols/qq/Makefile.am	Sat May 05 23:56:21 2007 +0000
@@ -94,7 +94,6 @@
 AM_CPPFLAGS = \
 	-I$(top_srcdir)/libpurple \
 	-I$(top_builddir)/libpurple \
-	-DVERSION=\"$(VERSION)\" \
 	-DQQ_BUDDY_ICON_DIR=\"$(datadir)/pixmaps/purple/buddy_icons/qq\" \
 	$(DEBUG_CFLAGS) \
 	$(GLIB_CFLAGS)
--- a/libpurple/prpl.h	Sat May 05 23:55:29 2007 +0000
+++ b/libpurple/prpl.h	Sat May 05 23:56:21 2007 +0000
@@ -99,7 +99,7 @@
 	/**
 	 * Use a unique name, not an alias, for chat rooms.
 	 *
-	 * Jabber lets you choose what name you want for chat.
+	 * XMPP lets you choose what name you want for chat.
 	 * So it shouldn't be pulling the alias for when you're in chat;
 	 * it gets annoying.
 	 */
@@ -108,7 +108,7 @@
 	/**
 	 * Chat rooms have topics.
 	 *
-	 * IRC and Jabber support this.
+	 * IRC and XMPP support this.
 	 */
 	OPT_PROTO_CHAT_TOPIC = 0x00000008,
 
@@ -145,7 +145,7 @@
 	/**
 	 * Allows font size to be specified in sane point size
 	 *
-	 * Probably just Jabber and Y!M
+	 * Probably just XMPP and Y!M
 	 */
 	OPT_PROTO_USE_POINTSIZE = 0x00000100,
 
--- a/pidgin.apspec.in	Sat May 05 23:55:29 2007 +0000
+++ b/pidgin.apspec.in	Sat May 05 23:56:21 2007 +0000
@@ -14,7 +14,7 @@
 
 [Description]
 Pidgin allows you to talk to anyone using a variety of messaging protocols,
-including AIM (Oscar and TOC), ICQ, IRC, Yahoo!, MSN Messenger, Jabber,
+including AIM (Oscar and TOC), ICQ, IRC, Yahoo!, MSN Messenger, XMPP,
 Gadu-Gadu, and Zephyr. These protocols are implemented using a
 modular, easy to use design. To use a protocol, just add an account using the
 account editor.
--- a/pidgin.spec.in	Sat May 05 23:55:29 2007 +0000
+++ b/pidgin.spec.in	Sat May 05 23:56:21 2007 +0000
@@ -132,7 +132,7 @@
 
 %description
 Pidgin allows you to talk to anyone using a variety of messaging
-protocols including AIM, MSN, Yahoo!, Jabber, Bonjour, Gadu-Gadu,
+protocols including AIM, MSN, Yahoo!, XMPP, Bonjour, Gadu-Gadu,
 ICQ, IRC, Novell Groupwise, QQ, Lotus Sametime, SILC, Simple and
 Zephyr.  These protocols are implemented using a modular, easy to
 use design.  To use a protocol, just add an account using the
@@ -154,7 +154,7 @@
 and Finch.
 
 libpurple supports a variety of messaging protocols including AIM, MSN,
-Yahoo!, Jabber, Bonjour, Gadu-Gadu, ICQ, IRC, Novell Groupwise, QQ,
+Yahoo!, XMPP, Bonjour, Gadu-Gadu, ICQ, IRC, Novell Groupwise, QQ,
 Lotus Sametime, SILC, Simple and Zephyr.
 
 %description -n libpurple-devel
--- a/pidgin/Makefile.am	Sat May 05 23:55:29 2007 +0000
+++ b/pidgin/Makefile.am	Sat May 05 23:56:21 2007 +0000
@@ -27,6 +27,7 @@
 		win32/nsis/pidgin-installer.nsi \
 		win32/nsis/pidgin-plugin.nsh \
 		win32/nsis/langmacros.nsh \
+		win32/nsis/translations/afrikaans.nsh \
 		win32/nsis/translations/albanian.nsh \
 		win32/nsis/translations/bulgarian.nsh \
 		win32/nsis/translations/catalan.nsh \
--- a/pidgin/gtkblist.c	Sat May 05 23:55:29 2007 +0000
+++ b/pidgin/gtkblist.c	Sat May 05 23:56:21 2007 +0000
@@ -4881,7 +4881,12 @@
 	status = pidgin_blist_get_status_icon((PurpleBlistNode*)buddy,
 						PIDGIN_STATUS_ICON_SMALL);
 
-	avatar = pidgin_blist_get_buddy_icon((PurpleBlistNode *)buddy, TRUE, TRUE);
+	/* Speed it up if we don't want buddy icons. */
+	if(biglist)
+		avatar = pidgin_blist_get_buddy_icon((PurpleBlistNode *)buddy, TRUE, TRUE);
+	else
+		avatar = NULL;
+
 	if (!avatar) {
 		g_object_ref(G_OBJECT(gtkblist->empty_avatar));
 		avatar = gtkblist->empty_avatar;
@@ -5059,6 +5064,7 @@
 		GdkPixbuf *avatar;
 		GdkPixbuf *emblem;
 		char *mark;
+		gboolean showicons = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons");
 
 		if(!insert_node(list, node, &iter))
 			return;
@@ -5066,7 +5072,12 @@
 		status = pidgin_blist_get_status_icon(node,
 				 PIDGIN_STATUS_ICON_SMALL);
 		emblem = pidgin_blist_get_emblem(node);
-		avatar = pidgin_blist_get_buddy_icon(node, TRUE, FALSE);
+
+		/* Speed it up if we don't want buddy icons. */
+		if(showicons)
+			avatar = pidgin_blist_get_buddy_icon(node, TRUE, FALSE);
+		else
+			avatar = NULL;
 
 		mark = g_markup_escape_text(purple_chat_get_name(chat), -1);
 
--- a/pidgin/gtkdialogs.c	Sat May 05 23:55:29 2007 +0000
+++ b/pidgin/gtkdialogs.c	Sat May 05 23:56:21 2007 +0000
@@ -112,7 +112,7 @@
 	{"Adam Fritzler",		N_("libfaim maintainer"), NULL},
 	/* If "lazy bum" translates literally into a serious insult, use something else or omit it. */
 	{"Syd Logan",			N_("hacker and designated driver [lazy bum]"), NULL},
-	{"Jim Seymour",			N_("Jabber developer"), NULL},
+	{"Jim Seymour",			N_("XMPP developer"), NULL},
 	{"Mark Spencer",		N_("original author"), "markster@marko.net"},
 	{"Eric Warmenhoven",	N_("lead developer"), "warmenhoven@yahoo.com"},
 	{NULL, NULL, NULL}
@@ -361,7 +361,7 @@
 
 	g_string_append_printf(str,
 		_("%s is a modular messaging client capable of using "
-		  "AIM, MSN, Yahoo!, Jabber, ICQ, IRC, SILC, SIP/SIMPLE, "
+		  "AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, "
 		  "Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, "
 		  "Gadu-Gadu, and QQ all at once.  "
 		  "It is written using GTK+.<BR><BR>"
--- a/pidgin/gtkdocklet.c	Sat May 05 23:55:29 2007 +0000
+++ b/pidgin/gtkdocklet.c	Sat May 05 23:56:21 2007 +0000
@@ -486,8 +486,8 @@
 
 	pidgin_separator(submenu);
 
-	new_menu_item_with_status_icon(submenu, _("New..."), PURPLE_STATUS_AVAILABLE, G_CALLBACK(show_custom_status_editor_cb), NULL, 0, 0, NULL);
-	new_menu_item_with_status_icon(submenu, _("Saved..."), PURPLE_STATUS_AVAILABLE, G_CALLBACK(pidgin_status_window_show), NULL, 0, 0, NULL);
+	pidgin_new_item_from_stock(submenu, _("New..."), NULL, G_CALLBACK(show_custom_status_editor_cb), NULL, 0, 0, NULL);
+	pidgin_new_item_from_stock(submenu, _("Saved..."), NULL, G_CALLBACK(pidgin_status_window_show), NULL, 0, 0, NULL);
 
 	return menuitem;
 }
@@ -648,6 +648,7 @@
 	void *conn_handle = purple_connections_get_handle();
 	void *conv_handle = purple_conversations_get_handle();
 	void *accounts_handle = purple_accounts_get_handle();
+	void *status_handle = purple_savedstatuses_get_handle();
 	void *docklet_handle = pidgin_docklet_get_handle();
 
 	purple_prefs_add_none(PIDGIN_PREFS_ROOT "/docklet");
@@ -664,7 +665,7 @@
 			    docklet_handle, PURPLE_CALLBACK(docklet_signed_on_cb), NULL);
 	purple_signal_connect(conn_handle, "signed-off",
 			    docklet_handle, PURPLE_CALLBACK(docklet_signed_off_cb), NULL);
-	purple_signal_connect(accounts_handle, "account-status-changed",
+	purple_signal_connect(accounts_handle, "account-connecting",
 			    docklet_handle, PURPLE_CALLBACK(docklet_update_status_cb), NULL);
 	purple_signal_connect(conv_handle, "received-im-msg",
 			    docklet_handle, PURPLE_CALLBACK(docklet_update_status_cb), NULL);
@@ -674,6 +675,8 @@
 			    docklet_handle, PURPLE_CALLBACK(docklet_update_status_cb), NULL);
 	purple_signal_connect(conv_handle, "conversation-updated",
 			    docklet_handle, PURPLE_CALLBACK(docklet_conv_updated_cb), NULL);
+	purple_signal_connect(status_handle, "savedstatus-changed",
+			    docklet_handle, PURPLE_CALLBACK(docklet_update_status_cb), NULL);
 #if 0
 	purple_signal_connect(purple_get_core(), "quitting",
 			    docklet_handle, PURPLE_CALLBACK(purple_quit_cb), NULL);
--- a/pidgin/gtkmain.c	Sat May 05 23:55:29 2007 +0000
+++ b/pidgin/gtkmain.c	Sat May 05 23:56:21 2007 +0000
@@ -500,16 +500,16 @@
 			"no fault of your own.\n\n"
 			"If you can reproduce the crash, please notify the Pidgin\n"
 			"developers by reporting a bug at\n"
-			"%sbug.php\n\n"
+			"%snewticket/\n\n"
 			"Please make sure to specify what you were doing at the time\n"
 			"and post the backtrace from the core file.  If you do not know\n"
 			"how to get the backtrace, please read the instructions at\n"
-			"%sgdb.php\n\n"
+			"%swiki/GetABacktrace\n\n"
 			"If you need further assistance, please IM either SeanEgn or \n"
 			"LSchiere (via AIM).  Contact information for Sean and Luke \n"
 			"on other protocols is at\n"
-			"%scontactinfo.php\n"),
-			PIDGIN_NAME, PURPLE_WEBSITE, PURPLE_WEBSITE, PURPLE_WEBSITE
+			"%swiki/DeveloperPages\n"),
+			PIDGIN_NAME, PURPLE_DEVEL_WEBSITE, PURPLE_DEVEL_WEBSITE, PURPLE_DEVEL_WEBSITE
 		);
 
 		/* we have to convert the message (UTF-8 to console
--- a/pidgin/gtksound.c	Sat May 05 23:55:29 2007 +0000
+++ b/pidgin/gtksound.c	Sat May 05 23:56:21 2007 +0000
@@ -418,6 +418,7 @@
 	if (!strcmp(method, "custom")) {
 		const char *sound_cmd;
 		char *command;
+		char *esc_filename;
 		GError *error = NULL;
 
 		sound_cmd = purple_prefs_get_path(PIDGIN_PREFS_ROOT "/sound/command");
@@ -429,16 +430,19 @@
 			return;
 		}
 
+		esc_filename = g_shell_quote(filename);
+
 		if(strstr(sound_cmd, "%s"))
-			command = purple_strreplace(sound_cmd, "%s", filename);
+			command = purple_strreplace(sound_cmd, "%s", esc_filename);
 		else
-			command = g_strdup_printf("%s %s", sound_cmd, filename);
+			command = g_strdup_printf("%s %s", sound_cmd, esc_filename);
 
 		if(!g_spawn_command_line_async(command, &error)) {
 			purple_debug_error("gtksound", "sound command could not be launched: %s\n", error->message);
 			g_error_free(error);
 		}
 
+		g_free(esc_filename);
 		g_free(command);
 		return;
 	}
--- a/pidgin/plugins/Makefile.am	Sat May 05 23:55:29 2007 +0000
+++ b/pidgin/plugins/Makefile.am	Sat May 05 23:56:21 2007 +0000
@@ -107,7 +107,6 @@
 
 AM_CPPFLAGS = \
 	-DDATADIR=\"$(datadir)\" \
-	-DVERSION=\"$(VERSION)\" \
 	-I$(top_builddir)/libpurple \
 	-I$(top_srcdir)/libpurple \
 	-I$(top_srcdir)/pidgin \
--- a/pidgin/plugins/cap/Makefile.am	Sat May 05 23:55:29 2007 +0000
+++ b/pidgin/plugins/cap/Makefile.am	Sat May 05 23:56:21 2007 +0000
@@ -19,7 +19,6 @@
 
 AM_CPPFLAGS = \
 	-DDATADIR=\"$(datadir)\" \
-	-DVERSION=\"$(VERSION)\" \
 	-I$(top_srcdir)/libpurple \
 	-I$(top_builddir)/libpurple \
 	-I$(top_srcdir)/pidgin \
--- a/pidgin/plugins/gestures/Makefile.am	Sat May 05 23:55:29 2007 +0000
+++ b/pidgin/plugins/gestures/Makefile.am	Sat May 05 23:56:21 2007 +0000
@@ -19,7 +19,6 @@
 
 AM_CPPFLAGS = \
 	-DDATADIR=\"$(datadir)\" \
-	-DVERSION=\"$(VERSION)\" \
 	-I$(top_srcdir)/libpurple \
 	-I$(top_builddir)/libpurple \
 	-I$(top_srcdir)/pidgin \
--- a/pidgin/plugins/gevolution/Makefile.am	Sat May 05 23:55:29 2007 +0000
+++ b/pidgin/plugins/gevolution/Makefile.am	Sat May 05 23:56:21 2007 +0000
@@ -21,7 +21,6 @@
 
 AM_CPPFLAGS = \
 	-DDATADIR=\"$(datadir)\" \
-	-DVERSION=\"$(VERSION)\" \
 	-I$(top_srcdir)/libpurple \
 	-I$(top_builddir)/libpurple \
 	-I$(top_srcdir)/pidgin \
--- a/pidgin/plugins/musicmessaging/Makefile.am	Sat May 05 23:55:29 2007 +0000
+++ b/pidgin/plugins/musicmessaging/Makefile.am	Sat May 05 23:56:21 2007 +0000
@@ -36,7 +36,6 @@
 
 AM_CPPFLAGS = \
 	-DDATADIR=\"$(datadir)\" \
-	-DVERSION=\"$(VERSION)\" \
 	-I$(top_builddir)/libpurple \
 	-I$(top_srcdir)/libpurple \
 	-I$(top_srcdir)/pidgin \
--- a/pidgin/plugins/perl/Makefile.am	Sat May 05 23:55:29 2007 +0000
+++ b/pidgin/plugins/perl/Makefile.am	Sat May 05 23:56:21 2007 +0000
@@ -95,7 +95,6 @@
 	@rm -f Makefile
 
 AM_CPPFLAGS = \
-	-DVERSION=\"$(VERSION)\" \
 	-I$(top_srcdir) \
 	-I$(top_srcdir)/libpurple \
 	-I$(top_builddir)/libpurple \
--- a/pidgin/plugins/raw.c	Sat May 05 23:55:29 2007 +0000
+++ b/pidgin/plugins/raw.c	Sat May 05 23:56:21 2007 +0000
@@ -175,7 +175,7 @@
 	N_("Raw"),
 	VERSION,
 	N_("Lets you send raw input to text-based protocols."),
-	N_("Lets you send raw input to text-based protocols (Jabber, MSN, IRC, "
+	N_("Lets you send raw input to text-based protocols (XMPP, MSN, IRC, "
 	   "TOC). Hit 'Enter' in the entry box to send. Watch the debug window."),
 	"Eric Warmenhoven <eric@warmenhoven.org>",
 	PURPLE_WEBSITE,
--- a/pidgin/plugins/ticker/Makefile.am	Sat May 05 23:55:29 2007 +0000
+++ b/pidgin/plugins/ticker/Makefile.am	Sat May 05 23:56:21 2007 +0000
@@ -20,7 +20,6 @@
 
 AM_CPPFLAGS = \
 	-DDATADIR=\"$(datadir)\" \
-	-DVERSION=\"$(VERSION)\" \
 	-I$(top_srcdir)/libpurple \
 	-I$(top_builddir)/libpurple \
 	-I$(top_srcdir)/pidgin \
--- a/po/ChangeLog	Sat May 05 23:55:29 2007 +0000
+++ b/po/ChangeLog	Sat May 05 23:56:21 2007 +0000
@@ -1,6 +1,6 @@
 Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
-version 2.0.0:
+version 2.0.0 (5/3/2007):
 	* Afrikaans translation added (Friedel Wolff)
 	* Afrikaans win32 translation added (Friedel Wolff)
 	* Albanian translation updated (Besnik Bleta)
--- a/po/en_AU.po	Sat May 05 23:55:29 2007 +0000
+++ b/po/en_AU.po	Sat May 05 23:56:21 2007 +0000
@@ -849,10 +849,10 @@
 
 #: plugins/raw.c:154
 msgid ""
-"Lets you send raw input to text-based protocols (Jabber, MSN, IRC, TOC). Hit "
+"Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit "
 "'Enter' in the entry box to send. Watch the debug window."
 msgstr ""
-"Lets you send raw input to text-based protocols (Jabber, MSN, IRC, TOC). Hit "
+"Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit "
 "'Enter' in the entry box to send. Watch the debug window."
 
 #: plugins/relnot.c:63
@@ -2822,8 +2822,8 @@
 
 #: src/gtkdialogs.c:92
 #, fuzzy
-msgid "Jabber developer"
-msgstr "former Jabber developer"
+msgid "XMPP developer"
+msgstr "former XMPP developer"
 
 #: src/gtkdialogs.c:93
 msgid "original author"
@@ -2996,11 +2996,11 @@
 #, fuzzy
 msgid ""
 "Gaim is a modular messaging client capable of using AIM, MSN, Yahoo!, "
-"Jabber, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all "
+"XMPP, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all "
 "at once.  It is written using GTK+ and is licensed under the GNU GPL.<BR><BR>"
 msgstr ""
 "Gaim is a modular messaging client capable of using AIM, MSN, Yahoo!, "
-"Jabber, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all "
+"XMPP, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all "
 "at once.  It is written using Gtk+ and is licensed under the GPL.<BR><BR>"
 
 #: src/gtkdialogs.c:235
@@ -5001,7 +5001,7 @@
 #: src/protocols/gg/gg.c:1495 src/protocols/gg/gg.c:1496
 #, fuzzy
 msgid "Register New Gadu-Gadu Account"
-msgstr "Register New Jabber Account"
+msgstr "Register New XMPP Account"
 
 #: src/protocols/gg/gg.c:1497
 msgid "Please, fill in the following fields"
@@ -5723,8 +5723,8 @@
 msgstr "Birthday"
 
 #: src/protocols/jabber/buddy.c:567 src/protocols/jabber/buddy.c:568
-msgid "Edit Jabber vCard"
-msgstr "Edit Jabber vCard"
+msgid "Edit XMPP vCard"
+msgstr "Edit XMPP vCard"
 
 #: src/protocols/jabber/buddy.c:569
 msgid ""
@@ -5735,8 +5735,8 @@
 "comfortable."
 
 #: src/protocols/jabber/buddy.c:616
-msgid "Jabber ID"
-msgstr "Jabber ID"
+msgid "XMPP ID"
+msgstr "XMPP ID"
 
 #: src/protocols/jabber/buddy.c:642 src/protocols/jabber/jabber.c:1711
 msgid "Resource"
@@ -5814,7 +5814,7 @@
 msgstr ""
 
 #: src/protocols/jabber/buddy.c:1327
-msgid "Fill in one or more fields to search for any matching Jabber users."
+msgid "Fill in one or more fields to search for any matching XMPP users."
 msgstr ""
 
 #: src/protocols/jabber/buddy.c:1331 src/protocols/jabber/jabber.c:653
@@ -5833,7 +5833,7 @@
 
 #: src/protocols/jabber/buddy.c:1355 src/protocols/jabber/buddy.c:1356
 #, fuzzy
-msgid "Search for Jabber users"
+msgid "Search for XMPP users"
 msgstr "Search for a buddy by e-mail address"
 
 #: src/protocols/jabber/buddy.c:1370
@@ -5959,8 +5959,8 @@
 msgstr "Unable to create socket"
 
 #: src/protocols/jabber/jabber.c:403 src/protocols/jabber/jabber.c:740
-msgid "Invalid Jabber ID"
-msgstr "Invalid Jabber ID"
+msgid "Invalid XMPP ID"
+msgstr "Invalid XMPP ID"
 
 #: src/protocols/jabber/jabber.c:473
 #, c-format
@@ -6006,8 +6006,8 @@
 msgstr "Please fill out the information below to register your new account."
 
 #: src/protocols/jabber/jabber.c:704 src/protocols/jabber/jabber.c:705
-msgid "Register New Jabber Account"
-msgstr "Register New Jabber Account"
+msgid "Register New XMPP Account"
+msgstr "Register New XMPP Account"
 
 #: src/protocols/jabber/jabber.c:842
 msgid "Initializing Stream"
@@ -6079,8 +6079,8 @@
 msgstr "Password (again)"
 
 #: src/protocols/jabber/jabber.c:1160 src/protocols/jabber/jabber.c:1161
-msgid "Change Jabber Password"
-msgstr "Change Jabber Password"
+msgid "Change XMPP Password"
+msgstr "Change XMPP Password"
 
 #: src/protocols/jabber/jabber.c:1161
 msgid "Please enter your new password"
@@ -6130,8 +6130,8 @@
 msgstr "Item Not Found"
 
 #: src/protocols/jabber/jabber.c:1271
-msgid "Malformed Jabber ID"
-msgstr "Malformed Jabber ID"
+msgid "Malformed XMPP ID"
+msgstr "Malformed XMPP ID"
 
 #: src/protocols/jabber/jabber.c:1273
 msgid "Not Acceptable"
@@ -6377,8 +6377,8 @@
 #. *  summary
 #. *  description
 #: src/protocols/jabber/jabber.c:1686 src/protocols/jabber/jabber.c:1688
-msgid "Jabber Protocol Plugin"
-msgstr "Jabber Protocol Plugin"
+msgid "XMPP Protocol Plugin"
+msgstr "XMPP Protocol Plugin"
 
 #: src/protocols/jabber/jabber.c:1714
 msgid "Use TLS if available"
@@ -6428,8 +6428,8 @@
 msgstr "Message delivery to %s failed: %s"
 
 #: src/protocols/jabber/message.c:233
-msgid "Jabber Message Error"
-msgstr "Jabber Message Error"
+msgid "XMPP Message Error"
+msgstr "XMPP Message Error"
 
 #: src/protocols/jabber/message.c:297
 #, c-format
@@ -12182,8 +12182,8 @@
 #~ msgid "Invalid nickname"
 #~ msgstr "Invalid Username"
 
-#~ msgid "Jabber Profile"
-#~ msgstr "Jabber Profile"
+#~ msgid "XMPP Profile"
+#~ msgstr "XMPP Profile"
 
 #~ msgid "Roomlist Error"
 #~ msgstr "Roomlist Error"
--- a/po/en_CA.po	Sat May 05 23:55:29 2007 +0000
+++ b/po/en_CA.po	Sat May 05 23:56:21 2007 +0000
@@ -849,10 +849,10 @@
 
 #: plugins/raw.c:154
 msgid ""
-"Lets you send raw input to text-based protocols (Jabber, MSN, IRC, TOC). Hit "
+"Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit "
 "'Enter' in the entry box to send. Watch the debug window."
 msgstr ""
-"Lets you send raw input to text-based protocols (Jabber, MSN, IRC, TOC). Hit "
+"Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit "
 "'Enter' in the entry box to send. Watch the debug window."
 
 #: plugins/relnot.c:63
@@ -2818,8 +2818,8 @@
 
 #: src/gtkdialogs.c:92
 #, fuzzy
-msgid "Jabber developer"
-msgstr "former Jabber developer"
+msgid "XMPP developer"
+msgstr "former XMPP developer"
 
 #: src/gtkdialogs.c:93
 msgid "original author"
@@ -2992,11 +2992,11 @@
 #, fuzzy
 msgid ""
 "Gaim is a modular messaging client capable of using AIM, MSN, Yahoo!, "
-"Jabber, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all "
+"XMPP, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all "
 "at once.  It is written using GTK+ and is licensed under the GNU GPL.<BR><BR>"
 msgstr ""
 "Gaim is a modular messaging client capable of using AIM, MSN, Yahoo!, "
-"Jabber, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all "
+"XMPP, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all "
 "at once.  It is written using Gtk+ and is licenced under the GPL.<BR><BR>"
 
 #: src/gtkdialogs.c:235
@@ -4996,7 +4996,7 @@
 #: src/protocols/gg/gg.c:1495 src/protocols/gg/gg.c:1496
 #, fuzzy
 msgid "Register New Gadu-Gadu Account"
-msgstr "Register New Jabber Account"
+msgstr "Register New XMPP Account"
 
 #: src/protocols/gg/gg.c:1497
 msgid "Please, fill in the following fields"
@@ -5717,8 +5717,8 @@
 msgstr "Birthday"
 
 #: src/protocols/jabber/buddy.c:567 src/protocols/jabber/buddy.c:568
-msgid "Edit Jabber vCard"
-msgstr "Edit Jabber vCard"
+msgid "Edit XMPP vCard"
+msgstr "Edit XMPP vCard"
 
 #: src/protocols/jabber/buddy.c:569
 msgid ""
@@ -5729,8 +5729,8 @@
 "comfortable."
 
 #: src/protocols/jabber/buddy.c:616
-msgid "Jabber ID"
-msgstr "Jabber ID"
+msgid "XMPP ID"
+msgstr "XMPP ID"
 
 #: src/protocols/jabber/buddy.c:642 src/protocols/jabber/jabber.c:1711
 msgid "Resource"
@@ -5808,7 +5808,7 @@
 msgstr ""
 
 #: src/protocols/jabber/buddy.c:1327
-msgid "Fill in one or more fields to search for any matching Jabber users."
+msgid "Fill in one or more fields to search for any matching XMPP users."
 msgstr ""
 
 #: src/protocols/jabber/buddy.c:1331 src/protocols/jabber/jabber.c:653
@@ -5827,7 +5827,7 @@
 
 #: src/protocols/jabber/buddy.c:1355 src/protocols/jabber/buddy.c:1356
 #, fuzzy
-msgid "Search for Jabber users"
+msgid "Search for XMPP users"
 msgstr "Search for a buddy by e-mail address"
 
 #: src/protocols/jabber/buddy.c:1370
@@ -5953,8 +5953,8 @@
 msgstr "Unable to create socket"
 
 #: src/protocols/jabber/jabber.c:403 src/protocols/jabber/jabber.c:740
-msgid "Invalid Jabber ID"
-msgstr "Invalid Jabber ID"
+msgid "Invalid XMPP ID"
+msgstr "Invalid XMPP ID"
 
 #: src/protocols/jabber/jabber.c:473
 #, c-format
@@ -6000,8 +6000,8 @@
 msgstr "Please fill out the information below to register your new account."
 
 #: src/protocols/jabber/jabber.c:704 src/protocols/jabber/jabber.c:705
-msgid "Register New Jabber Account"
-msgstr "Register New Jabber Account"
+msgid "Register New XMPP Account"
+msgstr "Register New XMPP Account"
 
 #: src/protocols/jabber/jabber.c:842
 msgid "Initializing Stream"
@@ -6073,8 +6073,8 @@
 msgstr "Password (again)"
 
 #: src/protocols/jabber/jabber.c:1160 src/protocols/jabber/jabber.c:1161
-msgid "Change Jabber Password"
-msgstr "Change Jabber Password"
+msgid "Change XMPP Password"
+msgstr "Change XMPP Password"
 
 #: src/protocols/jabber/jabber.c:1161
 msgid "Please enter your new password"
@@ -6124,8 +6124,8 @@
 msgstr "Item Not Found"
 
 #: src/protocols/jabber/jabber.c:1271
-msgid "Malformed Jabber ID"
-msgstr "Malformed Jabber ID"
+msgid "Malformed XMPP ID"
+msgstr "Malformed XMPP ID"
 
 #: src/protocols/jabber/jabber.c:1273
 msgid "Not Acceptable"
@@ -6371,8 +6371,8 @@
 #. *  summary
 #. *  description
 #: src/protocols/jabber/jabber.c:1686 src/protocols/jabber/jabber.c:1688
-msgid "Jabber Protocol Plugin"
-msgstr "Jabber Protocol Plugin"
+msgid "XMPP Protocol Plugin"
+msgstr "XMPP Protocol Plugin"
 
 #: src/protocols/jabber/jabber.c:1714
 msgid "Use TLS if available"
@@ -6422,8 +6422,8 @@
 msgstr "Message delivery to %s failed: %s"
 
 #: src/protocols/jabber/message.c:233
-msgid "Jabber Message Error"
-msgstr "Jabber Message Error"
+msgid "XMPP Message Error"
+msgstr "XMPP Message Error"
 
 #: src/protocols/jabber/message.c:297
 #, c-format
@@ -12162,8 +12162,8 @@
 #~ msgid "Invalid nickname"
 #~ msgstr "Invalid Username"
 
-#~ msgid "Jabber Profile"
-#~ msgstr "Jabber Profile"
+#~ msgid "XMPP Profile"
+#~ msgstr "XMPP Profile"
 
 #~ msgid "Roomlist Error"
 #~ msgstr "Roomlist Error"
--- a/po/en_GB.po	Sat May 05 23:55:29 2007 +0000
+++ b/po/en_GB.po	Sat May 05 23:56:21 2007 +0000
@@ -2744,10 +2744,10 @@
 #: ../libpurple/plugins/psychic.c:21
 msgid ""
 "Causes conversation windows to appear as other users begin to message you.  "
-"This works for AIM, ICQ, Jabber, Sametime, and Yahoo!"
+"This works for AIM, ICQ, XMPP, Sametime, and Yahoo!"
 msgstr ""
 "Causes conversation windows to appear as other users begin to message you.  "
-"This works for AIM, ICQ, Jabber, Sametime, and Yahoo!"
+"This works for AIM, ICQ, XMPP, Sametime, and Yahoo!"
 
 #: ../libpurple/plugins/psychic.c:66
 msgid "You feel a disturbance in the force..."
@@ -3025,8 +3025,8 @@
 msgstr "AIM Account"
 
 #: ../libpurple/protocols/bonjour/bonjour.c:583
-msgid "Jabber Account"
-msgstr "Jabber Account"
+msgid "XMPP Account"
+msgstr "XMPP Account"
 
 #: ../libpurple/protocols/bonjour/bonjour.h:35
 msgid "Bonjour"
@@ -4204,8 +4204,8 @@
 
 #: ../libpurple/protocols/jabber/buddy.c:582
 #: ../libpurple/protocols/jabber/buddy.c:583
-msgid "Edit Jabber vCard"
-msgstr "Edit Jabber vCard"
+msgid "Edit XMPP vCard"
+msgstr "Edit XMPP vCard"
 
 #: ../libpurple/protocols/jabber/buddy.c:584
 msgid ""
@@ -4320,7 +4320,7 @@
 msgid "The following are the results of your search"
 msgstr "The following are the results of your search"
 
-#. current comment from Jabber User Directory users.jabber.org
+#. current comment from XMPP User Directory users.jabber.org
 #: ../libpurple/protocols/jabber/buddy.c:1674
 msgid ""
 "Find a contact by entering the search criteria in the given fields. Note: "
@@ -4345,8 +4345,8 @@
 msgstr "Server Instructions: %s"
 
 #: ../libpurple/protocols/jabber/buddy.c:1736
-msgid "Fill in one or more fields to search for any matching Jabber users."
-msgstr "Fill in one or more fields to search for any matching Jabber users."
+msgid "Fill in one or more fields to search for any matching XMPP users."
+msgstr "Fill in one or more fields to search for any matching XMPP users."
 
 #: ../libpurple/protocols/jabber/buddy.c:1756
 #: ../libpurple/protocols/novell/novell.c:1488
@@ -4357,8 +4357,8 @@
 
 #: ../libpurple/protocols/jabber/buddy.c:1765
 #: ../libpurple/protocols/jabber/buddy.c:1766
-msgid "Search for Jabber users"
-msgstr "Search for Jabber users"
+msgid "Search for XMPP users"
+msgstr "Search for XMPP users"
 
 #. "Search"
 #: ../libpurple/protocols/jabber/buddy.c:1767
@@ -4501,8 +4501,8 @@
 
 #: ../libpurple/protocols/jabber/jabber.c:567
 #: ../libpurple/protocols/jabber/jabber.c:910
-msgid "Invalid Jabber ID"
-msgstr "Invalid Jabber ID"
+msgid "Invalid XMPP ID"
+msgstr "Invalid XMPP ID"
 
 #: ../libpurple/protocols/jabber/jabber.c:638
 #, c-format
@@ -4556,8 +4556,8 @@
 
 #: ../libpurple/protocols/jabber/jabber.c:873
 #: ../libpurple/protocols/jabber/jabber.c:874
-msgid "Register New Jabber Account"
-msgstr "Register New Jabber Account"
+msgid "Register New XMPP Account"
+msgstr "Register New XMPP Account"
 
 #. Register button
 #: ../libpurple/protocols/jabber/jabber.c:875 ../pidgin/gtkaccount.c:1478
@@ -4631,8 +4631,8 @@
 
 #: ../libpurple/protocols/jabber/jabber.c:1368
 #: ../libpurple/protocols/jabber/jabber.c:1369
-msgid "Change Jabber Password"
-msgstr "Change Jabber Password"
+msgid "Change XMPP Password"
+msgstr "Change XMPP Password"
 
 #: ../libpurple/protocols/jabber/jabber.c:1369
 msgid "Please enter your new password"
@@ -4686,8 +4686,8 @@
 msgstr "Item Not Found"
 
 #: ../libpurple/protocols/jabber/jabber.c:1481
-msgid "Malformed Jabber ID"
-msgstr "Malformed Jabber ID"
+msgid "Malformed XMPP ID"
+msgstr "Malformed XMPP ID"
 
 #: ../libpurple/protocols/jabber/jabber.c:1483
 msgid "Not Acceptable"
@@ -4954,8 +4954,8 @@
 #. *  description
 #: ../libpurple/protocols/jabber/jabber.c:1972
 #: ../libpurple/protocols/jabber/jabber.c:1974
-msgid "Jabber Protocol Plugin"
-msgstr "Jabber Protocol Plug-in"
+msgid "XMPP Protocol Plugin"
+msgstr "XMPP Protocol Plug-in"
 
 #: ../libpurple/protocols/jabber/jabber.c:2000
 msgid "Force old (port 5223) SSL"
@@ -4997,8 +4997,8 @@
 msgstr "Message delivery to %s failed: %s"
 
 #: ../libpurple/protocols/jabber/message.c:272
-msgid "Jabber Message Error"
-msgstr "Jabber Message Error"
+msgid "XMPP Message Error"
+msgstr "XMPP Message Error"
 
 #: ../libpurple/protocols/jabber/message.c:352
 #, c-format
@@ -12364,8 +12364,8 @@
 msgstr "hacker and designated driver [lazy bum]"
 
 #: ../pidgin/gtkdialogs.c:114
-msgid "Jabber developer"
-msgstr "Jabber developer"
+msgid "XMPP developer"
+msgstr "XMPP developer"
 
 #: ../pidgin/gtkdialogs.c:115
 msgid "original author"
@@ -12634,7 +12634,7 @@
 #: ../pidgin/gtkdialogs.c:360
 #, c-format
 msgid ""
-"%s is a modular messaging client capable of using AIM, MSN, Yahoo!, Jabber, "
+"%s is a modular messaging client capable of using AIM, MSN, Yahoo!, XMPP, "
 "ICQ, IRC, SILC, SIP/SIMPLE, Novell GroupWise, Lotus Sametime, Bonjour, "
 "Zephyr, Gadu-Gadu, and QQ all at once.  It is written using GTK+.<BR><BR>You "
 "may modify and redistribute the program under the terms of the GPL (version "
@@ -12643,7 +12643,7 @@
 "'COPYRIGHT' file for the complete list of contributors.  We provide no "
 "warranty for this program.<BR><BR>"
 msgstr ""
-"%s is a modular messaging client capable of using AIM, MSN, Yahoo!, Jabber, "
+"%s is a modular messaging client capable of using AIM, MSN, Yahoo!, XMPP, "
 "ICQ, IRC, SILC, SIP/SIMPLE, Novell GroupWise, Lotus Sametime, Bonjour, "
 "Zephyr, Gadu-Gadu, and QQ all at once.  It is written using GTK+.<BR><BR>You "
 "may modify and redistribute the program under the terms of the GPL (version "
@@ -15035,10 +15035,10 @@
 
 #: ../pidgin/plugins/raw.c:178
 msgid ""
-"Lets you send raw input to text-based protocols (Jabber, MSN, IRC, TOC). Hit "
+"Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit "
 "'Enter' in the entry box to send. Watch the debug window."
 msgstr ""
-"Lets you send raw input to text-based protocols (Jabber, MSN, IRC, TOC). Hit "
+"Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit "
 "'Enter' in the entry box to send. Watch the debug window."
 
 #: ../pidgin/plugins/relnot.c:71