changeset 16812:c6ca9e25814b

merge of '57b4e954f5830e1dddd9bffb697deb057fb35943' and 'f547527e8c477535955c53e6a25dabe2b71bf876'
author Nathan Walp <nwalp@pidgin.im>
date Thu, 03 May 2007 14:48:29 +0000
parents a77901ef0ebb (current diff) 02867a434634 (diff)
children e79555933fc6 08b9f27cf219
files
diffstat 49 files changed, 444 insertions(+), 125 deletions(-) [+]
line wrap: on
line diff
--- a/finch/libgnt/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/finch/libgnt/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -64,12 +64,12 @@
 	gntmarshal.h \
 	gntmarshal.c
 
-gntmarshal.c: genmarshal gntmarshal.h
+gntmarshal.c: $(srcdir)/genmarshal gntmarshal.h
 	echo "#include \"gntmarshal.h\"" > $@
-	cat genmarshal | glib-genmarshal --prefix=gnt_closure_marshal --body >> $@
+	cat $(srcdir)/genmarshal | glib-genmarshal --prefix=gnt_closure_marshal --body >> $@
 
-gntmarshal.h: genmarshal
-	cat genmarshal | glib-genmarshal --prefix=gnt_closure_marshal --header > $@
+gntmarshal.h: $(srcdir)/genmarshal
+	cat $(srcdir)/genmarshal | glib-genmarshal --prefix=gnt_closure_marshal --header > $@
 
 libgnt_laincludedir=$(includedir)/gnt
 libgnt_lainclude_HEADERS = \
--- a/libpurple/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -131,6 +131,8 @@
 	xmlnode.h \
 	whiteboard.h
 
+BUILT_SOURCES = version.h
+
 if ENABLE_DBUS
 
 CLEANFILES = \
--- a/libpurple/blist.c	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/blist.c	Thu May 03 14:48:29 2007 +0000
@@ -1825,7 +1825,6 @@
 	/* Delete the node */
 	purple_buddy_icon_unref(buddy->icon);
 	g_hash_table_destroy(buddy->node.settings);
-	purple_presence_remove_buddy(buddy->presence, buddy);
 	purple_presence_destroy(buddy->presence);
 	g_free(buddy->name);
 	g_free(buddy->alias);
--- a/libpurple/buddyicon.c	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/buddyicon.c	Thu May 03 14:48:29 2007 +0000
@@ -372,7 +372,7 @@
 	PurpleAccount *account;
 	const char *username;
 	PurpleBuddyIcon *icon_to_set;
-	GSList *sl, *list;
+	GSList *buddies;
 
 	g_return_if_fail(icon != NULL);
 
@@ -386,11 +386,10 @@
 	 * the icon when they realize it has no data. */
 	icon_to_set = icon->img ? icon : NULL;
 
-	for (list = sl = purple_find_buddies(account, username);
-	     sl != NULL;
-	     sl = sl->next)
+	buddies = purple_find_buddies(account, username);
+	while (buddies != NULL)
 	{
-		PurpleBuddy *buddy = (PurpleBuddy *)sl->data;
+		PurpleBuddy *buddy = (PurpleBuddy *)buddies->data;
 		char *old_icon;
 
 		purple_buddy_set_icon(buddy, icon_to_set);
@@ -425,10 +424,10 @@
 		}
 		unref_filename(old_icon);
 		g_free(old_icon);
+
+		buddies = g_slist_delete_link(buddies, buddies);
 	}
 
-	g_slist_free(list);
-
 	conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, username, account);
 
 	if (conv != NULL)
