changeset 16323:cf62255b0a74

merge of 'b2ed97746412540812181f94bcb3e2f077321052' and 'e3a16be06e623901a0b1943a8dd9fa206d02874f'
author Mark Doliner <mark@kingant.net>
date Mon, 23 Apr 2007 07:44:12 +0000
parents a32325c04158 (current diff) 6349d702bab6 (diff)
children ea82f4e6321e
files pidgin/gtkstatusbox.c
diffstat 52 files changed, 840 insertions(+), 120 deletions(-) [+]
line wrap: on
line diff
--- a/configure.ac	Mon Apr 23 07:03:53 2007 +0000
+++ b/configure.ac	Mon Apr 23 07:44:12 2007 +0000
@@ -1953,6 +1953,8 @@
 		   pidgin/pixmaps/toolbar/Makefile
 		   pidgin/pixmaps/toolbar/16/Makefile
 		   pidgin/pixmaps/toolbar/16/scalable/Makefile
+		   pidgin/pixmaps/toolbar/22/Makefile
+		   pidgin/pixmaps/toolbar/22/scalable/Makefile
 		   pidgin/pixmaps/tray/Makefile
 		   pidgin/pixmaps/tray/16/Makefile
 		   pidgin/pixmaps/tray/22/Makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/pidgin-arch.fig	Mon Apr 23 07:44:12 2007 +0000
@@ -0,0 +1,141 @@
+#FIG 3.2  Produced by xfig version 3.2.5-alpha5
+Landscape
+Center
+Inches
+A4      
+100.00
+Single
+-2
+1200 2
+5 1 0 1 0 7 50 -1 -1 0.000 0 0 1 0 2400.000 -4500.000 6900 1500 4500 2700 2400 3000
+	1 1 1.00 60.00 120.00
+6 4800 825 6300 1275
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 4800 825 6300 825 6300 1275 4800 1275 4800 825
+4 0 0 50 -1 0 12 0.0000 4 135 1050 5025 1125 Event Hooks\001
+-6
+6 525 375 6300 675
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 525 375 6300 375 6300 675 525 675 525 375
+4 0 0 50 -1 0 12 0.0000 4 135 1590 2700 600 User Interface Code\001
+-6
+6 4800 2925 6300 3375
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 4800 2925 6300 2925 6300 3375 4800 3375 4800 2925
+4 0 0 50 -1 0 12 0.0000 4 135 1050 5025 3225 Event Hooks\001
+-6
+6 300 3900 2400 6300
+6 600 4800 2100 5250
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 600 4800 2100 4800 2100 5250 600 5250 600 4800
+4 0 0 50 -1 0 12 0.0000 4 180 1185 750 5100 PrplInfo Struct\001
+-6
+6 525 5925 2175 6225
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 525 6225 2175 6225 2175 5925 525 5925 525 6225
+4 0 0 50 -1 0 12 0.0000 4 135 1170 750 6150 Protocol Code\001
+-6
+6 300 4500 2400 6300
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 2400 6300 2400 4500 300 4500 300 6300 2400 6300
+4 0 0 50 -1 0 12 0.0000 4 180 1275 750 5625 Protocol Plugin\001
+-6
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 1050 4500 1050 3900
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 1350 4200 1350 4800
+-6
+6 3000 1350 4500 1800
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 3000 1350 4500 1350 4500 1800 3000 1800 3000 1350
+4 0 0 50 -1 0 12 0.0000 4 135 810 3300 1650 Callbacks\001
+-6
+6 7200 1425 8700 1875
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 7200 1425 8700 1425 8700 1875 7200 1875 7200 1425
+4 0 0 50 -1 0 12 0.0000 4 135 810 7500 1725 Callbacks\001
+-6
+6 7200 3525 8700 3975
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 7200 3525 8700 3525 8700 3975 7200 3975 7200 3525
+4 0 0 50 -1 0 12 0.0000 4 135 810 7500 3825 Callbacks\001
+-6
+6 2100 3900 4800 6300
+6 3000 4800 4500 5250
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 3000 4800 4500 4800 4500 5250 3000 5250 3000 4800
+4 0 0 50 -1 0 12 0.0000 4 180 1185 3150 5100 PrplInfo Struct\001
+-6
+6 2925 5925 4575 6225
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 2925 6225 4575 6225 4575 5925 2925 5925 2925 6225
+4 0 0 50 -1 0 12 0.0000 4 135 1170 3150 6150 Protocol Code\001
+-6
+6 2700 4500 4800 6300
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 4800 6300 4800 4500 2700 4500 2700 6300 4800 6300
+4 0 0 50 -1 0 12 0.0000 4 180 1275 3150 5625 Protocol Plugin\001
+-6
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 3750 4200 3750 4800
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 3000 4500 2100 3900
+-6
+6 600 2700 2400 3900
+6 900 3075 2025 3525
+4 0 0 50 -1 0 12 0.0000 4 180 975 975 3225 Pidgin Core\001
+4 0 0 50 -1 0 12 0.0000 4 180 1110 900 3450 Functionality\001
+-6
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 600 2700 2400 2700 2400 3900 600 3900 600 2700
+-6
+6 4800 1350 6300 1800
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 4800 1350 6300 1350 6300 1800 4800 1800 4800 1350
+4 0 0 50 -1 0 12 0.0000 4 180 1365 4875 1650 UiOps Structures\001
+-6
+6 6900 2400 9000 4200
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 9000 4200 9000 2400 6900 2400 6900 4200 9000 4200
+4 0 0 50 -1 0 12 0.0000 4 180 975 7500 2925 Core Plugin\001
+-6
+6 6900 300 9000 2100
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 9000 2100 9000 300 6900 300 6900 2100 9000 2100
+4 0 0 50 -1 0 12 0.0000 4 180 780 7500 825 UI Plugin\001
+-6
+6 5700 4950 8625 5550
+4 0 0 50 -1 0 16 0.0000 4 180 1965 6150 5175 A Brief Overview\001
+4 0 0 50 -1 0 16 0.0000 4 240 2895 5700 5475 Of the Pidgin Architecture\001
+-6
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 6600 2100 6600 300 300 300 300 2100 6600 2100
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 5550 2400 5550 1800
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 4200 1800 5100 2925
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 1050 2100 1050 2700
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 6600 4200 6600 2400 300 2400 300 4200 6600 4200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 6900 3600 2400 3600
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 7200 1575 6300 1050
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 7200 1725 6300 3000
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 7200 3750 6300 3150
+4 1 0 50 -1 0 12 0.0000 4 135 1110 1125 1275 User Interface\001
+4 0 0 50 -1 0 12 0.0000 4 135 390 3225 3375 Core\001
--- a/finch/gntplugin.c	Mon Apr 23 07:03:53 2007 +0000
+++ b/finch/gntplugin.c	Mon Apr 23 07:44:12 2007 +0000
@@ -30,9 +30,11 @@
 #include <gnttree.h>
 
 #include "notify.h"
+#include "request.h"
 
 #include "finch.h"
 #include "gntplugin.h"