--- a/libpurple/connection.c	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/connection.c	Thu May 03 14:48:29 2007 +0000
@@ -161,7 +161,7 @@
 purple_connection_destroy(PurpleConnection *gc)
 {
 	PurpleAccount *account;
-	GSList *buddies, *tmp;
+	GSList *buddies;
 #if 0
 	GList *wins;
 #endif
@@ -197,11 +197,11 @@
 
 	/* Clear out the proto data that was freed in the prpl close method*/
 	buddies = purple_find_buddies(account, NULL);
-	for (tmp = buddies; tmp; tmp = tmp->next) {
-		PurpleBuddy *buddy = tmp->data;
+	while (buddies != NULL) {
+		PurpleBuddy *buddy = buddies->data;
 		buddy->proto_data = NULL;
+		buddies = g_slist_delete_link(buddies, buddies);
 	}
-	g_slist_free(buddies);
 
 	connections = g_list_remove(connections, gc);
 
--- a/libpurple/gaim-compat.h	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/gaim-compat.h	Thu May 03 14:48:29 2007 +0000
@@ -115,7 +115,6 @@
 #define gaim_account_add_buddy       purple_account_add_buddy
 #define gaim_account_add_buddies     purple_account_add_buddies
 #define gaim_account_remove_buddy    purple_account_remove_buddy
-#define gaim_account_remove_buddies  purple_account_remove_buddies
 
 #define gaim_account_remove_group  purple_account_remove_group
 
@@ -1997,7 +1996,6 @@
 #define gaim_presence_get_account        purple_presence_get_account
 #define gaim_presence_get_conversation   purple_presence_get_conversation
 #define gaim_presence_get_chat_user      purple_presence_get_chat_user
-#define gaim_presence_get_buddies        purple_presence_get_buddies
 #define gaim_presence_get_statuses       purple_presence_get_statuses
 #define gaim_presence_get_status         purple_presence_get_status
 #define gaim_presence_get_active_status  purple_presence_get_active_status
--- a/libpurple/plugins/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/plugins/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -130,6 +130,7 @@
 	-DVERSION=\"$(VERSION)\" \
 	-I$(top_builddir)/libpurple \
 	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple \
 	$(DEBUG_CFLAGS) \
 	$(GLIB_CFLAGS) \
 	$(PLUGIN_CFLAGS) \
--- a/libpurple/plugins/perl/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/plugins/perl/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -77,10 +77,14 @@
 #	common/fallback/const-c.inc \
 #	common/fallback/const-xs.inc
 
+perl_scripts = \
+	scripts/function_list.pl
+
 EXTRA_DIST = \
 	Makefile.mingw \
 	common/Makefile.mingw \
-	$(common_sources)
+	$(common_sources) \
+	$(perl_scripts)
 
 common/Makefile: common/Makefile.PL
 	@if test "x${top_srcdir}" != "x${top_builddir}"; then \
@@ -151,6 +155,7 @@
 	-DVERSION=\"$(VERSION)\" \
 	-I$(top_srcdir) \
 	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple \
 	$(DEBUG_CFLAGS) \
 	$(GLIB_CFLAGS) \
 	$(PLUGIN_CFLAGS) \
--- a/libpurple/plugins/ssl/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/plugins/ssl/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -28,6 +28,7 @@
 	-DDATADIR=\"$(datadir)\" \
 	-DLIBDIR=\"$(libdir)/libpurple\" \
 	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple \
 	$(DEBUG_CFLAGS) \
 	$(GLIB_CFLAGS) \
 	$(PLUGIN_CFLAGS)
--- a/libpurple/plugins/ssl/ssl-nss.c	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/plugins/ssl/ssl-nss.c	Thu May 03 14:48:29 2007 +0000
@@ -108,7 +108,7 @@
 {
 	char *lib;
 	PR_Init(PR_SYSTEM_THREAD, PR_PRIORITY_NORMAL, 1);
-	NSS_NoDB_Init(NULL);
+	NSS_NoDB_Init(".");
 
 	/* TODO: Fix this so autoconf does the work trying to find this lib. */
 #ifndef _WIN32
--- a/libpurple/plugins/tcl/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/plugins/tcl/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -15,6 +15,7 @@
 	-DVERSION=\"$(VERSION)\" \
 	-I$(top_srcdir) \
 	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple \
 	$(DEBUG_CFLAGS) \
 	$(GLIB_CFLAGS) \
 	$(PLUGIN_CFLAGS) \
--- a/libpurple/privacy.c	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/privacy.c	Thu May 03 14:48:29 2007 +0000
@@ -206,7 +206,8 @@
 static void
 add_buddies_in_permit(PurpleAccount *account, gboolean local)
 {
-	GSList *list, *iter;
+	GSList *list;
+
 	/* Remove anyone in the permit list who is not in the buddylist */
 	for (list = account->permit; list != NULL; ) {
 		char *person = list->data;
@@ -214,13 +215,16 @@
 		if (!purple_find_buddy(account, person))
 			purple_privacy_permit_remove(account, person, local);
 	}
+
 	/* Now make sure everyone in the buddylist is in the permit list */
-	for (iter = list = purple_find_buddies(account, NULL); iter; iter = iter->next) {
-		PurpleBuddy *buddy = iter->data;
+	list = purple_find_buddies(account, NULL);
+	while (list != NULL)
+	{
+		PurpleBuddy *buddy = list->data;
 		if (!g_slist_find_custom(account->permit, buddy->name, (GCompareFunc)g_utf8_collate))
 			purple_privacy_permit_add(account, buddy->name, local);
+		list = g_slist_delete_link(list, list);
 	}
-	g_slist_free(list);
 }
 
 void
--- a/libpurple/protocols/bonjour/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/protocols/bonjour/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -37,6 +37,7 @@
 
 AM_CPPFLAGS = \
 	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple \
 	$(GLIB_CFLAGS) \
 	$(DEBUG_CFLAGS) \
 	$(HOWL_CFLAGS)
--- a/libpurple/protocols/gg/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/protocols/gg/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -72,6 +72,7 @@
 
 AM_CPPFLAGS = \
 	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple \
 	$(INTGG_CFLAGS) \
 	$(GLIB_CFLAGS) \
 	$(DEBUG_CFLAGS)
--- a/libpurple/protocols/irc/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/protocols/irc/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -30,5 +30,6 @@
 
 AM_CPPFLAGS = \
 	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple \
 	$(GLIB_CFLAGS) \
 	$(DEBUG_CFLAGS)
--- a/libpurple/protocols/jabber/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/protocols/jabber/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -68,6 +68,7 @@
 
 AM_CPPFLAGS = \
 	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple \
 	$(DEBUG_CFLAGS) \
 	$(GLIB_CFLAGS) \
 	$(LIBXML_CFLAGS)
--- a/libpurple/protocols/msn/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/protocols/msn/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -85,5 +85,6 @@
 
 AM_CPPFLAGS = \
 	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple \
 	$(GLIB_CFLAGS) \
 	$(DEBUG_CFLAGS)
--- a/libpurple/protocols/novell/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/protocols/novell/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -52,5 +52,6 @@
 
 AM_CPPFLAGS = \
 	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple \
 	$(DEBUG_CFLAGS) \
 	$(GLIB_CFLAGS)
--- a/libpurple/protocols/oscar/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/protocols/oscar/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -79,5 +79,6 @@
 
 AM_CPPFLAGS = \
 	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple \
 	$(GLIB_CFLAGS) \
 	$(DEBUG_CFLAGS)
--- a/libpurple/protocols/oscar/family_feedbag.c	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/protocols/oscar/family_feedbag.c	Thu May 03 14:48:29 2007 +0000
@@ -139,13 +139,13 @@
 					}
 			} while (exists);
 		}
-	} else if (new->gid == 0x0000) {
+	} else if (type == AIM_SSI_TYPE_ICONINFO) {
 		if (new->bid == 0xFFFF) {
 			do {
 				new->bid += 0x0001;
 				exists = FALSE;
 				for (cur = *list; cur != NULL; cur = cur->next)
-					if (((cur->bid == new->bid) && (cur->gid == new->gid)) || (cur->gid == new->bid)) {
+					if ((cur->bid >= new->bid) || (cur->gid >= new->bid)) {
 						exists = TRUE;
 						break;
 					}
--- a/libpurple/protocols/oscar/oscar.c	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/protocols/oscar/oscar.c	Thu May 03 14:48:29 2007 +0000
@@ -1343,7 +1343,7 @@
 			purple_connection_error(gc, _("The AOL Instant Messenger service is temporarily unavailable."));
 			break;
 		case 0x18:
-			/* connecting too frequently */
+			/* screen name connecting too frequently */
 			gc->wants_to_die = TRUE;
 			purple_connection_error(gc, _("You have been connecting and disconnecting too frequently. Wait ten minutes and try again. If you continue to try, you will need to wait even longer."));
 			break;
@@ -1353,6 +1353,11 @@
 			g_snprintf(buf, sizeof(buf), _("The client version you are using is too old. Please upgrade at %s"), PURPLE_WEBSITE);
 			purple_connection_error(gc, buf);
 			break;
+		case 0x1d:
+			/* IP address connecting too frequently */
+			gc->wants_to_die = TRUE;
+			purple_connection_error(gc, _("You have been connecting and disconnecting too frequently. Wait ten minutes and try again. If you continue to try, you will need to wait even longer."));
+			break;
 		default:
 			purple_connection_error(gc, _("Authentication failed"));
 			break;
@@ -1770,7 +1775,7 @@
 											 info->status, info->status_len);
 	}
 
-	if (info->flags & AIM_FLAG_WIRELESS || info->capabilities & OSCAR_CAPABILITY_HIPTOP)
+	if (info->flags & AIM_FLAG_WIRELESS)
 	{
 		purple_prpl_got_user_status(account, info->sn, OSCAR_STATUS_ID_MOBILE, NULL);
 	} else {
@@ -5428,8 +5433,8 @@
 			return "admin";
 		if (userinfo->flags & AIM_FLAG_ACTIVEBUDDY)
 			return "bot";
-		if (userinfo->flags & AIM_FLAG_AOL)
-			return "aol-client";
+		if (userinfo->capabilities & OSCAR_CAPABILITY_HIPTOP)
+			return "hiptop";
 		if (userinfo->capabilities & OSCAR_CAPABILITY_SECUREIM)
 			return "secure";
 	}
--- a/libpurple/protocols/qq/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/protocols/qq/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -93,6 +93,7 @@
 
 AM_CPPFLAGS = \
 	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple \
 	-DVERSION=\"$(VERSION)\" \
 	-DQQ_BUDDY_ICON_DIR=\"$(datadir)/pixmaps/purple/buddy_icons/qq\" \
 	$(DEBUG_CFLAGS) \
--- a/libpurple/protocols/sametime/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/protocols/sametime/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -34,7 +34,8 @@
 AM_CFLAGS = \
 	$(GLIB_CFLAGS) $(MEANWHILE_CFLAGS) \
 	$(DEBUG_CFLAGS) \
-	-I$(top_srcdir)/libpurple
+	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple
 
 
 AM_CPPFLAGS = \
--- a/libpurple/protocols/silc/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/protocols/silc/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -31,5 +31,6 @@
 
 AM_CPPFLAGS = \
 	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple \
 	$(GLIB_CFLAGS) \
 	$(DEBUG_CFLAGS)
--- a/libpurple/protocols/simple/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/protocols/simple/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -31,5 +31,6 @@
 
 AM_CPPFLAGS = \
 	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple \
 	$(GLIB_CFLAGS) \
 	$(DEBUG_CFLAGS)
--- a/libpurple/protocols/toc/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/protocols/toc/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -27,5 +27,6 @@
 
 AM_CPPFLAGS = \
 	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple \
 	$(GLIB_CFLAGS) \
 	$(DEBUG_CFLAGS)
--- a/libpurple/protocols/yahoo/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/protocols/yahoo/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -49,5 +49,6 @@
 
 AM_CPPFLAGS = \
 	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple \
 	$(GLIB_CFLAGS) \
 	$(DEBUG_CFLAGS)
--- a/libpurple/protocols/zephyr/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/protocols/zephyr/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -102,6 +102,7 @@
 AM_CPPFLAGS = \
 	-I$(top_srcdir) \
 	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple \
 	-I$(top_srcdir)/libpurple/protocols \
 	-DCONFDIR=\"$(confdir)\" \
 	$(GLIB_CFLAGS) \
--- a/libpurple/server.c	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/server.c	Thu May 03 14:48:29 2007 +0000
@@ -210,22 +210,24 @@
 serv_got_alias(PurpleConnection *gc, const char *who, const char *alias)
 {
 	PurpleAccount *account = purple_connection_get_account(gc);
-	GSList *buds, *buddies = purple_find_buddies(account, who);
+	GSList *buddies = purple_find_buddies(account, who);
 	PurpleBuddy *b;
 	PurpleConversation *conv;
 
-	for (buds = buddies; buds; buds = buds->next)
+	while (buddies != NULL)
 	{
-		b = buds->data;
+		b = buddies->data;
+		buddies = g_slist_delete_link(buddies, buddies);
+
 		if ((b->server_alias == NULL && alias == NULL) ||
 		    (b->server_alias && alias && !strcmp(b->server_alias, alias)))
 		{
 			continue;
 		}
+
 		purple_blist_server_alias_buddy(b, alias);
 
 		conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, b->name, account);
-
 		if (conv != NULL && alias != NULL && strcmp(alias, who))
 		{
 			char *tmp = g_strdup_printf(_("%s is now known as %s.\n"),
@@ -237,7 +239,6 @@
 			g_free(tmp);
 		}
 	}
-	g_slist_free(buddies);
 }
 
 /*
--- a/libpurple/sound.c	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/sound.c	Thu May 03 14:48:29 2007 +0000
@@ -31,6 +31,8 @@
 #define STATUS_AVAILABLE 1
 #define STATUS_AWAY 2
 
+static time_t last_played[PURPLE_NUM_SOUNDS];
+
 static gboolean
 purple_sound_play_required(const PurpleAccount *account)
 {
@@ -77,6 +79,10 @@
 	if (!purple_sound_play_required(account))
 		return;
 
+	if (time(NULL) - last_played[event] < 2)
+		return;
+	last_played[event] = time(NULL);
+
 	if(sound_ui_ops && sound_ui_ops->play_event) {
 		int plugin_return;
 
@@ -127,6 +133,7 @@
 
 	purple_prefs_add_none("/purple/sound");
 	purple_prefs_add_int("/purple/sound/while_status", STATUS_AVAILABLE);
+	memset(last_played, 0, sizeof(last_played));
 }
 
 void
--- a/libpurple/status.c	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/status.c	Thu May 03 14:48:29 2007 +0000
@@ -91,8 +91,7 @@
 		{
 			PurpleAccount *account;
 			char *name;
-			size_t ref_count;
-			GList *buddies;
+			PurpleBuddy *buddy;
 
 		} buddy;
 
@@ -131,13 +130,15 @@
 	-200,   /* extended away            */
 	-400,   /* mobile                   */
 	-10,    /* idle, special case.      */
-	-5      /* idle time, special case. */
+	-5,     /* idle time, special case. */
+	10      /* Offline messageable      */
 };
 
 static GHashTable *buddy_presences = NULL;
 
 #define SCORE_IDLE      8
 #define SCORE_IDLE_TIME 9
+#define SCORE_OFFLINE_MESSAGE 10
 
 /**************************************************************************
  * PurpleStatusPrimitive API
@@ -658,13 +659,8 @@
 	}
 	else if (context == PURPLE_PRESENCE_CONTEXT_BUDDY)
 	{
-		const GList *l;
-
-		for (l = purple_presence_get_buddies(presence); l != NULL; l = l->next)
-		{
-			notify_buddy_status_update((PurpleBuddy *)l->data, presence,
+			notify_buddy_status_update(purple_presence_get_buddy(presence), presence,
 					old_status, new_status);
-		}
 	}
 }
 
@@ -1148,10 +1144,7 @@
 		g_free(key->name);
 		g_free(key);
 	}
-
-	presence->u.buddy.ref_count++;
-	presence->u.buddy.buddies = g_list_append(presence->u.buddy.buddies,
-			buddy);
+	presence->u.buddy.buddy = buddy;
 
 	return presence;
 }
@@ -1165,9 +1158,6 @@
 	{
 		PurpleStatusBuddyKey key;
 
-		if(presence->u.buddy.ref_count != 0)
-			return;
-
 		key.account = presence->u.buddy.account;
 		key.name    = presence->u.buddy.name;
 
@@ -1189,27 +1179,6 @@
 	g_free(presence);
 }
 
-/*
- * TODO: Maybe we should cal purple_presence_destroy() after we
- *       decrement the ref count?  I don't see why we should
- *       make other places do it manually when we can do it here.
- */
-void
-purple_presence_remove_buddy(PurplePresence *presence, PurpleBuddy *buddy)
-{
-	g_return_if_fail(presence != NULL);
-	g_return_if_fail(buddy    != NULL);
-	g_return_if_fail(purple_presence_get_context(presence) ==
-			PURPLE_PRESENCE_CONTEXT_BUDDY);
-
-	if (g_list_find(presence->u.buddy.buddies, buddy) != NULL)
-	{
-		presence->u.buddy.buddies = g_list_remove(presence->u.buddy.buddies,
-				buddy);
-		presence->u.buddy.ref_count--;
-	}
-}
-
 void
 purple_presence_add_status(PurplePresence *presence, PurpleStatus *status)
 {
@@ -1345,11 +1314,8 @@
 		const GList *l;
 		time_t current_time = time(NULL);
 
-		for (l = purple_presence_get_buddies(presence); l != NULL; l = l->next)
-		{
-			update_buddy_idle((PurpleBuddy *)l->data, presence, current_time,
-			old_idle, idle);
-		}
+		update_buddy_idle(purple_presence_get_buddy(presence), presence, current_time,
+		old_idle, idle);
 	}
 	else if(purple_presence_get_context(presence) == PURPLE_PRESENCE_CONTEXT_ACCOUNT)
 	{
@@ -1443,14 +1409,14 @@
 	return presence->u.chat.user;
 }
 
-const GList *
-purple_presence_get_buddies(const PurplePresence *presence)
+PurpleBuddy *
+purple_presence_get_buddy(const PurplePresence *presence)
 {
 	g_return_val_if_fail(presence != NULL, NULL);
 	g_return_val_if_fail(purple_presence_get_context(presence) ==
 			PURPLE_PRESENCE_CONTEXT_BUDDY, NULL);
 
-	return presence->u.buddy.buddies;
+	return presence->u.buddy.buddy;
 }
 
 const GList *
@@ -1607,8 +1573,14 @@
 		PurpleStatus *status = (PurpleStatus *)l->data;
 		PurpleStatusType *type = purple_status_get_type(status);
 
-		if (purple_status_is_active(status))
+		if (purple_status_is_active(status)) {
 			score1 += primitive_scores[purple_status_type_get_primitive(type)];
+			if (!purple_status_is_online(status)) {
+				PurpleBuddy *b = purple_presence_get_buddy(presence1);
+				if (b && purple_account_supports_offline_message(purple_buddy_get_account(b),b))
+					score1 += primitive_scores[SCORE_OFFLINE_MESSAGE];
+			}
+		}
 	}
 	score1 += purple_account_get_int(purple_presence_get_account(presence1), "score", 0);
 