+#include "gntrequest.h"
 
 static struct
 {
@@ -44,6 +46,8 @@
 
 static GHashTable *confwins;
 
+static void process_pref_frame(PurplePluginPrefFrame *frame);
+
 static void
 decide_conf_button(PurplePlugin *plugin)
 {
@@ -195,8 +199,7 @@
 	else if (plugin->info->prefs_info &&
 			plugin->info->prefs_info->get_plugin_pref_frame)
 	{
-		purple_notify_info(plugin, _("..."),
-			_("Still need to do something about this."), NULL);
+		process_pref_frame(plugin->info->prefs_info->get_plugin_pref_frame(plugin));
 		return;
 	}
 	else
@@ -277,3 +280,59 @@
 	decide_conf_button(gnt_tree_get_selection_data(GNT_TREE(tree)));
 }
 
+static void
+process_pref_frame(PurplePluginPrefFrame *frame)
+{
+	PurpleRequestField *field;
+	PurpleRequestFields *fields;
+	PurpleRequestFieldGroup *group = NULL;
+	GList *prefs;
+	
+	fields = purple_request_fields_new();
+
+	for (prefs = purple_plugin_pref_frame_get_prefs(frame); prefs; prefs = prefs->next) {
+		PurplePluginPref *pref = prefs->data;
+		const char *name = purple_plugin_pref_get_name(pref);
+		const char *label = purple_plugin_pref_get_label(pref);
+		if(name == NULL) {
+			if(label == NULL)
+				continue;
+
+			if(purple_plugin_pref_get_type(pref) == PURPLE_PLUGIN_PREF_INFO) {
+				field = purple_request_field_label_new("*", purple_plugin_pref_get_label(pref));
+				purple_request_field_group_add_field(group, field);
+			} else {
+				group = purple_request_field_group_new(label);
+				purple_request_fields_add_group(fields, group);
+			}
+			continue;
+		}
+
+		field = NULL;
+		switch(purple_prefs_get_type(name)) {
+			case PURPLE_PREF_BOOLEAN:
+				field = purple_request_field_bool_new(name, label, purple_prefs_get_bool(name));
+				break;
+			case PURPLE_PREF_INT:
+				field = purple_request_field_int_new(name, label, purple_prefs_get_int(name));
+				break;
+			case PURPLE_PREF_STRING:
+				field = purple_request_field_string_new(name, label, purple_prefs_get_string(name),
+						purple_plugin_pref_get_format_type(pref) & PURPLE_STRING_FORMAT_TYPE_MULTILINE);
+				break;
+			default:
+				break;
+		}
+		if (field) {
+			if (group == NULL) {
+				group = purple_request_field_group_new(_("Preferences"));
+				purple_request_fields_add_group(fields, group);
+			}
+			purple_request_field_group_add_field(group, field);
+		}
+	}
+
+	purple_request_fields(NULL, _("Preferences"), NULL, NULL, fields,
+			_("Save"), G_CALLBACK(finch_request_save_in_prefs), _("Cancel"), NULL, NULL);
+}
+
--- a/finch/gntplugin.h	Mon Apr 23 07:03:53 2007 +0000
+++ b/finch/gntplugin.h	Mon Apr 23 07:44:12 2007 +0000
@@ -28,6 +28,7 @@
 #include <gnt.h>
 
 #include <plugin.h>
+#include <pluginpref.h>
 
 #include <string.h>
 
--- a/finch/gntprefs.c	Mon Apr 23 07:03:53 2007 +0000
+++ b/finch/gntprefs.c	Mon Apr 23 07:44:12 2007 +0000
@@ -198,57 +198,7 @@
 static void
 save_cb(void *data, PurpleRequestFields *allfields)
 {
-	GList *list;
-	for (list = purple_request_fields_get_groups(allfields); list; list = list->next)
-	{
-		PurpleRequestFieldGroup *group = list->data;
-		GList *fields = purple_request_field_group_get_fields(group);
-		
-		for (; fields ; fields = fields->next)
-		{
-			PurpleRequestField *field = fields->data;
-			PurpleRequestFieldType type = purple_request_field_get_type(field);
-			PurplePrefType pt;
-			gpointer val = NULL;
-			const char *id = purple_request_field_get_id(field);
-
-			switch (type)
-			{
-				case PURPLE_REQUEST_FIELD_LIST:
-					val = purple_request_field_list_get_selected(field)->data;
-					break;
-				case PURPLE_REQUEST_FIELD_BOOLEAN:
-					val = GINT_TO_POINTER(purple_request_field_bool_get_value(field));
-					break;
-				case PURPLE_REQUEST_FIELD_INTEGER:
-					val = GINT_TO_POINTER(purple_request_field_int_get_value(field));
-					break;
-				case PURPLE_REQUEST_FIELD_STRING:
-					val = (gpointer)purple_request_field_string_get_value(field);
-					break;
-				default:
-					break;
-			}
-
-			pt = purple_prefs_get_type(id);
-			switch (pt)
-			{
-				case PURPLE_PREF_INT:
-					if (type == PURPLE_REQUEST_FIELD_LIST) /* Lists always return string */
-						sscanf(val, "%ld", (long int *)&val);
-					purple_prefs_set_int(id, GPOINTER_TO_INT(val));
-					break;
-				case PURPLE_PREF_BOOLEAN:
-					purple_prefs_set_bool(id, GPOINTER_TO_INT(val));
-					break;
-				case PURPLE_PREF_STRING:
-					purple_prefs_set_string(id, val);
-					break;
-				default:
-					break;
-			}
-		}
-	}
+	finch_request_save_in_prefs(data, allfields);
 	free_strings();
 }
 
--- a/finch/gntrequest.c	Mon Apr 23 07:03:53 2007 +0000
+++ b/finch/gntrequest.c	Mon Apr 23 07:44:12 2007 +0000
@@ -139,6 +139,11 @@
 finch_close_request(PurpleRequestType type, gpointer ui_handle)
 {
 	GntWidget *widget = GNT_WIDGET(ui_handle);
+	if (type == PURPLE_REQUEST_FIELDS) {
+		PurpleRequestFields *fields = g_object_get_data(G_OBJECT(widget), "fields");
+		purple_request_fields_destroy(fields);
+	}
+
 	while (widget->parent)
 		widget = widget->parent;
 	gnt_widget_destroy(widget);
@@ -243,7 +248,7 @@
 	gpointer data = g_object_get_data(G_OBJECT(button), "activate-userdata");
 	GList *list;
 
-	/* Update the data of the fields. GtkPurple does this differently. Instead of
+	/* Update the data of the fields. Pidgin does this differently. Instead of
 	 * updating the fields at the end like here, it updates the appropriate field
 	 * instantly whenever a change is made. That allows it to make sure the
 	 * 'required' fields are entered before the user can hit OK. It's not the case
@@ -532,6 +537,8 @@
 	gnt_box_add_widget(GNT_BOX(window), box);
 
 	gnt_widget_show(window);
+
+	g_object_set_data(G_OBJECT(window), "fields", allfields);
 	
 	return window;
 }
@@ -620,3 +627,54 @@
 {
 }
 
+void finch_request_save_in_prefs(gpointer null, PurpleRequestFields *allfields)
+{
+	GList *list;
+	for (list = purple_request_fields_get_groups(allfields); list; list = list->next) {
+		PurpleRequestFieldGroup *group = list->data;
+		GList *fields = purple_request_field_group_get_fields(group);
+		
+		for (; fields ; fields = fields->next) {
+			PurpleRequestField *field = fields->data;
+			PurpleRequestFieldType type = purple_request_field_get_type(field);
+			PurplePrefType pt;
+			gpointer val = NULL;
+			const char *id = purple_request_field_get_id(field);
+
+			switch (type) {
+				case PURPLE_REQUEST_FIELD_LIST:
+					val = purple_request_field_list_get_selected(field)->data;
+					break;
+				case PURPLE_REQUEST_FIELD_BOOLEAN:
+					val = GINT_TO_POINTER(purple_request_field_bool_get_value(field));
+					break;
+				case PURPLE_REQUEST_FIELD_INTEGER:
+					val = GINT_TO_POINTER(purple_request_field_int_get_value(field));
+					break;
+				case PURPLE_REQUEST_FIELD_STRING:
+					val = (gpointer)purple_request_field_string_get_value(field);
+					break;
+				default:
+					break;
+			}
+
+			pt = purple_prefs_get_type(id);
+			switch (pt) {
+				case PURPLE_PREF_INT:
+					if (type == PURPLE_REQUEST_FIELD_LIST) /* Lists always return string */
+						sscanf(val, "%ld", (long int *)&val);
+					purple_prefs_set_int(id, GPOINTER_TO_INT(val));
+					break;
+				case PURPLE_PREF_BOOLEAN:
+					purple_prefs_set_bool(id, GPOINTER_TO_INT(val));
+					break;
+				case PURPLE_PREF_STRING:
+					purple_prefs_set_string(id, val);
+					break;
+				default:
+					break;
+			}
+		}
+	}
+}
+
--- a/finch/gntrequest.h	Mon Apr 23 07:03:53 2007 +0000
+++ b/finch/gntrequest.h	Mon Apr 23 07:44:12 2007 +0000
@@ -49,6 +49,12 @@
  */
 void finch_request_uninit(void);
 
+/**
+ * Save the request fields in preferences where the id attribute of each field is the
+ * id of a preference.
+ */
+void finch_request_save_in_prefs(gpointer null, PurpleRequestFields *fields);
+
 /*@}*/
 
 #endif
--- a/finch/plugins/gntgf.c	Mon Apr 23 07:03:53 2007 +0000
+++ b/finch/plugins/gntgf.c	Mon Apr 23 07:44:12 2007 +0000
@@ -111,6 +111,15 @@
 }
 
 #ifdef HAVE_X11
+static int
+error_handler(Display *dpy, XErrorEvent *error)
+{
+	char buffer[1024];
+	XGetErrorText(dpy, error->error_code, buffer, sizeof(buffer));
+	purple_debug_error("gntgf", "Could not set urgent to the window: %s.\n", buffer);
+	return 0;
+}
+
 static void
 urgent()
 {
@@ -130,9 +139,14 @@
 	if (dpy == NULL)
 		return;
 
+	XSetErrorHandler(error_handler);
 	hints = XGetWMHints(dpy, id);
-	hints->flags|=XUrgencyHint;
-	XSetWMHints(dpy, id, hints);
+	if (hints) {
+		hints->flags|=XUrgencyHint;
+		XSetWMHints(dpy, id, hints);
+		XFree(hints);
+	}
+	XSetErrorHandler(NULL);
 
 	XFlush(dpy);
 	XCloseDisplay(dpy);
--- a/libpurple/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -13,7 +13,7 @@
 ##
 ## INCLUDE PATHS
 ##
-INCLUDE_PATHS =	\
+INCLUDE_PATHS +=	\
 			-I$(PURPLE_TOP) \
 			-I$(PURPLE_TOP)/win32 \
 			-I$(PIDGIN_TREE_TOP) \
@@ -22,7 +22,7 @@
 			-I$(GTK_TOP)/lib/glib-2.0/include \
 			-I$(LIBXML2_TOP)/include
 
-LIB_PATHS =		-L$(GTK_TOP)/lib \
+LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(LIBXML2_TOP)/lib
 
 ##
--- a/libpurple/plugins/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/plugins/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -25,7 +25,7 @@
 			-I$(PURPLE_TOP) \
 			-I$(PURPLE_TOP)/win32
 
-LIB_PATHS =		-L$(GTK_TOP)/lib \
+LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(PURPLE_TOP)
 
 ##
--- a/libpurple/plugins/perl/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/plugins/perl/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -24,7 +24,7 @@
 			-I$(GTK_TOP)/lib/glib-2.0/include \
 			-I$(PERL_LIB_TOP)/CORE
 
-LIB_PATHS =		-L$(GTK_TOP)/lib \
+LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(PURPLE_TOP) \
 			-L$(PERL_LIB_TOP)
 
--- a/libpurple/plugins/perl/common/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/plugins/perl/common/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -17,7 +17,7 @@
 ##
 ## INCLUDE PATHS
 ##
-INCLUDE_PATHS =		-I. \
+INCLUDE_PATHS +=		-I. \
 			-I$(PIDGIN_TREE_TOP) \
 			-I$(PURPLE_TOP) \
 			-I$(GTK_TOP)/include \
@@ -25,7 +25,7 @@
 			-I$(GTK_TOP)/lib/glib-2.0/include \
 			-I$(PERL_LIB_TOP)/CORE
 
-LIB_PATHS = 		-L$(PERL_LIB_TOP) \
+LIB_PATHS += 		-L$(PERL_LIB_TOP) \
 			-L$(PERL_PLUGIN_TOP) \
 			-L$(PURPLE_TOP) \
 			-L$(GTK_TOP)/lib
--- a/libpurple/plugins/ssl/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/plugins/ssl/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -36,7 +36,7 @@
 			-I$(NSS_TOP)/include \
 			-I$(NSPR_TOP)/include
 
-LIB_PATHS =		-L$(GTK_TOP)/lib \
+LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(PURPLE_TOP) \
 			-L$(NSS_TOP)/lib \
 			-L$(NSPR_TOP)/lib
--- a/libpurple/protocols/bonjour/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/protocols/bonjour/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -33,7 +33,7 @@
 			-I$(PURPLE_TOP)/win32 \
 			-I$(PIDGIN_TREE_TOP)
 
-LIB_PATHS =		-L$(GTK_TOP)/lib \
+LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(HOWL_TOP)/lib \
 			-L$(PURPLE_TOP)
 
--- a/libpurple/protocols/gg/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/protocols/gg/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -33,7 +33,7 @@
 			-I$(PURPLE_TOP)/win32 \
 			-I$(PIDGIN_TREE_TOP)
 
-LIB_PATHS =		-L$(GTK_TOP)/lib \
+LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(PURPLE_TOP) \
 
 ##
--- a/libpurple/protocols/irc/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/protocols/irc/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -31,7 +31,7 @@
 			-I$(PURPLE_TOP)/win32 \
 			-I$(PIDGIN_TREE_TOP)
 
-LIB_PATHS =		-L$(GTK_TOP)/lib \
+LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(PURPLE_TOP)
 
 ##
--- a/libpurple/protocols/jabber/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/protocols/jabber/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -34,7 +34,7 @@
 			-I$(PURPLE_TOP)/win32 \
 			-I$(PIDGIN_TREE_TOP)
 
-LIB_PATHS =		-L$(GTK_TOP)/lib \
+LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(LIBXML2_TOP)/lib \
 			-L$(PURPLE_TOP) \
 			-L.
--- a/libpurple/protocols/jabber/auth.c	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/protocols/jabber/auth.c	Mon Apr 23 07:44:12 2007 +0000
@@ -831,7 +831,7 @@
 {
 	const char *ns = xmlnode_get_namespace(packet);
 #ifdef HAVE_CYRUS_SASL
-	const int *x;
+	const void *x;
 #endif
 
 	if(!ns || strcmp(ns, "urn:ietf:params:xml:ns:xmpp-sasl")) {
@@ -865,9 +865,9 @@
 	}
 	/* If we've negotiated a security layer, we need to enable it */
 	sasl_getprop(js->sasl, SASL_SSF, &x);
-	if (*x > 0) {
+	if (*(int *)x > 0) {
 		sasl_getprop(js->sasl, SASL_MAXOUTBUF, &x);
-		js->sasl_maxbuf = *x;
+		js->sasl_maxbuf = *(int *)x;
 	}
 #endif
 
--- a/libpurple/protocols/msn/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/protocols/msn/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -31,7 +31,7 @@
 			-I$(PURPLE_TOP)/win32 \
 			-I$(PIDGIN_TREE_TOP)
 
-LIB_PATHS =		-L$(GTK_TOP)/lib \
+LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(PURPLE_TOP)
 
 ##
--- a/libpurple/protocols/novell/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/protocols/novell/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -31,7 +31,7 @@
 			-I$(PURPLE_TOP)/win32 \
 			-I$(PIDGIN_TREE_TOP)
 
-LIB_PATHS =		-L$(GTK_TOP)/lib \
+LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(PURPLE_TOP)
 
 ##
--- a/libpurple/protocols/oscar/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/protocols/oscar/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -33,7 +33,7 @@
 			-I$(PURPLE_TOP)/win32 \
 			-I$(PIDGIN_TREE_TOP)
 
-LIB_PATHS =		-L$(GTK_TOP)/lib \
+LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(PURPLE_TOP) \
 			-L.
 
--- a/libpurple/protocols/oscar/family_feedbag.c	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/protocols/oscar/family_feedbag.c	Mon Apr 23 07:44:12 2007 +0000
@@ -132,8 +132,21 @@
 			do {
 				new->gid += 0x0001;
 				for (cur=*list, i=0; ((cur) && (!i)); cur=cur->next)
-					if ((cur->type == AIM_SSI_TYPE_GROUP) && (cur->gid == new->gid))
+					if ((cur->type == AIM_SSI_TYPE_GROUP) && (cur->gid == new->gid)) {
 						i=1;
+						break;
+					}
+			} while (i);
+		}
+	} else if (new->gid == 0x0000) {
+		if (new->bid == 0xFFFF) {
+			do {
+				new->bid += 0x0001;
+				for (cur=*list, i=0; ((cur) && (!i)); cur=cur->next)
+					if (((cur->bid == new->bid) && (cur->gid == new->gid)) || (cur->gid == new->bid)) {
+						i=1;
+						break;
+					}
 			} while (i);
 		}
 	} else {
@@ -141,8 +154,10 @@
 			do {
 				new->bid += 0x0001;
 				for (cur=*list, i=0; ((cur) && (!i)); cur=cur->next)
-					if ((cur->bid == new->bid) && (cur->gid == new->gid))
+					if ((cur->bid == new->bid) && (cur->gid == new->gid)) {
 						i=1;
+						break;
+					}
 			} while (i);
 		}
 	}