@@ -1618,8 +1590,15 @@
 		PurpleStatus *status = (PurpleStatus *)l->data;
 		PurpleStatusType *type = purple_status_get_type(status);
 
-		if (purple_status_is_active(status))
+		if (purple_status_is_active(status)) {
 			score2 += primitive_scores[purple_status_type_get_primitive(type)];
+			if (!purple_status_is_online(status)) {
+				PurpleBuddy *b = purple_presence_get_buddy(presence2);
+				if (b && purple_account_supports_offline_message(purple_buddy_get_account(b),b))
+					score2 += primitive_scores[SCORE_OFFLINE_MESSAGE];
+			}
+
+		}
 	}
 	score2 += purple_account_get_int(purple_presence_get_account(presence2), "score", 0);
 
@@ -1723,6 +1702,8 @@
 			primitive_scores[PURPLE_STATUS_EXTENDED_AWAY]);
 	purple_prefs_add_int("/purple/status/scores/idle",
 			primitive_scores[SCORE_IDLE]);
+	purple_prefs_add_int("/purple/status/scores/offline_msg",
+			primitive_scores[SCORE_OFFLINE_MESSAGE]);
 
 	purple_prefs_connect_callback(handle, "/purple/status/scores/offline",
 			score_pref_changed_cb,
@@ -1742,6 +1723,9 @@
 	purple_prefs_connect_callback(handle, "/purple/status/scores/idle",
 			score_pref_changed_cb,
 			GINT_TO_POINTER(SCORE_IDLE));
+	purple_prefs_connect_callback(handle, "/purple/status/scores/offline_msg",
+			score_pref_changed_cb,
+			GINT_TO_POINTER(SCORE_OFFLINE_MESSAGE));
 
 	buddy_presences = g_hash_table_new_full(purple_buddy_presences_hash,
 											purple_buddy_presences_equal,
--- a/libpurple/status.h	Thu May 03 12:04:04 2007 +0000
+++ b/libpurple/status.h	Thu May 03 14:48:29 2007 +0000
@@ -760,16 +760,6 @@
 void purple_presence_destroy(PurplePresence *presence);
 
 /**
- * Removes a buddy from a presence.
- *
- * This must be done before destroying a buddy in a presence.
- *
- * @param presence The presence.
- * @param buddy    The buddy.
- */
-void purple_presence_remove_buddy(PurplePresence *presence, PurpleBuddy *buddy);
-
-/**
  * Adds a status to a presence.
  *
  * @param presence The presence.
@@ -869,13 +859,13 @@
 const char *purple_presence_get_chat_user(const PurplePresence *presence);
 
 /**
- * Returns a presence's list of buddies.
+ * Returns the presence's buddy.
  *
  * @param presence The presence.
  *
- * @return The presence's list of buddies.
+ * @return The presence's buddy.
  */
-const GList *purple_presence_get_buddies(const PurplePresence *presence);
+PurpleBuddy *purple_presence_get_buddy(const PurplePresence *presence);
 
 /**
  * Returns all the statuses in a presence.
--- a/pidgin/gtkconv.c	Thu May 03 12:04:04 2007 +0000
+++ b/pidgin/gtkconv.c	Thu May 03 14:48:29 2007 +0000
@@ -3389,7 +3389,7 @@
 			for (iter = g_list_last(list); iter != NULL; iter = iter->prev)
 			{
 				PurplePresence *pre = iter->data;
-				PurpleBuddy *buddy = purple_presence_get_buddies(pre)->data;
+				PurpleBuddy *buddy = purple_presence_get_buddy(pre);
 				create_sendto_item(menu, sg, &group, buddy,
 							purple_buddy_get_account(buddy), purple_buddy_get_name(buddy));
 			}
--- a/pidgin/gtkrequest.c	Thu May 03 12:04:04 2007 +0000
+++ b/pidgin/gtkrequest.c	Thu May 03 14:48:29 2007 +0000
@@ -1547,7 +1547,7 @@
 	if ((filename != NULL) && (*filename != '\0')) {
 		if (savedialog)
 			gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(filesel), filename);
-		else
+		else if (g_file_test(filename, G_FILE_TEST_EXISTS))
 			gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(filesel), filename);
 	}
 	if ((filename == NULL || *filename == '\0' || !g_file_test(filename, G_FILE_TEST_EXISTS)) &&
--- a/pidgin/pixmaps/emblems/16/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/pidgin/pixmaps/emblems/16/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -9,6 +9,7 @@
 		free-for-chat.png \
 		game.png \
 		half-operator.png \
+		hiptop.png \
 		male.png \
 		mobile.png \
 		not-authorized.png \
Binary file pidgin/pixmaps/emblems/16/hiptop.png has changed
--- a/pidgin/pixmaps/emotes/default/22/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/pidgin/pixmaps/emotes/default/22/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -136,6 +136,7 @@
 		sigarette.png \
 		silly.png \
 		skeleton.png \
+		skywalker.png \
 		sleepy.png \
 		smile-big.png \
 		smile.png \
--- a/pidgin/pixmaps/emotes/default/22/scalable/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/pidgin/pixmaps/emotes/default/22/scalable/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -126,6 +126,7 @@
 		sigarette.svg \
 		silly.svg \
 		skeleton.svg \
+		skywalker.svg \
 		sleepy.svg \
 		smile-big.svg \
 		smile.svg \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/pixmaps/emotes/default/22/scalable/skywalker.svg	Thu May 03 14:48:29 2007 +0000
@@ -0,0 +1,296 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="24"
+   height="24"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.44.1"
+   version="1.0"
+   sodipodi:docbase="/home/hbons/Desktop"
+   sodipodi:docname="fighter.svg"
+   inkscape:export-filename="/home/hbons/Desktop/fighter.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs4">
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient2799">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop2801" />
+      <stop
+         style="stop-color:white;stop-opacity:0;"
+         offset="1"
+         id="stop2803" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient2789">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop2791" />
+      <stop
+         style="stop-color:white;stop-opacity:0;"
+         offset="1"
+         id="stop2793" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3150">
+      <stop
+         style="stop-color:#2e3436;stop-opacity:1;"
+         offset="0"
+         id="stop3152" />
+      <stop
+         style="stop-color:#2e3436;stop-opacity:0;"
+         offset="1"
+         id="stop3154" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3104">
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:1;"
+         offset="0"
+         id="stop3106" />
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:0;"
+         offset="1"
+         id="stop3108" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3104"
+       id="radialGradient3114"
+       cx="8.3343515"
+       cy="14.186539"
+       fx="8.3343515"
+       fy="14.186539"
+       r="9.975256"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.9327,0.932656,-0.947494,-0.947449,33.02126,11.96667)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3150"
+       id="radialGradient3156"
+       cx="10.748654"
+       cy="10.457643"
+       fx="10.748654"
+       fy="10.457643"
+       r="6.6449099"
+       gradientTransform="matrix(-0.842757,5.698892e-16,-4.565819e-9,-0.35721,19.80716,14.19321)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2789"
+       id="linearGradient2795"
+       x1="12"
+       y1="1.7516894"
+       x2="12"
+       y2="6.0836282"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2799"
+       id="radialGradient2805"
+       cx="4.37887"
+       cy="8.2569046"
+       fx="4.37887"
+       fy="8.2569046"
+       r="0.83306515"
+       gradientTransform="matrix(4.715125,1.421341,-1.263413,5.304515,-6.58722,-42.95017)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2799"
+       id="radialGradient2809"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(4.715125,1.421341,-1.263413,5.304515,-6.58722,-42.95017)"
+       cx="4.37887"
+       cy="8.2569046"
+       fx="4.37887"
+       fy="8.2569046"
+       r="0.83306515" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2789"
+       id="linearGradient2814"
+       gradientUnits="userSpaceOnUse"
+       x1="12"
+       y1="1.7516894"
+       x2="12"
+       y2="6.0836282"
+       gradientTransform="matrix(0.987014,0,0,0.98324,0.155843,0.117318)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="24.007726"
+     inkscape:cx="24.782578"
+     inkscape:cy="13.372505"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     fill="#2e3436"
+     inkscape:window-width="1434"
+     inkscape:window-height="844"
+     inkscape:window-x="0"
+     inkscape:window-y="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       sodipodi:type="arc"
+       style="opacity:0.6;fill:url(#radialGradient3156);fill-opacity:1.0;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3140"
+       sodipodi:cx="10.748654"
+       sodipodi:cy="10.457643"
+       sodipodi:rx="6.6449099"
+       sodipodi:ry="2.3675451"
+       d="M 17.393564 10.457643 A 6.6449099 2.3675451 0 1 1  4.1037445,10.457643 A 6.6449099 2.3675451 0 1 1  17.393564 10.457643 z"
+       transform="matrix(1.504911,0,0,1.300982,-4.175772,6.474929)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#edd400;fill-opacity:1;stroke:#f57900;stroke-width:1.05276573;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path1307"
+       sodipodi:cx="11.806158"
+       sodipodi:cy="10.983024"
+       sodipodi:rx="9.975256"
+       sodipodi:ry="9.975256"
+       d="M 21.781414 10.983024 A 9.975256 9.975256 0 1 1  1.8309021,10.983024 A 9.975256 9.975256 0 1 1  21.781414 10.983024 z"
+       transform="matrix(0.952236,0,0,0.952236,0.757713,1.541608)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:0.79545455;fill:url(#radialGradient3114);fill-opacity:1.0;stroke:none;stroke-width:1.05274069;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3102"
+       sodipodi:cx="11.806158"
+       sodipodi:cy="10.983024"
+       sodipodi:rx="9.975256"
+       sodipodi:ry="9.975256"
+       d="M 21.781414 10.983024 A 9.975256 9.975256 0 1 1  1.8309021,10.983024 A 9.975256 9.975256 0 1 1  21.781414 10.983024 z"
+       transform="matrix(0.8019,0,0,0.801938,2.532654,3.191833)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:0.5;fill:none;fill-opacity:1.0;stroke:#ffffff;stroke-width:1.17343897;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path2184"
+       sodipodi:cx="11.806158"
+       sodipodi:cy="10.983024"
+       sodipodi:rx="9.975256"
+       sodipodi:ry="9.975256"
+       d="M 21.781414 10.983024 A 9.975256 9.975256 0 1 1  1.8309021,10.983024 A 9.975256 9.975256 0 1 1  21.781414 10.983024 z"
+       transform="matrix(0.852176,0,0,0.852216,1.93909,2.639626)" />
+    <path
+       style="opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 17,13 C 16.413519,15.283765 14.403819,17 12,17 C 9.596182,17 7.586481,15.283765 7,13 C 8.053747,14.478811 9.904443,16.044402 12,16.044402 C 14.095556,16.044403 15.946253,14.478811 17,13 z "
+       id="path2186"
+       sodipodi:nodetypes="cscsc" />
+    <path
+       style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 11.415007,0.52141473 C 6.4412517,0.52141473 1.5,3.4999435 1.5,9.5151487 L 1.5,13.135081 C 1.5,13.922344 1.9460004,14.541331 2.5,14.541331 C 3.0539996,14.541331 3.5,13.922344 3.5,13.135081 L 3.5,7.5394989 C 9.1662006,7.4604384 14.833423,7.4830282 20.5,7.5079317 L 20.5,13.135081 C 20.5,13.922344 20.946001,14.541331 21.5,14.541331 C 22.054,14.541331 22.5,13.922344 22.5,13.135081 L 22.5,9.4533234 C 22.5,3.5102944 17.497455,0.52141473 12.439861,0.52141473 L 11.415007,0.52141473 z "
+       id="rect1885"
+       sodipodi:nodetypes="cccsccccscccc" />
+    <rect
+       style="opacity:1;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect1893"
+       width="2"
+       height="3"
+       x="6"
+       y="5"
+       rx="0.94798213"
+       ry="0.94798213" />
+    <rect
+       style="opacity:1;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect2781"
+       width="2"
+       height="3"
+       x="16"
+       y="5"
+       rx="0.94798213"
+       ry="0.94798213" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:black;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path2191"
+       sodipodi:cx="9.0598059"
+       sodipodi:cy="8.7845774"
+       sodipodi:rx="1.1679889"
+       sodipodi:ry="1.4520943"
+       d="M 10.227795 8.7845774 A 1.1679889 1.4520943 0 1 1  7.891817,8.7845774 A 1.1679889 1.4520943 0 1 1  10.227795 8.7845774 z"
+       transform="matrix(0.856173,0,0,1.377321,2.243239,-2.099183)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:black;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path2193"
+       sodipodi:cx="9.0598059"
+       sodipodi:cy="8.7845774"
+       sodipodi:rx="1.1679889"
+       sodipodi:ry="1.4520943"
+       d="M 10.227795 8.7845774 A 1.1679889 1.4520943 0 1 1  7.891817,8.7845774 A 1.1679889 1.4520943 0 1 1  10.227795 8.7845774 z"
+       transform="matrix(0.856173,0,0,1.377321,6.243238,-2.099183)" />
+    <path
+       style="opacity:0.78977272;fill:#ce5c00;fill-opacity:1;stroke:none;stroke-width:1.66300178;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 4,7 C 4,12.372041 5.1207216,14 8,14 C 11.920219,14 12,10.478414 12,10.478414 C 12,10.478414 12.202908,14 16,14 C 18.916405,14 20,12.750006 20,7 L 12,7 L 4,7 z "
+       id="path2264"
+       sodipodi:nodetypes="cscsccc" />
+    <rect
+       style="opacity:1;fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect2783"
+       width="4"
+       height="6"
+       x="10"
+       y="1" />
+    <path
+       style="opacity:0.48295456;fill:url(#linearGradient2814);fill-opacity:1;stroke:white;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 11.413971,1.4999993 C 8.4396167,1.4999993 6.5267273,2.1749121 4.784828,4.0633005 C 4.0614456,4.8466049 2.7215372,5.924139 2.8577394,6.9078193 C 3.3586863,6.1791563 4.4826622,6.5275732 5.224293,6.4374981 C 10.290142,6.4078673 15.356168,6.5163298 20.42115,6.5572819 C 20.830374,6.5476225 21.338833,7.3946396 20.992121,6.6253703 C 20.129068,4.3100064 18.251084,2.6808347 15.798098,2.0529678 C 14.507085,1.6818158 12.747177,1.4799962 11.413971,1.4999993 z M 21.503187,7.9300046 C 21.481946,16.13105 21.471179,14.911402 21.503187,7.9300046 z M 2.7467548,8.2905005 C 2.5704612,8.8774295 2.4591549,9.4763944 2.5000012,10.090975 C 2.5380837,10.671112 2.401155,11.743746 2.623378,12.291731 C 2.8468093,11.723864 2.7079017,10.631029 2.7467548,10.030965 C 2.7467548,9.4508099 2.7467548,8.8706552 2.7467548,8.2905005 z "
+       id="path2787"
+       sodipodi:nodetypes="cccccccccccsccc" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:0.48295456;fill:url(#radialGradient2805);fill-opacity:1.0;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path2797"
+       sodipodi:cx="6.0397224"
+       sodipodi:cy="9.3172264"
+       sodipodi:rx="0.83306515"
+       sodipodi:ry="0.93719834"
+       d="M 6.8727876 9.3172264 A 0.83306515 0.93719834 0 1 1  5.2066573,9.3172264 A 0.83306515 0.93719834 0 1 1  6.8727876 9.3172264 z"
+       transform="matrix(2.400774,0,0,2.13402,-7.500009,-9.883144)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:0.48295456;fill:url(#radialGradient2809);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path2807"
+       sodipodi:cx="6.0397224"
+       sodipodi:cy="9.3172264"
+       sodipodi:rx="0.83306515"
+       sodipodi:ry="0.93719834"
+       d="M 6.8727876 9.3172264 A 0.83306515 0.93719834 0 1 1  5.2066573,9.3172264 A 0.83306515 0.93719834 0 1 1  6.8727876 9.3172264 z"
+       transform="matrix(-2.400774,0,0,2.13402,31.50001,-9.883147)" />
+  </g>
+</svg>
Binary file pidgin/pixmaps/emotes/default/22/skywalker.png has changed
--- a/pidgin/pixmaps/emotes/default/22/theme	Thu May 03 12:04:04 2007 +0000
+++ b/pidgin/pixmaps/emotes/default/22/theme	Thu May 03 14:48:29 2007 +0000
@@ -1,5 +1,5 @@
 Name=Default
-Description=Pidgin smileys (default)
+Description=Pidgin smileys
 Icon=smile.png
 Author=Hylke Bons
 
@@ -21,6 +21,8 @@
 moneymouth.png      :-$
 foot-in-mouth.png   :-!
 shout.png           >:o     >:O
+! skywalker.png     C:-)
+! monkey.png        :-(|)
 
 ### Following AIM 6.1
 [AIM]
@@ -62,7 +64,7 @@
 msn.png             (M)     (m)
 cat.png             (@)
 dog.png             (&)
-moon.png            (S)     (s)
+moon.png            (S)
 star.png            (*)
 film.png            (~)
 musical-note.png    (8)
@@ -86,7 +88,7 @@
 good.png            (Y)     (y)
 bad.png             (N)     (n)
 vampire.png         :[      :-[
-#goat.png           (nah)  (NAH)
+#goat.png           (nah)
 sun.png             (#)
 rainbow.png         (R)     (r)
 quiet.png           :-#
@@ -95,26 +97,26 @@
 sarcastic.png       ^o)
 secret.png          :-*
 sick.png            +o(
-snail.png           (sn)    (SN)
-turtle.png          (tu)    (TU)
-plate.png           (pl)    (PL)
+snail.png           (sn)
+turtle.png          (tu)
+plate.png           (pl)
 bowl.png            (||)
-pizza.png           (pi)    (PI)
-soccerball.png      (so)    (SO)
-car.png             (au)    (AU)
-airplane.png        (ap)    (AP)
-umbrella.png        (um)    (UM)
-island.png          (ip)    (IP)
-computer.png        (co)    (CO)
-mobile.png          (mp)    (MP)
-brb.png             (brb)   (BRB)
-rain.png            (st)    (ST)
-highfive.png        (h5)    (H5)
-coins.png           (mo)    (MO)
-sheep.png           (bah)   (BAH)
+pizza.png           (pi)
+soccerball.png      (so)
+car.png             (au)
+airplane.png        (ap)
+umbrella.png        (um)
+island.png          (ip)
+computer.png        (co)
+mobile.png          (mp)
+brb.png             (brb)
+rain.png            (st)
+highfive.png        (h5)
+coins.png           (mo)
+sheep.png           (bah)
 dont-know.png       :^)
 thinking.png        *-)
-thunder.png         (li)    (LI)
+thunder.png         (li)
 party.png           <:o)
 eyeroll.png         8-)
 yawn.png            |-) 
--- a/pidgin/plugins/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/pidgin/plugins/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -108,7 +108,7 @@
 AM_CPPFLAGS = \
 	-DDATADIR=\"$(datadir)\" \
 	-DVERSION=\"$(VERSION)\" \
-	-I$(top_builddir)/src \
+	-I$(top_builddir)/libpurple \
 	-I$(top_srcdir)/libpurple \
 	-I$(top_srcdir)/pidgin \
 	$(DEBUG_CFLAGS) \
--- a/pidgin/plugins/cap/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/pidgin/plugins/cap/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -21,6 +21,7 @@
 	-DDATADIR=\"$(datadir)\" \
 	-DVERSION=\"$(VERSION)\" \
 	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple \
 	-I$(top_srcdir)/pidgin \
 	$(DEBUG_CFLAGS) \
 	$(GTK_CFLAGS) \
--- a/pidgin/plugins/crazychat/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/pidgin/plugins/crazychat/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -33,6 +33,7 @@
 
 AM_CPPFLAGS = -DPURPLE_PLUGINS \
 	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple \
 	-I$(top_srcdir)/pidgin \
 	$(GTK_CFLAGS) \
 	$(GTKGLEXT_CFLAGS) \
--- a/pidgin/plugins/gestures/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/pidgin/plugins/gestures/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -21,6 +21,7 @@
 	-DDATADIR=\"$(datadir)\" \
 	-DVERSION=\"$(VERSION)\" \
 	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple \
 	-I$(top_srcdir)/pidgin \
 	$(DEBUG_CFLAGS) \
 	$(GTK_CFLAGS)
--- a/pidgin/plugins/gevolution/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/pidgin/plugins/gevolution/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -23,6 +23,7 @@
 	-DDATADIR=\"$(datadir)\" \
 	-DVERSION=\"$(VERSION)\" \
 	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple \
 	-I$(top_srcdir)/pidgin \
 	$(EVOLUTION_ADDRESSBOOK_CFLAGS) \
 	$(DEBUG_CFLAGS) \
--- a/pidgin/plugins/perl/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/pidgin/plugins/perl/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -98,6 +98,7 @@
 	-DVERSION=\"$(VERSION)\" \
 	-I$(top_srcdir) \
 	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple \
 	-I$(top_srcdir)/pidgin \
 	$(DEBUG_CFLAGS) \
 	$(GTK_CFLAGS) \
--- a/pidgin/plugins/ticker/Makefile.am	Thu May 03 12:04:04 2007 +0000
+++ b/pidgin/plugins/ticker/Makefile.am	Thu May 03 14:48:29 2007 +0000
@@ -22,6 +22,7 @@
 	-DDATADIR=\"$(datadir)\" \
 	-DVERSION=\"$(VERSION)\" \
 	-I$(top_srcdir)/libpurple \
+	-I$(top_builddir)/libpurple \
 	-I$(top_srcdir)/pidgin \
 	$(DEBUG_CFLAGS) \
 	$(GTK_CFLAGS)
--- a/pidgin/plugins/timestamp_format.c	Thu May 03 12:04:04 2007 +0000
+++ b/pidgin/plugins/timestamp_format.c	Thu May 03 14:48:29 2007 +0000
@@ -58,7 +58,8 @@
                                  time_t t,
                                  gboolean show_date,
                                  gboolean force,
-                                 const char *dates)
+                                 const char *dates,
+								 gboolean parens)
 {
 	g_return_val_if_fail(dates != NULL, NULL);
 
@@ -68,15 +69,15 @@
 	{
 		struct tm *tm = localtime(&t);
 		if (force)
-			return g_strdup(purple_utf8_strftime("%Y-%m-%d %H:%M:%S", tm));
+			return g_strdup_printf("%s%s%s", parens ? "(" : "", purple_utf8_strftime("%Y-%m-%d %H:%M:%S", tm), parens ? ")" : "");
 		else
-			return g_strdup(purple_date_format_long(tm));
+			return g_strdup_printf("%s%s%s", parens ? "(" : "", purple_date_format_long(tm), parens ? ")" : "");
 	}
 
 	if (force)
 	{
 		struct tm *tm = localtime(&t);
-		return g_strdup(purple_utf8_strftime("%H:%M:%S", tm));
+		return g_strdup_printf("%s%s%s", parens ? "(" : "", purple_utf8_strftime("%H:%M:%S", tm), parens ? ")" : "");
 	}
 
 	return NULL;
@@ -92,7 +93,7 @@
 
 	g_return_val_if_fail(conv != NULL, NULL);
 
-	return timestamp_cb_common(conv, t, show_date, force, dates);
+	return timestamp_cb_common(conv, t, show_date, force, dates, TRUE);
 }
 
 static char *log_timestamp_cb(PurpleLog *log, time_t t, gboolean show_date, gpointer data)
@@ -104,7 +105,7 @@
 
 	g_return_val_if_fail(log != NULL, NULL);
 
-	return timestamp_cb_common(log->conv, t, show_date, force, dates);
+	return timestamp_cb_common(log->conv, t, show_date, force, dates, FALSE);
 }
 
 static gboolean