@@ -550,8 +565,10 @@
 
 	/* We're out of stuff to do, so tell the AIM servers we're done and exit */
 	if (!od->ssi.pending) {
-		aim_ssi_modend(od);
-		od->ssi.in_transaction = FALSE;
+		if (od->ssi.in_transaction) {
+			aim_ssi_modend(od);
+			od->ssi.in_transaction = FALSE;
+		}
 		return 0;
 	}
 
@@ -764,7 +781,7 @@
 int aim_ssi_addpermit(OscarData *od, const char *name)
 {
 
-	if (!od || !name)
+	if (!od || !name || !od->ssi.received_data)
 		return -EINVAL;
 
 	/* Make sure the master group exists */
@@ -790,7 +807,7 @@
 int aim_ssi_adddeny(OscarData *od, const char *name)
 {
 
-	if (!od || !name)
+	if (!od || !name || !od->ssi.received_data)
 		return -EINVAL;
 
 	/* Make sure the master group exists */
@@ -1040,7 +1057,7 @@
 {
 	struct aim_ssi_item *tmp;
 
-	if (!od)
+	if (!od || !od->ssi.received_data)
 		return -EINVAL;
 
 	/* Find the PDINFO item, or add it if it does not exist */
@@ -1072,12 +1089,12 @@
  * @param iconcsumlen Length of the MD5 checksum given above.  Should be 0x10 bytes.
  * @return Return 0 if no errors, otherwise return the error number.
  */
-int aim_ssi_seticon(OscarData *od, const guint8 *iconsum, guint16 iconsumlen)
+int aim_ssi_seticon(OscarData *od, const guint8 *iconsum, guint8 iconsumlen)
 {
 	struct aim_ssi_item *tmp;
 	guint8 *csumdata;
 
-	if (!od || !iconsum || !iconsumlen)
+	if (!od || !iconsum || !iconsumlen || !od->ssi.received_data)
 		return -EINVAL;
 
 	/* Find the ICONINFO item, or add it if it does not exist */
@@ -1091,7 +1108,8 @@
 
 	/* Need to add the 0x00d5 TLV to the TLV chain */
 	csumdata = (guint8 *)malloc((iconsumlen+2)*sizeof(guint8));
-	aimutil_put16(&csumdata[0], iconsumlen);
+	aimutil_put8(&csumdata[0], 0x00);
+	aimutil_put8(&csumdata[1], iconsumlen);
 	memcpy(&csumdata[2], iconsum, iconsumlen);
 	aim_tlvlist_replace_raw(&tmp->data, 0x00d5, (iconsumlen+2) * sizeof(guint8), csumdata);
 	free(csumdata);
@@ -1134,7 +1152,7 @@
 int aim_ssi_setpresence(OscarData *od, guint32 presence) {
 	struct aim_ssi_item *tmp;
 
-	if (!od)
+	if (!od || !od->ssi.received_data)
 		return -EINVAL;
 
 	/* Find the PRESENCEPREFS item, or add it if it does not exist */
--- a/libpurple/protocols/oscar/family_locate.c	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/protocols/oscar/family_locate.c	Mon Apr 23 07:44:12 2007 +0000
@@ -294,6 +294,21 @@
 		cur->status_len = userinfo->status_len;
 	}
 
+	if (userinfo->itmsurl != NULL) {
+		free(cur->itmsurl);
+		free(cur->itmsurl_encoding);
+		if (userinfo->itmsurl_len > 0) {
+			cur->itmsurl = (char *)malloc(userinfo->itmsurl_len);
+			memcpy(cur->itmsurl, userinfo->itmsurl, userinfo->itmsurl_len);
+		} else
+			cur->itmsurl = NULL;
+		if (userinfo->itmsurl_encoding != NULL)
+			cur->itmsurl_encoding = strdup(userinfo->itmsurl_encoding);
+		else
+			cur->itmsurl_encoding = NULL;
+		cur->itmsurl_len = userinfo->itmsurl_len;
+	}
+
 	if (userinfo->away != NULL) {
 		free(cur->away);
 		free(cur->away_encoding);
@@ -577,6 +592,8 @@
 	free(info->info_encoding);
 	free(info->status);
 	free(info->status_encoding);
+	free(info->itmsurl);
+	free(info->itmsurl_encoding);
 	free(info->away);
 	free(info->away_encoding);
 }
@@ -841,6 +858,28 @@
 						}
 					} break;
 
+					case 0x0009: { /* An iTunes Music Store link */
+						free(outinfo->itmsurl);
+						free(outinfo->itmsurl_encoding);
+						if (length2 >= 4) {
+							outinfo->itmsurl_len = byte_stream_get16(bs);
+							outinfo->itmsurl = byte_stream_getstr(bs, outinfo->itmsurl_len);
+							if (byte_stream_get16(bs) == 0x0001) {
+								/* We have an encoding */
+								byte_stream_get16(bs);
+								outinfo->itmsurl_encoding = byte_stream_getstr(bs, byte_stream_get16(bs));
+							} else {
+								/* No explicit encoding, client should use UTF-8 */
+								outinfo->itmsurl_encoding = NULL;
+							}
+						} else {
+							byte_stream_advance(bs, length2);
+							outinfo->itmsurl_len = 0;
+							outinfo->itmsurl = g_strdup("");
+							outinfo->itmsurl_encoding = NULL;
+						}
+					} break;
+
 					default: {
 						byte_stream_advance(bs, length2);
 					} break;
--- a/libpurple/protocols/oscar/oscar.c	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/protocols/oscar/oscar.c	Mon Apr 23 07:44:12 2007 +0000
@@ -1778,8 +1778,20 @@
 
 	if (have_status_message)
 	{
-		purple_prpl_got_user_status(account, info->sn, status_id,
-								  "message", message, NULL);
+		if ((status_id == OSCAR_STATUS_ID_AVAILABLE) && (info->itmsurl != NULL))
+		{
+			char *itmsurl;
+			itmsurl = oscar_encoding_to_utf8(info->itmsurl_encoding,
+					info->itmsurl, info->itmsurl_len);
+			purple_prpl_got_user_status(account, info->sn, status_id,
+					"message", message, "itmsurl", itmsurl, NULL);
+			g_free(itmsurl);
+		}
+		else
+		{
+			purple_prpl_got_user_status(account, info->sn, status_id,
+					"message", message, NULL);
+		}
 		g_free(message);
 	}
 	else
@@ -2890,6 +2902,25 @@
 		g_free(tmp);
 	}
 
+#if 0
+	/*
+	 * TODO: This code is disabled because it's kind of stupid.  iTunes
+	 *       doesn't run in Linux.  It'd be cool if we surfaced this URL
+	 *       to Windows users, but it would be better to just linkify
+	 *       the available message, above.
+	 */
+
+	/* iTunes Music Store link */
+	if (userinfo->itmsurl != NULL)
+	{
+		if (userinfo->itmsurl[0] != '\0')
+			tmp = oscar_encoding_to_utf8(userinfo->itmsurl_encoding,
+											 userinfo->itmsurl, userinfo->itmsurl_len);
+		oscar_user_info_add_pair(user_info, _("iTunes Music Store Link"), tmp);
+		g_free(tmp);
+	}
+#endif
+
 	/* Away message */
 	if ((userinfo->flags & AIM_FLAG_AWAY) && (userinfo->away_len > 0) && (userinfo->away != NULL) && (userinfo->away_encoding != NULL)) {
 		tmp = oscar_encoding_extract(userinfo->away_encoding);
--- a/libpurple/protocols/oscar/oscar.h	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/protocols/oscar/oscar.h	Mon Apr 23 07:44:12 2007 +0000
@@ -1001,6 +1001,10 @@
 	char *status_encoding;
 	guint16 status_len;
 
+	char *itmsurl;
+	char *itmsurl_encoding;
+	guint16 itmsurl_len;
+
 	char *away;
 	char *away_encoding;
 	guint16 away_len;
@@ -1214,7 +1218,7 @@
 int aim_ssi_deletelist(OscarData *od);
 int aim_ssi_setpermdeny(OscarData *od, guint8 permdeny, guint32 vismask);
 int aim_ssi_setpresence(OscarData *od, guint32 presence);
-int aim_ssi_seticon(OscarData *od, const guint8 *iconsum, guint16 iconsumlen);
+int aim_ssi_seticon(OscarData *od, const guint8 *iconsum, guint8 iconsumlen);
 int aim_ssi_delicon(OscarData *od);
 
 
--- a/libpurple/protocols/qq/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/protocols/qq/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -31,7 +31,7 @@
 	-I$(PURPLE_TOP)/win32 \
 	-I$(PIDGIN_TREE_TOP)
 
-LIB_PATHS = \
+LIB_PATHS += \
 	-L$(GTK_TOP)/lib \
 	-L$(PURPLE_TOP)
 
--- a/libpurple/protocols/sametime/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/protocols/sametime/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -33,7 +33,7 @@
 			-I$(PURPLE_TOP)/win32 \
 			-I$(PIDGIN_TREE_TOP)
 
-LIB_PATHS =		-L$(GTK_TOP)/lib \
+LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(MEANWHILE_TOP)/lib \
 			-L$(PURPLE_TOP)
 
--- a/libpurple/protocols/silc/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/protocols/silc/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -34,7 +34,7 @@
 			-I$(PIDGIN_TREE_TOP) \
 			-I$(SILC_TOOLKIT)/include
 
-LIB_PATHS =		-L$(GTK_TOP)/lib \
+LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(PURPLE_TOP) \
 			-L$(SILC_TOOLKIT)/lib
 
--- a/libpurple/protocols/silc/wb.c	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/protocols/silc/wb.c	Mon Apr 23 07:44:12 2007 +0000
@@ -433,7 +433,7 @@
 	wb->proto_data = NULL;
 }
 
-void silcpurple_wb_get_dimensions(PurpleWhiteboard *wb, int *width, int *height)
+void silcpurple_wb_get_dimensions(const PurpleWhiteboard *wb, int *width, int *height)
 {
 	SilcPurpleWb wbs = wb->proto_data;
 	*width = wbs->width;
@@ -452,7 +452,7 @@
 	purple_whiteboard_set_dimensions(wb, wbs->width, wbs->height);
 }
 
-void silcpurple_wb_get_brush(PurpleWhiteboard *wb, int *size, int *color)
+void silcpurple_wb_get_brush(const PurpleWhiteboard *wb, int *size, int *color)
 {
 	SilcPurpleWb wbs = wb->proto_data;
 	*size = wbs->brush_size;
--- a/libpurple/protocols/silc/wb.h	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/protocols/silc/wb.h	Mon Apr 23 07:44:12 2007 +0000
@@ -39,9 +39,9 @@
 			    SilcUInt32 message_len);
 void silcpurple_wb_start(PurpleWhiteboard *wb);
 void silcpurple_wb_end(PurpleWhiteboard *wb);
-void silcpurple_wb_get_dimensions(PurpleWhiteboard *wb, int *width, int *height);
+void silcpurple_wb_get_dimensions(const PurpleWhiteboard *wb, int *width, int *height);
 void silcpurple_wb_set_dimensions(PurpleWhiteboard *wb, int width, int height);
-void silcpurple_wb_get_brush(PurpleWhiteboard *wb, int *size, int *color);
+void silcpurple_wb_get_brush(const PurpleWhiteboard *wb, int *size, int *color);
 void silcpurple_wb_set_brush(PurpleWhiteboard *wb, int size, int color);
 void silcpurple_wb_send(PurpleWhiteboard *wb, GList *draw_list);
 void silcpurple_wb_clear(PurpleWhiteboard *wb);
--- a/libpurple/protocols/simple/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/protocols/simple/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -31,7 +31,7 @@
 			-I$(PURPLE_TOP)/win32 \
 			-I$(PIDGIN_TREE_TOP)
 
-LIB_PATHS =		-L$(GTK_TOP)/lib \
+LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(PURPLE_TOP)
 
 ##
--- a/libpurple/protocols/toc/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/protocols/toc/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -31,7 +31,7 @@
 			-I$(LIBPIDGIN_TREE_TOP)/win32 \
 			-I$(PIDGIN_TREE_TOP)
 
-LIB_PATHS =		-L$(GTK_TOP)/lib \
+LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(LIBPIDGIN_TREE_TOP)
 
 ##
--- a/libpurple/protocols/yahoo/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/protocols/yahoo/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -31,7 +31,7 @@
 			-I$(PURPLE_TOP)/win32 \
 			-I$(PIDGIN_TREE_TOP)
 
-LIB_PATHS =		-L$(GTK_TOP)/lib \
+LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(PURPLE_TOP)
 
 ##
--- a/libpurple/protocols/zephyr/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/libpurple/protocols/zephyr/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -42,7 +42,7 @@
    INCLUDE_PATHS += -I$(KRB4_TOP)/inc/krb4
 endif
 
-LIB_PATHS =		-L$(GTK_TOP)/lib \
+LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(PURPLE_TOP)
 
 ifeq ($(USE_KRB4), true)
--- a/pidgin/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/pidgin/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -31,7 +31,7 @@
 			-I$(GTK_TOP)/include/glib-2.0 \
 			-I$(GTK_TOP)/lib/glib-2.0/include
 
-INCLUDE_PATHS =	\
+INCLUDE_PATHS +=	\
 			$(PURPLE_INCLUDE_PATHS) \
 			-I$(PIDGIN_IDLETRACK_TOP) \
 			-I$(PIDGIN_TOP) \
@@ -44,7 +44,7 @@
 			-I$(GTKSPELL_TOP) \
 			-I$(ASPELL_TOP)/include
 
-LIB_PATHS =		-L$(GTK_TOP)/lib \
+LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(PURPLE_TOP) \
 			-L$(PIDGIN_TOP) \
 			-L$(PIDGIN_IDLETRACK_TOP) \
--- a/pidgin/gtkaccount.c	Mon Apr 23 07:03:53 2007 +0000
+++ b/pidgin/gtkaccount.c	Mon Apr 23 07:44:12 2007 +0000
@@ -229,8 +229,8 @@
 	if (pixbuf == NULL)
 	{
 		/* Show a placeholder icon */
-		GtkIconSize icon_size = gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL);
-		pixbuf = gtk_widget_render_icon(dialog->window, PIDGIN_STOCK_TOOLBAR_INSERT_IMAGE,
+		GtkIconSize icon_size = gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_SMALL);
+		pixbuf = gtk_widget_render_icon(dialog->window, PIDGIN_STOCK_TOOLBAR_SELECT_AVATAR,
 		                                icon_size, "PidginAccount");
 	}
 
--- a/pidgin/gtkconv.c	Mon Apr 23 07:03:53 2007 +0000
+++ b/pidgin/gtkconv.c	Mon Apr 23 07:44:12 2007 +0000
@@ -2002,6 +2002,8 @@
 		(event->keyval == GDK_F10) ||
 		(event->keyval == GDK_Shift_L) ||
 		(event->keyval == GDK_Shift_R) ||
+		(event->keyval == GDK_Control_L) ||
+		(event->keyval == GDK_Control_R) ||
 		(event->keyval == GDK_Escape) ||
 		(event->keyval == GDK_Up) ||
 		(event->keyval == GDK_Down) ||
@@ -2205,25 +2207,25 @@
 	if (l)
 		return l;
 	filename = g_strdup_printf("%s.png", prpl);
-	
+
 	path = g_build_filename(DATADIR, "pixmaps", "pidgin", "protocols", "16", filename, NULL);
 	pixbuf = gdk_pixbuf_new_from_file(path, NULL);
 	if (pixbuf)
 		l = g_list_append(l, pixbuf);
 	g_free(path);
-	
+
 	path = g_build_filename(DATADIR, "pixmaps", "pidgin", "protocols", "22", filename, NULL);
         pixbuf = gdk_pixbuf_new_from_file(path, NULL);
         if (pixbuf)
                 l = g_list_append(l, pixbuf);
         g_free(path);
-	
+
 	path = g_build_filename(DATADIR, "pixmaps", "pidgin", "protocols", "48", filename, NULL);
         pixbuf = gdk_pixbuf_new_from_file(path, NULL);
         if (pixbuf)
                 l = g_list_append(l, pixbuf);
         g_free(path);
-	
+
 	g_hash_table_insert(prpl_lists, g_strdup(prpl), l);
 	return l;
 }
@@ -2308,7 +2310,7 @@
 {
 	PidginConversation *gtkconv;
 	PidginWindow *win;
-	GList *l;	
+	GList *l;
 	GdkPixbuf *status = NULL;
 
 	g_return_if_fail(conv != NULL);
@@ -3159,7 +3161,7 @@
 	}
 
 	if (gtkwin->menu.typing_icon == NULL)
-	{	
+	{
 		gtkwin->menu.typing_icon = gtk_image_new_from_stock(stock_id, GTK_ICON_SIZE_MENU);
 		pidgin_menu_tray_append(PIDGIN_MENU_TRAY(gtkwin->menu.tray),
 								  gtkwin->menu.typing_icon,
@@ -3465,7 +3467,7 @@
 
 	pixbuf = gtk_widget_render_icon (gtkconv->tab_cont, image, gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL),
 				 	 "GtkTreeView");
-	
+
 	if (!pixbuf)
 		return NULL;
 
@@ -3473,6 +3475,7 @@
 	g_object_unref(pixbuf);
 
 	if (flags && purple_conv_chat_is_user_ignored(chat, name)) {
+/* TODO: the .../status/default directory isn't installed, should it be? */
 		filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "status", "default", "ignored.png", NULL);
 		pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
 		g_free(filename);
@@ -7848,7 +7851,7 @@
 	return window_list;
 }
 
-static GList* 
+static GList*
 make_status_icon_list(const char *stock, GtkWidget *w)
 {
 	GList *l = NULL;
@@ -7863,8 +7866,8 @@
 	return l;
 }
 
-static void 
-create_icon_lists(GtkWidget *w) 
+static void
+create_icon_lists(GtkWidget *w)
 {
 	available_list = make_status_icon_list(PIDGIN_STOCK_STATUS_AVAILABLE, w);
 	busy_list = make_status_icon_list(PIDGIN_STOCK_STATUS_BUSY, w);
--- a/pidgin/gtkstatusbox.c	Mon Apr 23 07:03:53 2007 +0000
+++ b/pidgin/gtkstatusbox.c	Mon Apr 23 07:44:12 2007 +0000
@@ -2047,9 +2047,9 @@
 	if (status_box->buddy_icon == NULL)
 	{
 		/* Show a placeholder icon */
-		GtkIconSize icon_size = gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL);
+		GtkIconSize icon_size = gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_SMALL);
 		status_box->buddy_icon = gtk_widget_render_icon(GTK_WIDGET(status_box),
-		                                                PIDGIN_STOCK_TOOLBAR_INSERT_IMAGE,
+		                                                PIDGIN_STOCK_TOOLBAR_SELECT_AVATAR,
 		                                                icon_size, "PidginStatusBox");
 	}
 
--- a/pidgin/pidginstock.c	Mon Apr 23 07:03:53 2007 +0000
+++ b/pidgin/pidginstock.c	Mon Apr 23 07:44:12 2007 +0000
@@ -161,6 +161,7 @@
 	{ PIDGIN_STOCK_TOOLBAR_PLUGINS, "toolbar", "plugins.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
 	{ PIDGIN_STOCK_TOOLBAR_TYPING, "toolbar", "typing.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
 	{ PIDGIN_STOCK_TOOLBAR_UNBLOCK, "toolbar", "unblock.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE },
+	{ PIDGIN_STOCK_TOOLBAR_SELECT_AVATAR, "toolbar", "select-avatar.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE },
 
 	{ PIDGIN_STOCK_TRAY_AVAILABLE, "tray", "tray-online.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE },
 	{ PIDGIN_STOCK_TRAY_AWAY, "tray", "tray-away.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE },
--- a/pidgin/pidginstock.h	Mon Apr 23 07:03:53 2007 +0000
+++ b/pidgin/pidginstock.h	Mon Apr 23 07:44:12 2007 +0000
@@ -123,6 +123,7 @@
 #define PIDGIN_STOCK_TOOLBAR_TYPING       "pidgin-typing"
 #define PIDGIN_STOCK_TOOLBAR_USER_INFO    "pidgin-info"
 #define PIDGIN_STOCK_TOOLBAR_UNBLOCK      "pidgin-unblock"
+#define PIDGIN_STOCK_TOOLBAR_SELECT_AVATAR "pidgin-select-avatar"
 
 /* Tray icons */
 #define PIDGIN_STOCK_TRAY_AVAILABLE       "pidgin-tray-available"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/pixmaps/toolbar/22/Makefile.am	Mon Apr 23 07:44:12 2007 +0000
@@ -0,0 +1,7 @@
+SUBDIRS = scalable
+
+EXTRA_DIST = select-avatar.png
+
+pidgintoolbarpixdir = $(datadir)/pixmaps/pidgin/toolbar/22
+pidgintoolbarpix_DATA = $(EXTRA_DIST)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/pixmaps/toolbar/22/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -0,0 +1,20 @@
+#
+# Makefile.mingw
+#
+# Description: Makefile for win32 (mingw) version of Pidgin pixmaps
+#
+
+PIDGIN_TREE_TOP := ../../../..
+include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
+
+datadir = $(PIDGIN_INSTALL_DIR)
+include ./Makefile.am
+
+.PHONY: install
+
+install:
+	if test '$(pidgintoolbarpix_DATA)'; then \
+	  mkdir -p $(pidgintoolbarpixdir); \
+	  cp $(pidgintoolbarpix_DATA) $(pidgintoolbarpixdir); \
+	fi;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/pixmaps/toolbar/22/scalable/Makefile.am	Mon Apr 23 07:44:12 2007 +0000
@@ -0,0 +1,1 @@
+EXTRA_DIST = select-avatar.svg
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/pixmaps/toolbar/22/scalable/select-avatar.svg	Mon Apr 23 07:44:12 2007 +0000
@@ -0,0 +1,362 @@
+<?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="32px"
+   height="32px"
+   id="svg4220"
+   sodipodi:version="0.32"
+   inkscape:version="0.44.1"
+   sodipodi:docbase="/home/hbons/Desktop"
+   sodipodi:docname="select-avatar.svg"
+   inkscape:export-filename="/home/hbons/Desktop/select-avatar.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs4222">
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5456">
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:1;"
+         offset="0"
+         id="stop5458" />
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:0;"
+         offset="1"
+         id="stop5460" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5448">
+      <stop
+         style="stop-color:#204a87;stop-opacity:1;"
+         offset="0"
+         id="stop5450" />
+      <stop
+         style="stop-color:#204a87;stop-opacity:0;"
+         offset="1"
+         id="stop5452" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5430">
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:1;"
+         offset="0"
+         id="stop5432" />
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:0;"
+         offset="1"
+         id="stop5434" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient7300">
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:1;"
+         offset="0"
+         id="stop7302" />
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:0;"
+         offset="1"
+         id="stop7304" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7300"
+       id="radialGradient7306"
+       cx="24.248138"
+       cy="27.184834"
+       fx="24.248138"
+       fy="27.184834"
+       r="12.499089"
+       gradientTransform="matrix(0.964825,0,0,0.631898,0.954495,11.94073)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3800">
+      <stop
+         style="stop-color:#f4d9b1;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop3802" />
+      <stop
+         style="stop-color:#df9725;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3804" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3800"
+       id="radialGradient4171"
+       gradientUnits="userSpaceOnUse"
+       cx="27.702486"
+       cy="14.540437"
+       fx="27.702486"
+       fy="14.540437"
+       r="9.1620579"
+       gradientTransform="matrix(1.191087,0,0,1.124022,-5.086983,-1.361697)" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3816">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3818" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop3820" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3816"
+       id="radialGradient4179"
+       gradientUnits="userSpaceOnUse"
+       cx="31.112698"
+       cy="19.008621"
+       fx="31.112698"
+       fy="19.008621"
+       r="8.6620579" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5235">
+      <stop
+         style="stop-color:#2e3436;stop-opacity:1;"
+         offset="0"
+         id="stop5237" />
+      <stop
+         style="stop-color:#2e3436;stop-opacity:0;"
+         offset="1"
+         id="stop5239" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5235"
+       id="radialGradient5241"
+       cx="23.234518"
+       cy="40.688972"
+       fx="23.234518"
+       fy="40.688972"
+       r="16.956987"
+       gradientTransform="matrix(1,0,0,0.133183,0,35.2699)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5430"
+       id="linearGradient5436"
+       x1="21.923523"
+       y1="5.3572826"
+       x2="21.923523"
+       y2="8.2855873"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5448"
+       id="linearGradient5454"
+       x1="19.647484"
+       y1="20.087271"
+       x2="19.647484"
+       y2="16.317591"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5456"
+       id="radialGradient5462"
+       cx="23.841593"
+       cy="5.5049477"
+       fx="23.841593"
+       fy="5.5049477"
+       r="12.434912"
+       gradientTransform="matrix(1,0,0,0.455294,0,5.588267)"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="12.862897"
+     inkscape:cx="9.3284133"
+     inkscape:cy="23.609005"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1274"
+     inkscape:window-height="966"
+     inkscape:window-x="3"
+     inkscape:window-y="25" />
+  <metadata
+     id="metadata4225">
+    <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
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <rect
+       style="opacity:0.18777293;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect5241"
+       width="28.220703"
+       height="4.7880888"
+       x="3.4984343"
+       y="29"
+       rx="1.9791059"
+       ry="2.0652294"
+       transform="matrix(1.133919,0,0,0.835407,-3.966942,3.773208)" />
+    <rect
+       style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:#787878;stroke-width:1.02434373;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4228"
+       width="30.345438"
+       height="29.079981"
+       x="1"
+       y="1"
+       transform="matrix(0.955663,0,0,0.99725,0.544337,0.50275)"
+       rx="0.85753107"
+       ry="0.85753107" />
+    <rect
+       style="opacity:1;fill:#3465a4;fill-opacity:1;stroke:#204a87;stroke-width:0.7288478;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect5398"
+       width="24.065218"
+       height="10.518487"
+       x="4"
+       y="5"
+       rx="0"
+       ry="0"
+       transform="matrix(1.04083,0,0,1.808617,-0.687226,-5.543083)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:0.52838428;fill:url(#radialGradient5241);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4340"
+       sodipodi:cx="23.234518"
+       sodipodi:cy="40.688972"
+       sodipodi:rx="16.956987"
+       sodipodi:ry="2.2583797"
+       d="M 40.191505 40.688972 A 16.956987 2.2583797 0 1 1  6.2775307,40.688972 A 16.956987 2.2583797 0 1 1  40.191505 40.688972 z"
+       transform="matrix(1.208941,0,0,1.980928,-23.06784,1.364833)" />
+    <path
+       transform="matrix(2.539812,0,0,0.410815,-78.49908,61.24256)"
+       sodipodi:type="arc"
+       style="opacity:1;color:black;fill:url(#radialGradient4179);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="path4306"
+       sodipodi:cx="31.112698"
+       sodipodi:cy="19.008621"
+       sodipodi:rx="8.6620579"
+       sodipodi:ry="8.6620579"
+       d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1  22.45064,19.008621 A 8.6620579 8.6620579 0 1 1  39.774755 19.008621 z" />
+    <rect
+       style="opacity:1;fill:#729fcf;fill-opacity:1;stroke:none;stroke-width:0.75000709;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect5243"
+       width="24.065218"
+       height="10.518487"
+       x="4"
+       y="5"
+       rx="0"
+       ry="0"
+       transform="matrix(0.99729,0,0,1.711273,1.083923e-2,-4.556362)" />
+    <rect
+       style="opacity:1;fill:url(#linearGradient5454);fill-opacity:1.0;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect5400"
+       width="9.617548"
+       height="3.7166083"
+       x="14.382452"
+       y="16"
+       transform="matrix(2.495439,0,0,1.883437,-31.89053,-15.13499)" />
+    <path
+       style="opacity:1;color:black;fill:#ad7fa8;fill-opacity:1;fill-rule:evenodd;stroke:#5c3566;stroke-width:2.18258166px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 25.986174,41.636039 L 36.592776,41.636039 C 39.59798,41.636039 42.57326,40.534107 43.663843,37.393398 C 44.699482,34.410922 43.84062,28.73134 37.123106,24.135146 L 24.57196,24.135146 C 17.854446,28.377786 17.014969,34.179977 18.561553,37.570174 C 20.137148,41.023964 22.804193,41.636039 25.986174,41.636039 z "
+       id="path4308"
+       sodipodi:nodetypes="cczcczc"
+       transform="matrix(0.45923,0,0,0.45712,-2.719922,3.467345)" />
+    <path
+       sodipodi:type="inkscape:offset"
+       inkscape:radius="-1.1784238"
+       inkscape:original="M 24.5625 24.125 C 17.844986 28.367641 17.015916 34.172303 18.5625 37.5625 C 20.138096 41.016289 22.818019 41.625 26 41.625 L 36.59375 41.625 C 39.598953 41.624999 42.565667 40.546959 43.65625 37.40625 C 44.691891 34.423774 43.842514 28.721194 37.125 24.125 L 24.5625 24.125 z "
+       style="opacity:0.45454544;color:black;fill:url(#radialGradient7306);fill-opacity:1;fill-rule:evenodd;stroke:#eeeeec;stroke-width:2.44687629px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="path7281"
+       d="M 24.96875,25.3125 C 18.887883,29.293056 18.373983,34.320202 19.625,37.0625 C 20.318936,38.583645 21.166625,39.341162 22.1875,39.8125 C 23.208375,40.283838 24.484153,40.4375 26,40.4375 L 36.59375,40.4375 C 37.955442,40.4375 39.252462,40.19959 40.28125,39.65625 C 41.310038,39.11291 42.08087,38.328274 42.53125,37.03125 C 43.335253,34.715853 42.805994,29.63256 36.71875,25.3125 L 24.96875,25.3125 z "
+       transform="matrix(0.421035,0,0,0.396694,-1.530147,5.45867)" />
+    <path
+       transform="matrix(0.813375,0,0,0.652798,-1.018657,5.456654)"
+       style="opacity:0.78977272;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 20.091094,19.980694 C 20.091094,21.249084 17.671238,21.620929 15.495478,22.278502 C 12.417166,21.65961 10.899861,21.249084 10.899861,19.980694 C 10.899861,18.712304 12.958697,17.682885 15.495478,17.682885 C 18.032258,17.682885 20.091094,18.712304 20.091094,19.980694 z "
+       id="path7285"
+       sodipodi:nodetypes="ccssc" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;color:black;fill:url(#radialGradient4171);fill-opacity:1;fill-rule:evenodd;stroke:#9a6308;stroke-width:1.44367862px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="path4320"
+       sodipodi:cx="31.112698"
+       sodipodi:cy="19.008621"
+       sodipodi:rx="8.6620579"
+       sodipodi:ry="8.6620579"
+       d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1  22.45064,19.008621 A 8.6620579 8.6620579 0 1 1  39.774755 19.008621 z"
+       transform="matrix(0.692676,0,0,0.692676,-10.051,-0.666813)" />
+    <path
+       d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1  22.45064,19.008621 A 8.6620579 8.6620579 0 1 1  39.774755 19.008621 z"
+       sodipodi:ry="8.6620579"
+       sodipodi:rx="8.6620579"
+       sodipodi:cy="19.008621"
+       sodipodi:cx="31.112698"
+       id="path4322"
+       style="opacity:0.25;color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:white;stroke-width:1.73241353px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       sodipodi:type="arc"
+       transform="matrix(0.57723,0,0,0.577231,-6.45918,1.527648)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#edd400;fill-opacity:1;stroke:#c4a000;stroke-width:0.53914499;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path5426"
+       sodipodi:cx="21.923523"
+       sodipodi:cy="6.8501439"
+       sodipodi:rx="2.0990605"
+       sodipodi:ry="2.2156751"
+       d="M 24.022583 6.8501439 A 2.0990605 2.2156751 0 1 1  19.824462,6.8501439 A 2.0990605 2.2156751 0 1 1  24.022583 6.8501439 z"
+       transform="matrix(1.905614,0,0,1.805319,-18.27777,-2.866695)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:0.48908296;fill:url(#linearGradient5436);fill-opacity:1;stroke:white;stroke-width:0.71885967;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path5428"
+       sodipodi:cx="21.923523"
+       sodipodi:cy="6.8501439"
+       sodipodi:rx="2.0990605"
+       sodipodi:ry="2.2156751"
+       d="M 24.022583 6.8501439 A 2.0990605 2.2156751 0 1 1  19.824462,6.8501439 A 2.0990605 2.2156751 0 1 1  24.022583 6.8501439 z"
+       transform="matrix(1.429212,0,0,1.353989,-7.83336,0.224977)" />
+    <rect
+       style="opacity:0.46724891;fill:url(#radialGradient5462);fill-opacity:1.0;stroke:white;stroke-width:0.80460578;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect5438"
+       width="24.065218"
+       height="10.518487"
+       x="4"
+       y="5"
+       rx="0"
+       ry="0"
+       transform="matrix(0.955736,0,0,1.616202,0.677056,-3.581013)" />
+    <rect
+       style="opacity:1;fill:none;fill-opacity:1;stroke:white;stroke-width:1.10022128;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect5464"
+       width="30.345438"
+       height="29.079981"
+       x="1"
+       y="1"
+       transform="matrix(0.889755,0,0,0.928474,1.610245,1.571526)"
+       rx="0"
+       ry="0" />
+  </g>
+</svg>
Binary file pidgin/pixmaps/toolbar/22/select-avatar.png has changed
--- a/pidgin/pixmaps/toolbar/Makefile.am	Mon Apr 23 07:03:53 2007 +0000
+++ b/pidgin/pixmaps/toolbar/Makefile.am	Mon Apr 23 07:44:12 2007 +0000
@@ -1,1 +1,1 @@
-SUBDIRS = 16
+SUBDIRS = 16 22
--- a/pidgin/plugins/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/pidgin/plugins/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -33,7 +33,7 @@
 			-I$(PIDGIN_TOP) \
 			-I$(PIDGIN_TOP)/win32
 
-LIB_PATHS =		-L$(GTK_TOP)/lib \
+LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(PURPLE_TOP) \
 			-L$(PIDGIN_TOP)
 
--- a/pidgin/plugins/perl/common/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/pidgin/plugins/perl/common/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -29,7 +29,7 @@
 			-I$(GTK_TOP)/lib/gtk-2.0/include \
 			-I$(PERL_LIB_TOP)/CORE
 
-LIB_PATHS = 		-L$(PERL_LIB_TOP) \
+LIB_PATHS += 		-L$(PERL_LIB_TOP) \
 			-L$(PURPLE_TOP) \
 			-L$(PIDGIN_TOP) \
 			-L$(PURPLE_PERL_TOP) \
--- a/pidgin/plugins/ticker/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/pidgin/plugins/ticker/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -27,7 +27,7 @@
 			-I$(PIDGIN_TOP)/win32 \
 			-I$(PIDGIN_TREE_TOP)
 
-LIB_PATHS =		-L$(GTK_TOP)/lib \
+LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(PURPLE_TOP) \
 			-L$(PIDGIN_TOP)
 
--- a/pidgin/plugins/win32/transparency/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/pidgin/plugins/win32/transparency/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -28,7 +28,7 @@
 			-I$(PIDGIN_TOP)/win32 \
 			-I$(PIDGIN_TREE_TOP)
 
-LIB_PATHS =		-L$(GTK_TOP)/lib \
+LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(PURPLE_TOP) \
 			-L$(PIDGIN_TOP)
 
--- a/pidgin/plugins/win32/winprefs/Makefile.mingw	Mon Apr 23 07:03:53 2007 +0000
+++ b/pidgin/plugins/win32/winprefs/Makefile.mingw	Mon Apr 23 07:44:12 2007 +0000
@@ -28,7 +28,7 @@
 			-I$(PIDGIN_TOP)/win32 \
 			-I$(PIDGIN_TREE_TOP)
 
-LIB_PATHS =		-L$(GTK_TOP)/lib \
+LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(PURPLE_TOP) \
 			-L$(PIDGIN_TOP)
 
--- a/po/POTFILES.in	Mon Apr 23 07:03:53 2007 +0000
+++ b/po/POTFILES.in	Mon Apr 23 07:44:12 2007 +0000
@@ -36,6 +36,7 @@
 libpurple/connection.c
 libpurple/conversation.c
 libpurple/dbus-server.c
+libpurple/dbus-server.h
 libpurple/desktopitem.c
 libpurple/dnsquery.c
 libpurple/ft.c
@@ -77,6 +78,7 @@
 libpurple/protocols/jabber/buddy.c
 libpurple/protocols/jabber/chat.c
 libpurple/protocols/jabber/jabber.c
+libpurple/protocols/jabber/libxmpp.c
 libpurple/protocols/jabber/message.c
 libpurple/protocols/jabber/parser.c
 libpurple/protocols/jabber/presence.c