changeset 28010:0754698c49f4

merged with im.pidgin.pidgin
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Sun, 26 Jul 2009 22:18:59 +0900
parents 7a661fe78cdd (diff) efe680b86811 (current diff)
children 586093c4b17b
files configure.ac libpurple/certificate.c libpurple/protocols/jabber/google.c libpurple/protocols/jabber/jabber.c libpurple/protocols/oscar/family_icbm.c libpurple/protocols/yahoo/libymsg.c libpurple/server.c pidgin/gtkblist.c pidgin/pixmaps/dialogs/64/scalable/auth.svg pidgin/pixmaps/dialogs/64/scalable/cool.svg pidgin/pixmaps/dialogs/64/scalable/dialog.svg pidgin/pixmaps/dialogs/64/scalable/error.svg pidgin/pixmaps/dialogs/64/scalable/info.svg pidgin/pixmaps/dialogs/64/scalable/mail.svg pidgin/pixmaps/dialogs/64/scalable/question.svg pidgin/pixmaps/dialogs/64/scalable/warning.svg pidgin/pixmaps/emblems/16/scalable/aol-client.svg pidgin/pixmaps/emblems/16/scalable/birthday.svg pidgin/pixmaps/emblems/16/scalable/blocked.svg pidgin/pixmaps/emblems/16/scalable/bot.svg pidgin/pixmaps/emblems/16/scalable/external.svg pidgin/pixmaps/emblems/16/scalable/female.svg pidgin/pixmaps/emblems/16/scalable/free-for-chat.svg pidgin/pixmaps/emblems/16/scalable/game.svg pidgin/pixmaps/emblems/16/scalable/male.svg pidgin/pixmaps/emblems/16/scalable/mobile.svg pidgin/pixmaps/emblems/16/scalable/music.svg pidgin/pixmaps/emblems/16/scalable/not-authorized.svg pidgin/pixmaps/emblems/16/scalable/qq-member.svg pidgin/pixmaps/emblems/16/scalable/secure.svg pidgin/pixmaps/emblems/16/scalable/unavailable.svg pidgin/pixmaps/emblems/16/scalable/video.svg pidgin/pixmaps/emblems/16/scalable/voice.svg pidgin/pixmaps/protocols/48/scalable/aim.svg pidgin/pixmaps/protocols/48/scalable/bonjour.svg pidgin/pixmaps/protocols/48/scalable/gadu-gadu.svg pidgin/pixmaps/protocols/48/scalable/google-talk.svg pidgin/pixmaps/protocols/48/scalable/icq.svg pidgin/pixmaps/protocols/48/scalable/irc.svg pidgin/pixmaps/protocols/48/scalable/jabber.svg pidgin/pixmaps/protocols/48/scalable/meanwhile.svg pidgin/pixmaps/protocols/48/scalable/msn.svg pidgin/pixmaps/protocols/48/scalable/novell.svg pidgin/pixmaps/protocols/48/scalable/qq.svg pidgin/pixmaps/protocols/48/scalable/silc.svg pidgin/pixmaps/protocols/48/scalable/simple.svg pidgin/pixmaps/protocols/48/scalable/yahoo.svg pidgin/pixmaps/protocols/48/scalable/zephyr.svg
diffstat 51 files changed, 1141 insertions(+), 1455 deletions(-) [+]
line wrap: on
line diff
--- a/autogen.sh	Sat Jul 25 02:55:33 2009 +0000
+++ b/autogen.sh	Sun Jul 26 22:18:59 2009 +0900
@@ -149,4 +149,4 @@
 # Run configure
 ###############################################################################
 echo "running ./configure ${CONFIGURE_FLAGS} $@"
-./configure ${CONFIGURE_FLAGS} $@
+#./configure ${CONFIGURE_FLAGS} $@
--- a/configure.ac	Sat Jul 25 02:55:33 2009 +0000
+++ b/configure.ac	Sun Jul 26 22:18:59 2009 +0900
@@ -144,7 +144,7 @@
 	;;
 esac
 
-ALL_LINGUAS="af am ar az be@latin bg bn bs ca ca@valencia cs da de dz el en_AU en_CA en_GB eo es et eu fa fi fr ga gl gu he hi hu hy id it ja ka km kn ko ku lo lt mk mn my_MM nb ne nl nn oc pa pl pt_BR pt ps ro ru si sk sl sq sr sr@latin sv sw ta te th tr uk ur vi xh zh_CN zh_HK zh_TW"
+ALL_LINGUAS=""
 AM_GLIB_GNU_GETTEXT
 
 dnl If we don't have msgfmt, then po/ is going to fail -- ensure that
--- a/libpurple/conversation.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/conversation.c	Sun Jul 26 22:18:59 2009 +0900
@@ -653,6 +653,8 @@
 	PurpleBuddy *b;
 	PurpleChat *chat;
 	const char *text = NULL, *name;
+	gchar *utf8;
+	gsize dummy;
 
 	g_return_if_fail(conv != NULL);
 
@@ -671,7 +673,9 @@
 	if(text == NULL)
 		text = name;
 
-	purple_conversation_set_title(conv, text);
+	utf8 = sanitize_utf(text, strlen(text), &dummy);
+	purple_conversation_set_title(conv, utf8);
+	g_free(utf8);
 }
 
 void
@@ -1162,17 +1166,27 @@
 			  PurpleMessageFlags flags, time_t mtime)
 {
 	PurpleConversation *c;
+	char *tmpmessage = NULL;
 
 	g_return_if_fail(im != NULL);
 	g_return_if_fail(message != NULL);
 
 	c = purple_conv_im_get_conversation(im);
 
+	// yaz
+	if (purple_prefs_get_bool("/purple/conversations/msnstyle")) {
+		tmpmessage = g_strdup_printf("<br>%s", message);
+	} else {
+		tmpmessage = g_strdup_printf("%s", message);
+	}
+
 	/* Pass this on to either the ops structure or the default write func. */
 	if (c->ui_ops != NULL && c->ui_ops->write_im != NULL)
-		c->ui_ops->write_im(c, who, message, flags, mtime);
+		c->ui_ops->write_im(c, who, tmpmessage, flags, mtime);
 	else
-		purple_conversation_write(c, who, message, flags, mtime);
+		purple_conversation_write(c, who, tmpmessage, flags, mtime);
+
+	g_free(tmpmessage);
 }
 
 gboolean purple_conv_present_error(const char *who, PurpleAccount *account, const char *what)
--- a/libpurple/notify.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/notify.c	Sun Jul 26 22:18:59 2009 +0900
@@ -417,6 +417,9 @@
 		purple_signal_emit(purple_notify_get_handle(), "displaying-userinfo",
 						 purple_connection_get_account(gc), who, user_info);
 
+		g_return_val_if_fail(g_utf8_validate(who, -1, NULL), NULL); //yaz
+		g_return_val_if_fail(g_utf8_validate(user_info, -1, NULL), NULL); //yaz
+
 		ui_handle = ops->notify_userinfo(gc, who, user_info);
 
 		if (ui_handle != NULL) {
--- a/libpurple/protocols/gg/lib/http.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/gg/lib/http.c	Sun Jul 26 22:18:59 2009 +0900
@@ -44,6 +44,7 @@
 
 #include "compat.h"
 #include "libgadu.h"
+#include <glib.h>
 
 /*
  * gg_http_connect() // funkcja pomocnicza
--- a/libpurple/protocols/gg/lib/pubdir50.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/gg/lib/pubdir50.c	Sun Jul 26 22:18:59 2009 +0900
@@ -22,6 +22,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <time.h>
+#include <glib.h>
 
 #include "libgadu.h"
 
--- a/libpurple/protocols/irc/irc.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/irc/irc.c	Sun Jul 26 22:18:59 2009 +0900
@@ -997,6 +997,12 @@
 	option = purple_account_option_bool_new(_("Auto-detect incoming UTF-8"), "autodetect_utf8", IRC_DEFAULT_AUTODETECT);
 	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
 
+	option = purple_account_option_bool_new(_("Use SO/SI to send hankaku kana"), "irc_use_sosi", FALSE);
+	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
+
+	option = purple_account_option_bool_new(_("Use 8bit to send hankaku kana"), "irc_use_8bit", FALSE);
+	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
+
 	option = purple_account_option_string_new(_("Username"), "username", "");
 	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
 
--- a/libpurple/protocols/irc/parse.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/irc/parse.c	Sun Jul 26 22:18:59 2009 +0900
@@ -35,7 +35,7 @@
 #include <ctype.h>
 
 static char *irc_send_convert(struct irc_conn *irc, const char *string);
-static char *irc_recv_convert(struct irc_conn *irc, const char *string);
+static char *irc_recv_convert(struct irc_conn *irc, char *string);
 
 static void irc_parse_error_cb(struct irc_conn *irc, char *input);
 
@@ -160,6 +160,20 @@
 	{ NULL, NULL, NULL, NULL }
 };
 
+/* yaz */
+#define ASCII	0
+#define KANJI	1
+#define KANA	2
+#define ROMAN	3
+char seq_ascii[] = {0x1B,0x28,0x42,0x00}; /* ESC ( B */
+char seq_kanji[] = {0x1B,0x24,0x42,0x00}; /* ESC $ B */
+char seq_kana[]  = {0x1B,0x28,0x49,0x00}; /* ESC ( I */
+char seq_roman[] = {0x1B,0x28,0x4A,0x00}; /* ESC ( J */
+char *seq[4] = {seq_ascii, seq_kanji, seq_kana, seq_roman};
+char *jisstate[5] = {"ASCII", "KANJI", "KANA", "ROMAN"};
+char SO[] = {0x0E,0x00};
+char SI[] = {0x0F,0x00};
+
 static PurpleCmdRet irc_parse_purple_cmd(PurpleConversation *conv, const gchar *cmd,
                                         gchar **args, gchar **error, void *data)
 {
@@ -227,34 +241,111 @@
 	GError *err = NULL;
 	gchar **encodings;
 	const gchar *enclist;
+	char *escpos = NULL;
+	char *temp = NULL;
+	gboolean iskana = FALSE;
+	char *pos = NULL;
+	gboolean irc_use_sosi, irc_use_8bit;
+	char *strtmp;
+	gsize strtmp_len;
 
 	enclist = purple_account_get_string(irc->account, "encoding", IRC_DEFAULT_CHARSET);
 	encodings = g_strsplit(enclist, ",", 2);
 
+	irc_use_sosi = purple_account_get_bool(irc->account, "irc_use_sosi", FALSE);
+	irc_use_8bit = purple_account_get_bool(irc->account, "irc_use_8bit", FALSE);
+
 	if (encodings[0] == NULL || !g_ascii_strcasecmp("UTF-8", encodings[0])) {
 		g_strfreev(encodings);
 		return NULL;
 	}
 
-	utf8 = g_convert(string, strlen(string), encodings[0], "UTF-8", NULL, NULL, &err);
+	strtmp  = botch_utf(string, strlen(string), &strtmp_len);
+	utf8 = g_convert(strtmp, strlen(strtmp), encodings[0], "UTF-8", NULL, NULL, &err);
+
 	if (err) {
 		purple_debug(PURPLE_DEBUG_ERROR, "irc", "Send conversion error: %s\n", err->message);
 		purple_debug(PURPLE_DEBUG_ERROR, "irc", "Sending as UTF-8 instead of %s\n", encodings[0]);
-		utf8 = g_strdup(string);
+		utf8 = g_strdup(strtmp);
 		g_error_free(err);
 	}
+
+	/* yaz */
+	if (!strncasecmp("iso-2022-jp", encodings[0], strlen("iso-2022-jp"))) {
+		escpos = strrchr(utf8, 0x1B);
+		if(escpos && (!strncmp(seq_kanji, escpos, 3) || !strncmp(seq_kana, escpos, 3))){
+			char *oldutf8 = utf8;
+			utf8 = g_realloc(utf8, strlen(utf8)+1+3);
+			if(utf8)
+				strncat(utf8, seq_ascii, 3);
+			else
+				utf8 = oldutf8;
+		}
+
+		if(irc_use_sosi || irc_use_8bit){
+			/* SO/SI */
+			//find kana escape and replace with roman+SO
+			temp = g_malloc0(strlen(utf8) * 7); //XXX should be reasonable size
+			pos = utf8;
+			while(pos < utf8+strlen(utf8)){
+				escpos = strchr(pos, 0x1B);
+				if(escpos){
+					if(!strncmp(seq_kana, escpos, 3)){ /* kana found */
+						iskana = TRUE;
+						strncat(temp, pos, escpos-pos);
+						strcat(temp, seq_roman);
+						if(irc_use_sosi)
+							strcat(temp, SO);
+						pos = escpos+3;
+					} else {
+						if(iskana){
+							char *ptr;
+							ptr = temp + strlen(temp);
+							while(pos<escpos){
+								if(irc_use_8bit)
+									*ptr = *pos + 128; // convert to 8bit
+								else
+									*ptr = *pos;
+								ptr++; pos++;
+							}
+							if(irc_use_sosi)
+								strcat(temp, SI);
+							strncat(temp, escpos, 3);
+							pos = escpos+3;
+							iskana = FALSE;
+						} else {
+							strncat(temp, pos, escpos-pos+3); //include esc
+							pos = escpos+3;
+						}
+					}
+				} else { /* escpos == NULL */
+					strcat(temp, pos);
+					break;
+				}
+			}
+			g_free(utf8);
+			utf8 = temp;
+		}
+	}
+
 	g_strfreev(encodings);
-
+	g_free(strtmp);
 	return utf8;
 }
 
-static char *irc_recv_convert(struct irc_conn *irc, const char *string)
+static char *irc_recv_convert(struct irc_conn *irc, char *string)
 {
 	char *utf8 = NULL;
 	const gchar *charset, *enclist;
 	gchar **encodings;
 	gboolean autodetect;
 	int i;
+	GError *err;
+	gboolean retry;
+	gsize in_len, out_len;
+	int conv_len;
+	char *strtmp;
+	gsize strtmp_len;
 
 	enclist = purple_account_get_string(irc->account, "encoding", IRC_DEFAULT_CHARSET);
 	encodings = g_strsplit(enclist, ",", -1);
@@ -278,13 +369,123 @@
 		if (!g_ascii_strcasecmp("UTF-8", charset)) {
 			if (g_utf8_validate(string, -1, NULL))
 				utf8 = g_strdup(string);
+		} else if (!strncasecmp("iso-2022-jp-2", charset, strlen("iso-2022-jp-2"))){
+			/* pre-process quirky jis */
+			unsigned char *jisstr;
+			unsigned char *ptr, *ptr2;
+			int state = ASCII;
+			int is8bit = FALSE;
+
+			jisstr = (unsigned char *)calloc(1, strlen(string)*7); /* enough? */
+			ptr = (unsigned char *)string; ptr2 = jisstr;
+
+			while(*ptr){
+				if(*ptr == 0x1B){
+					/* escape sequence. */
+					if(*(ptr+1) == 0x28 && *(ptr+2) == 0x42){
+						state = ASCII;
+
+					} else if(*(ptr+1) == 0x24 && *(ptr+2) == 0x42){
+						state = KANJI;
+
+					} else if(*(ptr+1) == 0x28 && *(ptr+2) == 0x49){
+						state = KANA;
+
+					} else if(*(ptr+1) == 0x28 && *(ptr+2) == 0x4a){
+						state = ROMAN;
+
+					}
+					purple_debug(PURPLE_DEBUG_INFO, "irc", "state %s\n", jisstate[state]);
+				}
+				if(*ptr >= 0xA1 && *ptr <= 0xDF){
+					/* raw 8bit */
+					if(!is8bit){
+						strcat((char *)jisstr, seq[KANA]);
+						ptr2 += 3;
+						is8bit = TRUE;
+						purple_debug(PURPLE_DEBUG_INFO, "irc", "8bit = TRUE\n");
+					}
+					*ptr2 = *ptr - 0x80;
+					ptr++ ; ptr2++;
+				} else {
+					/* 7bit */
+					if(*ptr == 0x0E){
+						/* SO */
+						strcat((char *)jisstr, seq[KANA]);
+						ptr++; ptr2 += 3;
+						purple_debug(PURPLE_DEBUG_INFO, "irc", "SO\n");
+						continue;
+					} else if(*ptr == 0x0F){
+						/* SI */
+						strcat((char *)jisstr, seq[state]);
+						purple_debug(PURPLE_DEBUG_INFO, "irc", "SI to %s\n", jisstate[state]);
+						ptr++; ptr2 += 3;
+						purple_debug(PURPLE_DEBUG_INFO, "irc", "SI\n");
+						continue;
+					}
+					if(is8bit){ /* the edge of 8bit -> 7bit */
+						purple_debug(PURPLE_DEBUG_INFO, "irc", "8bit to %s\n", jisstate[state]);
+						strcat((char *)jisstr, seq[state]);
+						ptr2 += 3;
+						is8bit=FALSE;
+						purple_debug(PURPLE_DEBUG_INFO, "irc", "8bit = FALSE\n");
+					}
+					/* copy str */
+					*ptr2 = *ptr;
+					ptr++; ptr2++;
+				}
+			}
+
+			/* convert & error recovery */
+			do {
+				err = NULL;
+				retry = FALSE;
+
+				conv_len = strlen((char *)jisstr);
+				utf8 = g_convert_with_fallback((char *)jisstr, conv_len, "UTF-8", charset,
+							       "?", &in_len, &out_len, &err);
+				if(err != NULL){
+					if(err->code == G_CONVERT_ERROR_ILLEGAL_SEQUENCE){
+						memmove(jisstr + in_len, jisstr + in_len + 1,
+							conv_len - in_len -1);
+						conv_len--;
+						*(jisstr + conv_len) = '\0';
+						retry = TRUE;
+					}
+					g_error_free(err);
+				}
+			} while(retry);
+
+			if(jisstr)
+				free(jisstr);
+
 		} else {
-			utf8 = g_convert(string, -1, "UTF-8", charset, NULL, NULL, NULL);
+			do {
+				err = NULL;
+				retry = FALSE;
+
+				conv_len = strlen(string);
+				utf8 = g_convert_with_fallback(string, conv_len, "UTF-8", charset,
+							       "?", &in_len, &out_len, &err);
+				if(err != NULL){
+					if(err->code == G_CONVERT_ERROR_ILLEGAL_SEQUENCE){
+						memmove(string + in_len, string + in_len + 1,
+							 conv_len - in_len -1);
+						conv_len--;
+						*(string + conv_len) = '\0';
+						retry = TRUE;
+					}
+					g_error_free(err);
+				}
+			} while(retry);
 		}
 
-		if (utf8) {
-			g_strfreev(encodings);
-			return utf8;
+
+		if(utf8){
+			strtmp = sanitize_utf(utf8, strlen(utf8), &strtmp_len);
+ 			g_strfreev(encodings);
+			g_free(utf8);
+			return strtmp;
 		}
 	}
 	g_strfreev(encodings);
--- a/libpurple/protocols/jabber/google.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/jabber/google.c	Sun Jul 26 22:18:59 2009 +0900
@@ -1,3 +1,4 @@
+/* -*- coding: utf-8 -*- */
 /**
  * Purple is the legal property of its developers, whose names are too numerous
  * to list here.  Please refer to the COPYRIGHT file distributed with this
@@ -1288,8 +1289,11 @@
 	if (!js->googletalk)
 		return;
 	if (jbr->status && purple_str_has_prefix(jbr->status, "♫ ")) {
+		gchar *unescaped;
+		unescaped = purple_unescape_html(jbr->status + strlen("♫ "));
 		purple_prpl_got_user_status(js->gc->account, user, "tune",
-					    PURPLE_TUNE_TITLE, jbr->status + strlen("♫ "), NULL);
+					    PURPLE_TUNE_TITLE, unescaped, NULL);
+		g_free(unescaped);
 		g_free(jbr->status);
 		jbr->status = NULL;
 	} else {
--- a/libpurple/protocols/jabber/jabber.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/jabber/jabber.c	Sun Jul 26 22:18:59 2009 +0900
@@ -458,8 +458,9 @@
                            gpointer unused)
 {
 	JabberStream *js;
-	char *txt;
+	char *txt, *utf;
 	int len;
+	gsize utflen;
 
 	if (NULL == packet)
 		return;
@@ -471,8 +472,9 @@
 				g_str_equal((*packet)->name, "presence"))
 			xmlnode_set_namespace(*packet, "jabber:client");
 	txt = xmlnode_to_str(*packet, &len);
-	jabber_send_raw(js, txt, len);
-	g_free(txt);
+	utf = botch_utf(txt, len, &utflen); //yaz
+	jabber_send_raw(js, utf, utflen);
+	g_free(txt); g_free(utf);
 }
 
 void jabber_send(JabberStream *js, xmlnode *packet)
@@ -2081,6 +2083,7 @@
 				const char *title = purple_status_get_attr_string(tune, PURPLE_TUNE_TITLE);
 				const char *artist = purple_status_get_attr_string(tune, PURPLE_TUNE_ARTIST);
 				const char *album = purple_status_get_attr_string(tune, PURPLE_TUNE_ALBUM);
+
 				char *playing = purple_util_format_song_info(title, artist, album, NULL);
 				if (playing) {
 					purple_notify_user_info_add_pair(user_info, _("Now Listening"), playing);
--- a/libpurple/protocols/jabber/message.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/jabber/message.c	Sun Jul 26 22:18:59 2009 +0900
@@ -616,13 +616,17 @@
 				jm->thread_id = xmlnode_get_data(child);
 		} else if(!strcmp(child->name, "body") && !strcmp(xmlns,"jabber:client")) {
 			if(!jm->body) {
-				char *msg = xmlnode_to_str(child, NULL);
+				char *tmp, *msg;
+				gsize len;
+				tmp = xmlnode_to_str(child, NULL);
+				msg = sanitize_utf(tmp, strlen(tmp), &len);
 				jm->body = purple_strdup_withhtml(msg);
-				g_free(msg);
+				g_free(msg); g_free(tmp);
 			}
 		} else if(!strcmp(child->name, "html") && !strcmp(xmlns,"http://jabber.org/protocol/xhtml-im")) {
 			if(!jm->xhtml && xmlnode_get_child(child, "body")) {
 				char *c;
+				gsize len;
 
 				const PurpleConnection *gc = js->gc;
 				PurpleAccount *account = purple_connection_get_account(gc);
@@ -673,7 +677,9 @@
 				reformatted_xhtml =
 					jabber_message_xml_to_string_strip_img_smileys(child);
 
-				jm->xhtml = reformatted_xhtml;
+				jm->xhtml =
+					sanitize_utf(reformatted_xhtml,
+								 strlen(reformatted_xhtml), &len);
 
 				/* add known custom emoticons to the conversation */
 				/* note: if there were no smileys in the incoming message, or
--- a/libpurple/protocols/jabber/si.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/jabber/si.c	Sun Jul 26 22:18:59 2009 +0900
@@ -38,6 +38,8 @@
 
 #define STREAMHOST_CONNECT_TIMEOUT 15
 
+#include "util.h"
+
 typedef struct _JabberSIXfer {
 	JabberStream *js;
 
@@ -1258,8 +1260,17 @@
 	JabberIq *iq;
 	xmlnode *si, *file, *feature, *x, *field, *option, *value;
 	char buf[32];
+	gchar *f1 = NULL, *f2 = NULL;
+	gsize dummy;
 
-	xfer->filename = g_path_get_basename(xfer->local_filename);
+	/* yaz */
+	f1 = g_filename_display_basename(xfer->local_filename);
+	f2 = botch_utf(f1, strlen(f1), &dummy);
+	if(f2){
+		purple_xfer_set_filename(xfer, (char *)f2);
+	}
+	g_free(f1); f1 = NULL;
+	g_free(f2); f2 = NULL;
 
 	iq = jabber_iq_new(jsx->js, JABBER_IQ_SET);
 	xmlnode_set_attrib(iq->node, "to", xfer->who);
--- a/libpurple/protocols/msn/msg.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/msn/msg.c	Sun Jul 26 22:18:59 2009 +0900
@@ -108,7 +108,8 @@
 msn_message_new_plain(const char *message)
 {
 	MsnMessage *msg;
-	char *message_cr;
+	char *message_cr, *message_cr2;
+	gsize len;
 
 	msg = msn_message_new(MSN_MSG_TEXT);
 	msg->retries = 1;
@@ -120,8 +121,10 @@
 						 "FN=Segoe%20UI; EF=; CO=0; CS=1;PF=0");
 
 	message_cr = purple_str_add_cr(message);
-	msn_message_set_bin_data(msg, message_cr, strlen(message_cr));
+	message_cr2 = botch_utf((gchar *)message_cr, -1, &len);
+	msn_message_set_bin_data(msg, message_cr2, len);
 	g_free(message_cr);
+	g_free(message_cr2);
 
 	return msg;
 }
@@ -820,14 +823,15 @@
 	char *body_str;
 	char *body_enc;
 	char *body_final;
-	size_t body_len;
+	char *yaz_body_final;
+	size_t body_len, new_len;
 	const char *passport;
 	const char *value;
 
 	gc = cmdproc->session->account->gc;
 
 	body = msn_message_get_bin_data(msg, &body_len);
-	body_str = g_strndup(body, body_len);
+	body_str = sanitize_utf(body, body_len, &new_len);
 	body_enc = g_markup_escape_text(body_str, -1);
 	g_free(body_str);
 
@@ -864,23 +868,30 @@
 		body_final = body_enc;
 	}
 
+	/* yaz */
+	/* replace 0D 0A with <br> */
+	yaz_body_final = purple_strreplace(body_final, "\r\n", "<br>");
+//	purple_debug_info("yaz msn", "yaz_body_final=%s\n", yaz_body_final);
+	g_free(body_final);
+	body_final = yaz_body_final;
+
 	if (cmdproc->servconn->type == MSN_SERVCONN_SB) {
 		MsnSwitchBoard *swboard = cmdproc->data;
 
 		swboard->flag |= MSN_SB_FLAG_IM;
 
 		if (swboard->current_users > 1 ||
-			((swboard->conv != NULL) &&
-			 purple_conversation_get_type(swboard->conv) == PURPLE_CONV_TYPE_CHAT))
+		    ((swboard->conv != NULL) &&
+		     purple_conversation_get_type(swboard->conv) == PURPLE_CONV_TYPE_CHAT))
 		{
 			/* If current_users is always ok as it should then there is no need to
 			 * check if this is a chat. */
 			if (swboard->current_users <= 1)
 				purple_debug_misc("msn", "plain_msg: current_users(%d)\n",
-								swboard->current_users);
+						  swboard->current_users);
 
 			serv_got_chat_in(gc, swboard->chat_id, passport, 0, body_final,
-							 time(NULL));
+					 time(NULL));
 			if (swboard->conv == NULL)
 			{
 				swboard->conv = purple_find_chat(gc, swboard->chat_id);
@@ -893,7 +904,7 @@
 			if (swboard->conv == NULL)
 			{
 				swboard->conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM,
-										passport, purple_connection_get_account(gc));
+										      passport, purple_connection_get_account(gc));
 				swboard->flag |= MSN_SB_FLAG_IM;
 			}
 		}
--- a/libpurple/protocols/msn/msn.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/msn/msn.c	Sun Jul 26 22:18:59 2009 +0900
@@ -180,14 +180,15 @@
 	MsnSession *session;
 	PurpleAccount *account;
 	const char *alias;
+	gchar *tmp;
+	gsize dummy;
 
 	session = gc->proto_data;
 	cmdproc = session->notification->cmdproc;
 	account = purple_connection_get_account(gc);
 
-	if (entry && *entry)
-	{
-		char *tmp = g_strdup(entry);
+	if(entry && *entry) {
+		tmp = botch_utf(entry, strlen(entry), &dummy);
 		alias = purple_url_encode(g_strstrip(tmp));
 		g_free(tmp);
 	}
@@ -206,6 +207,9 @@
 	}
 
 	msn_cmdproc_send(cmdproc, "PRP", "MFN %s", alias);
+	// propagate change on server side to local --yaz
+	purple_account_set_alias(account, entry); //oct16 <-- XXX questionable. Sep19.
+
 }
 
 static void
@@ -333,6 +337,23 @@
 }
 
 static void
+msn_ipc_init(PurplePlugin *plugin)
+{
+	purple_plugin_ipc_register(plugin, "msn_set_friendly_name",
+				   PURPLE_CALLBACK(msn_act_id),
+				   purple_marshal_VOID__POINTER_POINTER,
+				   purple_value_new(PURPLE_TYPE_UNKNOWN),2,
+				   purple_value_new(PURPLE_TYPE_POINTER),
+				   purple_value_new(PURPLE_TYPE_POINTER));
+}
+
+static void
+msn_ipc_end(PurplePlugin *plugin)
+{
+	purple_plugin_ipc_unregister_all(plugin);
+}
+
+static void
 msn_show_set_home_phone(PurplePluginAction *action)
 {
 	PurpleConnection *gc;
@@ -1095,13 +1116,18 @@
 msn_send_emoticons(MsnSwitchBoard *swboard, GString *body)
 {
 	MsnMessage *msg;
+	gchar *tmp;
+	gsize len;
 
 	g_return_if_fail(body != NULL);
 
 	msg = msn_message_new(MSN_MSG_SLP);
 	msn_message_set_content_type(msg, "text/x-mms-emoticon");
 	msn_message_set_flag(msg, 'N');
-	msn_message_set_bin_data(msg, body->str, body->len);
+
+	tmp = botch_utf(body->str, -1, &len);
+	msn_message_set_bin_data(msg, tmp, len);
+	g_free(tmp);
 
 	msn_switchboard_send_msg(swboard, msg, TRUE);
 	msn_message_destroy(msg);
@@ -2508,6 +2534,9 @@
 	msn_switchboard_init();
 	msn_sync_init();
 
+	// yaz
+	msn_ipc_init(plugin);
+
 	return TRUE;
 }
 
@@ -2517,6 +2546,9 @@
 	msn_switchboard_end();
 	msn_sync_end();
 
+	// yaz
+	msn_ipc_end(plugin);
+
 	return TRUE;
 }
 
--- a/libpurple/protocols/msnp9/msg.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/msnp9/msg.c	Sun Jul 26 22:18:59 2009 +0900
@@ -525,9 +525,7 @@
 
 	if (data != NULL && len > 0)
 	{
-		msg->body = g_malloc0(len + 1);
-		memcpy(msg->body, data, len);
-		msg->body_len = len;
+		msg->body = botch_utf((gchar *)data, len, &msg->body_len); /* yaz */
 	}
 	else
 	{
--- a/libpurple/protocols/msnp9/msn.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/msnp9/msn.c	Sun Jul 26 22:18:59 2009 +0900
@@ -174,13 +174,18 @@
 	MsnSession *session;
 	PurpleAccount *account;
 	const char *alias;
+	gchar *tmp;
+	gsize dummy;
 
 	session = gc->proto_data;
 	cmdproc = session->notification->cmdproc;
 	account = purple_connection_get_account(gc);
 
-	if(entry && strlen(entry))
-		alias = purple_url_encode(entry);
+	if(entry && strlen(entry)) {
+		tmp = botch_utf(entry, strlen(entry), &dummy);
+		alias = purple_url_encode(tmp);
+		g_free(tmp);
+	}
 	else
 		alias = "";
 
--- a/libpurple/protocols/msnp9/switchboard.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/msnp9/switchboard.c	Sun Jul 26 22:18:59 2009 +0900
@@ -837,7 +837,7 @@
 	char *body_str;
 	char *body_enc;
 	char *body_final;
-	size_t body_len;
+	size_t body_len, new_len;
 	const char *passport;
 	const char *value;
 
@@ -845,7 +845,7 @@
 	swboard = cmdproc->data;
 
 	body = msn_message_get_bin_data(msg, &body_len);
-	body_str = g_strndup(body, body_len);
+	body_str = sanitize_utf(body, body_len, &new_len);
 	body_enc = g_markup_escape_text(body_str, -1);
 	g_free(body_str);
 
--- a/libpurple/protocols/oscar/family_icbm.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/oscar/family_icbm.c	Sun Jul 26 22:18:59 2009 +0900
@@ -52,8 +52,8 @@
 #endif
 
 #include "util.h"
-
-
+/* yaz */
+#include "debug.h"
 /**
  * Add a standard ICBM header to the given bstream with the given
  * information.
@@ -465,6 +465,9 @@
 	guchar cookie[8];
 	GSList *outer_tlvlist = NULL, *inner_tlvlist = NULL;
 	ByteStream hdrbs;
+	// yaz
+	char *ucs = NULL;
+	gsize bytes;
 
 	if (!od || !(conn = flap_connection_findbygroup(od, SNAC_FAMILY_ICBM)))
 		return -EINVAL;
@@ -503,15 +506,51 @@
 	 * raw data, followed by a series of TLVs.
 	 *
 	 */
+#if 0
 	byte_stream_new(&hdrbs, 2+8+16+6+4+4+strlen(msg)+4+2+1+strlen(roomname)+2);
 
 	byte_stream_put16(&hdrbs, 0x0000); /* Unknown! */
 	byte_stream_putraw(&hdrbs, cookie, sizeof(cookie)); /* I think... */
 	byte_stream_putcaps(&hdrbs, OSCAR_CAPABILITY_CHAT);
-
+#endif
+	//yaz
+	// convert msg to ascii first. if it succeed, send as plain ascii.
+	// if it fails, convert msg into UTF-16BE, and send it. 
+	ucs = g_convert(msg, strlen(msg), "ASCII", "UTF-8", NULL, &bytes, NULL);
+	if(ucs){
+		byte_stream_new(&hdrbs, 2+8+16+6+4+4+strlen(msg)+4+2+1+strlen(roomname)+2);
+
+		byte_stream_put16(&hdrbs, 0x0000); /* Unknown! */
+		byte_stream_putraw(&hdrbs, cookie, sizeof(cookie)); /* I think... */
+		byte_stream_putcaps(&hdrbs, OSCAR_CAPABILITY_CHAT);
+
+		aim_tlvlist_add_16(&inner_tlvlist, 0x000a, 0x0001);
+		aim_tlvlist_add_noval(&inner_tlvlist, 0x000f);
+		aim_tlvlist_add_raw(&inner_tlvlist, 0x000c, strlen(msg), (guint8 *)msg);
+		free(ucs);
+	} else {
+		byte_stream_new(&hdrbs, 2+8+16+6+4+4+strlen(msg)+4+2+1+strlen(roomname)+2+4+11);
+
+		byte_stream_put16(&hdrbs, 0x0000); /* Unknown! */
+		byte_stream_putraw(&hdrbs, cookie, sizeof(cookie)); /* I think... */
+		byte_stream_putcaps(&hdrbs, OSCAR_CAPABILITY_CHAT);
+
+		aim_tlvlist_add_16(&inner_tlvlist, 0x000a, 0x0001);
+		aim_tlvlist_add_raw(&inner_tlvlist, 0x000d, 11, (guint8 *)"unicode-2-0");
+		aim_tlvlist_add_noval(&inner_tlvlist, 0x000f);
+		//yaz
+		ucs = g_convert(msg, strlen(msg), "UTF-16BE", "UTF-8", NULL, &bytes, NULL);
+		if(ucs){
+			botch_ucs(ucs, bytes);
+			aim_tlvlist_add_raw(&inner_tlvlist, 0x000c, bytes, (guint8 *)ucs);
+			free(ucs);
+		}
+	}
+#if 0
 	aim_tlvlist_add_16(&inner_tlvlist, 0x000a, 0x0001);
 	aim_tlvlist_add_noval(&inner_tlvlist, 0x000f);
 	aim_tlvlist_add_str(&inner_tlvlist, 0x000c, msg);
+#endif
 	aim_tlvlist_add_chatroom(&inner_tlvlist, 0x2711, exchange, roomname, instance);
 	aim_tlvlist_write(&hdrbs, &inner_tlvlist);
 
--- a/libpurple/protocols/oscar/odc.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/oscar/odc.c	Sun Jul 26 22:18:59 2009 +0900
@@ -101,18 +101,22 @@
 	byte_stream_new(&bs, length + frame->payload.len);
 	byte_stream_putraw(&bs, conn->magic, 4);
 	byte_stream_put16(&bs, length);
+
 	byte_stream_put16(&bs, frame->type);
 	byte_stream_put16(&bs, frame->subtype);
 	byte_stream_put16(&bs, 0x0000);
+
 	byte_stream_putraw(&bs, frame->cookie, 8);
 	byte_stream_put16(&bs, 0x0000);
 	byte_stream_put16(&bs, 0x0000);
 	byte_stream_put16(&bs, 0x0000);
 	byte_stream_put16(&bs, 0x0000);
+
 	byte_stream_put32(&bs, frame->payload.len);
-	byte_stream_put16(&bs, 0x0000);
 	byte_stream_put16(&bs, frame->encoding);
 	byte_stream_put16(&bs, 0x0000);
+	byte_stream_put16(&bs, 0x0000);
+
 	byte_stream_put16(&bs, frame->flags);
 	byte_stream_put16(&bs, 0x0000);
 	byte_stream_put16(&bs, 0x0000);
@@ -496,11 +500,14 @@
 	frame->type = byte_stream_get16(bs);
 	frame->subtype = byte_stream_get16(bs);
 	byte_stream_advance(bs, 2);
+
 	byte_stream_getrawbuf(bs, frame->cookie, 8);
 	byte_stream_advance(bs, 8);
+
 	frame->payload.len = byte_stream_get32(bs);
 	frame->encoding = byte_stream_get16(bs);
 	byte_stream_advance(bs, 4);
+
 	frame->flags = byte_stream_get16(bs);
 	byte_stream_advance(bs, 4);
 	byte_stream_getrawbuf(bs, frame->bn, 32);
--- a/libpurple/protocols/oscar/oft.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/oscar/oft.c	Sun Jul 26 22:18:59 2009 +0900
@@ -642,6 +642,8 @@
 {
 	PeerConnection *conn;
 	size_t size;
+	gchar *f1 = NULL, *f2 = NULL;
+	gsize dummy;
 
 	conn = xfer->data;
 	conn->flags |= PEER_CONNECTION_FLAG_APPROVED;
@@ -679,7 +681,16 @@
 	strncpy((gchar *)conn->xferdata.idstring, "Cool FileXfer", 31);
 	conn->xferdata.modtime = 0;
 	conn->xferdata.cretime = 0;
-	xfer->filename = g_path_get_basename(xfer->local_filename);
+
+	/* yaz */
+	f1 = g_filename_display_basename(xfer->local_filename);
+	f2 = botch_utf(f1, strlen(f1), &dummy);
+	if(f2){
+		purple_xfer_set_filename(xfer, (char *)f2);
+	}
+	g_free(f1); f1 = NULL;
+	g_free(f2); f2 = NULL;
+
 	conn->xferdata.name_length = MAX(64, strlen(xfer->filename) + 1);
 	conn->xferdata.name = (guchar *)g_strndup(xfer->filename, conn->xferdata.name_length - 1);
 
--- a/libpurple/protocols/oscar/oscar.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/oscar/oscar.c	Sun Jul 26 22:18:59 2009 +0900
@@ -308,7 +308,25 @@
 	gchar *utf8 = NULL;
 
 	if ((encoding == NULL) || encoding[0] == '\0') {
-		purple_debug_info("oscar", "Empty encoding, assuming UTF-8\n");
+		purple_debug_info("yaz oscar", "Empty encoding, validate as UTF-8\n");
+		if(g_utf8_validate(text, textlen, NULL)){
+			gsize newlen;
+			utf8 = sanitize_utf(text, textlen, &newlen);
+			goto done;
+		}
+		// not UTF-8
+		purple_debug_info("yaz oscar", "Empty encoding, assuming UTF-16BE\n");
+		sanitize_ucs((gchar *)text, textlen);
+		utf8 = g_convert(text, textlen, "UTF-8", "UTF-16BE", NULL, NULL, NULL);
+		if(utf8){
+			if(!g_utf8_validate(utf8, strlen(utf8), NULL)){
+				purple_debug_info("yaz oscar", "Invalid conversion\n");
+				g_free(utf8);
+				utf8 = NULL;
+			}
+		} else {
+			purple_debug_info("yaz oscar", "Conversion failed\n");
+		}
 	} else if (!g_ascii_strcasecmp(encoding, "iso-8859-1")) {
 		utf8 = g_convert(text, textlen, "UTF-8", "iso-8859-1", NULL, NULL, NULL);
 	} else if (!g_ascii_strcasecmp(encoding, "ISO-8859-1-Windows-3.1-Latin-1") ||
@@ -323,6 +341,7 @@
 		 * and do something (un)reasonable with that, and not
 		 * mess up too much else. */
 		const gchar *charset = purple_account_get_string(account, "encoding", NULL);
+		sanitize_ucs((gchar *)text, textlen);
 		if (charset) {
 			gsize len;
 			utf8 = g_convert(text, textlen, charset, "UTF-16BE", &len, NULL, NULL);
@@ -354,7 +373,7 @@
 		else
 			utf8 = g_strndup(text, textlen);
 	}
-
+done:
 	return utf8;
 }
 
@@ -379,7 +398,7 @@
 static gchar *
 purple_plugin_oscar_convert_to_utf8(const gchar *data, gsize datalen, const char *charsetstr, gboolean fallback)
 {
-	gchar *ret = NULL;
+	gchar *ret = NULL, *ret2 = NULL;
 	GError *err = NULL;
 
 	if ((charsetstr == NULL) || (*charsetstr == '\0'))
@@ -402,7 +421,9 @@
 			purple_debug_warning("oscar", "String is not valid UTF-8.\n");
 	}
 
-	return ret;
+	ret2 = sanitize_utf(ret, -1, NULL);
+	g_free(ret);
+	return ret2;
 }
 
 /**
@@ -438,11 +459,11 @@
 	} else if (charset == AIM_CHARSET_ASCII) {
 		/* Should just be "ASCII" */
 		charsetstr1 = "ASCII";
-		charsetstr2 = purple_account_get_string(account, "encoding", OSCAR_DEFAULT_CUSTOM_ENCODING);
-	} else if (charset == 0x000d) {
+		charsetstr2 = "UTF-8";
+	} else if (charset == AIM_CHARSET_QUIRKUTF8) {
 		/* Mobile AIM client on a Nokia 3100 and an LG VX6000 */
-		charsetstr1 = "ISO-8859-1";
-		charsetstr2 = purple_account_get_string(account, "encoding", OSCAR_DEFAULT_CUSTOM_ENCODING);
+		charsetstr1 = "UTF-8";  //iChat use 0x000d when it sends UTF-8. --yaz
+		charsetstr2 = "ISO-8859-1";
 	} else {
 		/* Unknown, hope for valid UTF-8... */
 		charsetstr1 = "UTF-8";
@@ -511,6 +532,7 @@
 		if ((b != NULL) && (PURPLE_BUDDY_IS_ONLINE(b)))
 		{
 			*msg = g_convert(from, -1, "UTF-16BE", "UTF-8", NULL, &msglen, &err);
+			botch_ucs(*msg, msglen);
 			if (*msg != NULL)
 			{
 				*charset = AIM_CHARSET_UNICODE;
@@ -538,6 +560,10 @@
 	 * XXX - We need a way to only attempt to convert if we KNOW "from"
 	 * can be converted to "charsetstr"
 	 */
+#ifndef _WIN32
+	/* nosuke reported that this portion caused unexpected
+	 * conversion from utf-8 fullwidth tilde/numbers/alphabets to
+	 * halfwidth ones on windows environment. --yaz */
 	*msg = g_convert(from, -1, charsetstr, "UTF-8", NULL, &msglen, &err);
 	if (*msg != NULL) {
 		*charset = AIM_CHARSET_CUSTOM;
@@ -550,11 +576,13 @@
 					  charsetstr, err->message);
 	g_error_free(err);
 	err = NULL;
+#endif
 
 	/*
 	 * Nothing else worked, so send as UTF-16BE.
 	 */
-	*msg = g_convert(from, -1, "UTF-16BE", "UTF-8", NULL, &msglen, &err);
+	*msg = g_convert(from, strlen(from), "UTF-16BE", "UTF-8", NULL, &msglen, &err);
+	botch_ucs(*msg, msglen);
 	if (*msg != NULL) {
 		*charset = AIM_CHARSET_UNICODE;
 		*charsubset = 0x0000;
@@ -2355,6 +2383,8 @@
 		tmp = purple_plugin_oscar_decode_im_part(account, userinfo->bn, curpart->charset,
 				curpart->charsubset, curpart->data, curpart->datalen);
 		if (tmp != NULL) {
+			purple_str_strip_char(tmp, 0x0d); // yaz: strip CR
+//			purple_debug_info("yaz oscar", "tmp=%s",tmp);
 			g_string_append(message, tmp);
 			g_free(tmp);
 		}
@@ -2457,6 +2487,7 @@
 		char *encoding, *utf8name, *tmp;
 		GHashTable *components;
 
+//		purple_debug_info("yaz oscar", "chat request %s\n", args->msg);
 		if (!args->info.chat.roominfo.name || !args->info.chat.roominfo.exchange) {
 			g_free(message);
 			return 1;
@@ -2479,6 +2510,8 @@
 		g_hash_table_replace(components, g_strdup("room"), utf8name);
 		g_hash_table_replace(components, g_strdup("exchange"),
 				g_strdup_printf("%d", args->info.chat.roominfo.exchange));
+		purple_debug_info("yaz oscar", "about to call serv_got_chat_invite\n");
+//		purple_debug_info("yaz oscar", "name=%s message=%s\n", name ? name : args->info.chat.roominfo.name, message);
 		serv_got_chat_invite(gc,
 				     utf8name,
 				     userinfo->bn,
@@ -2703,7 +2736,7 @@
 	 * for this suck-ass part of the protocol by splitting the string into at
 	 * most 1 baby string.
 	 */
-	msg1 = g_strsplit(args->msg, "\376", (args->type == 0x01 ? 1 : 0));
+	msg1 = g_strsplit(args->msg, "\376", (args->type == 0x01 ? 1 : 0)); // \376 is 0xfe
 	for (numtoks=0; msg1[numtoks]; numtoks++);
 	msg2 = (gchar **)g_malloc((numtoks+1)*sizeof(gchar *));
 	for (i=0; msg1[i]; i++) {
@@ -4392,9 +4425,7 @@
 {
 	GString *msg;
 	GString *data;
-	gchar *tmp;
-	int tmplen;
-	guint16 charset, charsubset;
+	guint16 charset;
 	GData *attribs;
 	const char *start, *end, *last;
 	int oscar_id = 0;
@@ -4454,12 +4485,9 @@
 
 	g_string_append(msg, "</BODY></HTML>");
 
-	/* Convert the message to a good encoding */
-	purple_plugin_oscar_convert_to_best_encoding(conn->od->gc,
-			conn->bn, msg->str, &tmp, &tmplen, &charset, &charsubset);
-	g_string_free(msg, TRUE);
-	msg = g_string_new_len(tmp, tmplen);
-	g_free(tmp);
+	/* iChat and AIM6 use 0x000d to send UTF8.
+       moreover, AIM6 persists only to UTF8! --yaz */
+	charset = AIM_CHARSET_QUIRKUTF8;
 
 	/* Append any binary data that we may have */
 	if (oscar_id) {
@@ -4702,7 +4730,8 @@
 
 	charset = oscar_charset_check(str);
 	if (charset == AIM_CHARSET_UNICODE) {
-		encoded = g_convert(str, -1, "UTF-16BE", "UTF-8", NULL, ret_len, NULL);
+		encoded = g_convert(str, strlen(str), "UTF-16BE", "UTF-8", NULL, ret_len, NULL);
+		botch_ucs(encoded, *ret_len);
 		*encoding = "unicode-2-0";
 	} else if (charset == AIM_CHARSET_CUSTOM) {
 		encoded = g_convert(str, -1, "ISO-8859-1", "UTF-8", NULL, ret_len, NULL);
@@ -5846,7 +5875,7 @@
 		charsetstr = "unicode-2-0";
 	else if (charset == AIM_CHARSET_CUSTOM)
 		charsetstr = "iso-8859-1";
-	aim_chat_send_im(od, c->conn, 0, buf2, len, charsetstr, "en");
+	aim_chat_send_im(od, c->conn, 0, buf2, len, charsetstr, "JA");
 	g_free(buf2);
 	g_free(buf);
 
--- a/libpurple/protocols/oscar/oscar.h	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/oscar/oscar.h	Sun Jul 26 22:18:59 2009 +0900
@@ -812,6 +812,7 @@
 #define AIM_CHARSET_ASCII		0x0000
 #define AIM_CHARSET_UNICODE	0x0002 /* UTF-16BE */
 #define AIM_CHARSET_CUSTOM	0x0003
+#define AIM_CHARSET_QUIRKUTF8	0x000d /* iChat and AIM6 use this in the meaning of UTF-8 in ODC. --yaz */
 
 /*
  * Multipart message structures.
--- a/libpurple/protocols/yahoo/libyahoo.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/yahoo/libyahoo.c	Sun Jul 26 22:18:59 2009 +0900
@@ -32,6 +32,7 @@
 #include "yahoo_doodle.h"
 #include "yahoo_filexfer.h"
 #include "yahoo_picture.h"
+#include "ycht.h"
 
 static PurplePlugin *my_protocol = NULL;
 
@@ -327,8 +328,6 @@
 	option = purple_account_option_string_new(_("Encoding"), "local_charset", "UTF-8");
 	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
 
-
-#if 0
 	option = purple_account_option_string_new(_("Chat room list URL"), "room_list", YAHOO_ROOMLIST_URL);
 	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
 
@@ -337,7 +336,6 @@
 
 	option = purple_account_option_int_new(_("Yahoo Chat port"), "ycht-port", YAHOO_YCHT_PORT);
 	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
-#endif
 
 	my_protocol = plugin;
 	yahoo_register_commands();
--- a/libpurple/protocols/yahoo/libyahoojp.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/yahoo/libyahoojp.c	Sun Jul 26 22:18:59 2009 +0900
@@ -31,6 +31,7 @@
 #include "yahoo_doodle.h"
 #include "yahoo_filexfer.h"
 #include "yahoo_picture.h"
+#include "ycht.h"
 
 static void yahoojp_register_commands(void)
 {
@@ -223,17 +224,14 @@
 	option = purple_account_option_string_new(_("Encoding"), "local_charset", "UTF-8");
 	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
 
-
-#if 0
-	option = purple_account_option_string_new(_("Chat room list URL"), "room_list", YAHOO_ROOMLIST_URL);
+	option = purple_account_option_string_new(_("Chat room list URL"), "room_list", YAHOOJP_ROOMLIST_URL);
 	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
 
-	option = purple_account_option_string_new(_("Yahoo Chat server"), "ycht-server", YAHOO_YCHT_HOST);
+	option = purple_account_option_string_new(_("Yahoo Chat server"), "ycht-server", YAHOOJP_YCHT_HOST);
 	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
 
-	option = purple_account_option_int_new(_("Yahoo Chat port"), "ycht-port", YAHOO_YCHT_PORT);
+	option = purple_account_option_int_new(_("Yahoo Chat port"), "ycht-port", YAHOOJP_YCHT_PORT);
 	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
-#endif
 
 	yahoojp_register_commands();
 	yahoo_init_colorht();
--- a/libpurple/protocols/yahoo/libymsg.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/yahoo/libymsg.c	Sun Jul 26 22:18:59 2009 +0900
@@ -1470,8 +1470,9 @@
 
 #define OUT_CHARSET "utf-8"
 
-static char *yahoo_decode(const char *text)
+static char *yahoo_decode(PurpleConnection *gc, const char *text)
 {
+	struct yahoo_data *yd = gc->proto_data;
 	char *converted = NULL;
 	char *n, *new;
 	const char *end, *p;
@@ -1512,11 +1513,16 @@
 
 	*n = '\0';
 
-	if (strstr(text, "\033$B"))
-		converted = g_convert(new, n - new, OUT_CHARSET, "iso-2022-jp", NULL, NULL, NULL);
-	if (!converted)
-		converted = g_convert(new, n - new, OUT_CHARSET, "iso-8859-1", NULL, NULL, NULL);
-	g_free(new);
+	if (yd->jp) {
+		converted = g_convert(new, n - new, OUT_CHARSET, "UTF-8", NULL, NULL, NULL);
+	}
+	if (!yd->jp || !converted) {
+		if (strstr(text, "\033$B"))
+			converted = g_convert(new, n - new, OUT_CHARSET, "iso-2022-jp", NULL, NULL, NULL);
+		if (!converted)
+			converted = g_convert(new, n - new, OUT_CHARSET, "iso-8859-1", NULL, NULL, NULL);
+		g_free(new);
+	}
 
 	return converted;
 }
@@ -1549,8 +1555,8 @@
 	}
 
 	if (who && subj && email && *email) {
-		char *dec_who = yahoo_decode(who);
-		char *dec_subj = yahoo_decode(subj);
+		char *dec_who = yahoo_decode(gc, who);
+		char *dec_subj = yahoo_decode(gc, subj);
 		char *from = g_strdup_printf("%s (%s)", dec_who, email);
 
 		purple_notify_email(gc, dec_subj, from, purple_account_get_username(account),
@@ -4510,6 +4516,7 @@
 	struct yahoo_packet *pkt = NULL;
 	char *msg = NULL, *msg2 = NULL;
 	PurpleStatus *status = NULL;
+	gboolean utf8 = TRUE;
 
 	if (idle && yd->current_status != YAHOO_STATUS_CUSTOM)
 		yd->current_status = YAHOO_STATUS_IDLE;
@@ -4527,7 +4534,6 @@
 			status = purple_presence_get_active_status(purple_account_get_presence(purple_connection_get_account(gc)));
 		tmp = purple_status_get_attr_string(status, "message");
 		if (tmp != NULL) {
-			gboolean utf8 = TRUE;
 			msg = yahoo_string_encode(gc, tmp, &utf8);
 			msg2 = purple_markup_strip_html(msg);
 			yahoo_packet_hash_str(pkt, 97, utf8 ? "1" : 0);
@@ -4535,6 +4541,7 @@
 		} else {
 			/* get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for
 			 * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message */
+			yahoo_packet_hash_str(pkt, 97, utf8 ? "1" : 0);
 			yahoo_packet_hash_str(pkt, 19, _("Away"));
 		}
 	} else {
--- a/libpurple/protocols/yahoo/util.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/yahoo/util.c	Sun Jul 26 22:18:59 2009 +0900
@@ -29,6 +29,7 @@
 #include "prpl.h"
 
 #include "libymsg.h"
+#include "util.h"
 
 #include <string.h>
 
@@ -119,14 +120,13 @@
 char *yahoo_string_encode(PurpleConnection *gc, const char *str, gboolean *utf8)
 {
 	struct yahoo_data *yd = gc->proto_data;
-	char *ret;
+	char *ret = NULL;
+	gsize newlen;
 	const char *to_codeset;
 
-	if (yd->jp)
-		return g_strdup(str);
-
-	if (utf8 && *utf8) /* FIXME: maybe don't use utf8 if it'll fit in latin1 */
-		return g_strdup(str);
+	if (utf8 && *utf8) {
+		return botch_utf((gchar *)str, strlen((gchar *)str), &newlen);
+	}
 
 	to_codeset = purple_account_get_string(purple_connection_get_account(gc), "local_charset",  "ISO-8859-1");
 	ret = g_convert_with_fallback(str, -1, to_codeset, "UTF-8", "?", NULL, NULL, NULL);
@@ -148,23 +148,29 @@
 char *yahoo_string_decode(PurpleConnection *gc, const char *str, gboolean utf8)
 {
 	struct yahoo_data *yd = gc->proto_data;
-	char *ret;
+	char *ret, *tmp;
 	const char *from_codeset;
+	gsize newlen;
 
 	if (utf8) {
-		if (g_utf8_validate(str, -1, NULL))
-			return g_strdup(str);
+		ret = sanitize_utf((gchar *)str, strlen((gchar *)str), &newlen);
+		if (g_utf8_validate(ret, -1, NULL))
+			return ret;
 	}
 
-	if (yd->jp)
+	if (yd->jp && !utf8)
 		from_codeset = "SHIFT_JIS";
 	else
 		from_codeset = purple_account_get_string(purple_connection_get_account(gc), "local_charset",  "ISO-8859-1");
 
 	ret = g_convert_with_fallback(str, -1, "UTF-8", from_codeset, NULL, NULL, NULL, NULL);
 
-	if (ret)
+	if (ret) {
+		tmp = ret;
+		ret = sanitize_utf((gchar *)tmp, strlen((gchar *)tmp), &newlen);
+		g_free(tmp);
 		return ret;
+	}
 	else
 		return g_strdup("");
 }
--- a/libpurple/protocols/yahoo/yahoo_filexfer.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/yahoo/yahoo_filexfer.c	Sun Jul 26 22:18:59 2009 +0900
@@ -226,7 +226,7 @@
 	PurpleXfer *xfer;
 	struct yahoo_xfer_data *xd;
 	struct yahoo_packet *pkt;
-	gchar *size, *filename, *encoded_filename, *header;
+	gchar *size, *filename, *encoded_filename, *header, *tmp = NULL;
 	guchar *pkt_buf;
 	const char *host;
 	int port;
@@ -234,6 +234,7 @@
 	PurpleConnection *gc;
 	PurpleAccount *account;
 	struct yahoo_data *yd;
+	gsize dummy;
 
 	purple_debug_info("yahoo", "in yahoo_sendfile_connected\n");
 
@@ -260,8 +261,12 @@
 		YAHOO_STATUS_AVAILABLE, yd->session_id);
 
 	size = g_strdup_printf("%" G_GSIZE_FORMAT, purple_xfer_get_size(xfer));
-	filename = g_path_get_basename(purple_xfer_get_local_filename(xfer));
-	encoded_filename = yahoo_string_encode(gc, filename, NULL);
+
+	/* yaz */
+	tmp = g_filename_display_basename(purple_xfer_get_local_filename(xfer));
+	filename = botch_utf(tmp, strlen(tmp), &dummy);
+	g_free(tmp);
+	encoded_filename = yahoo_string_encode(gc, filename, NULL); // this takes utf8 as input. --yaz
 
 	yahoo_packet_hash(pkt, "sssss", 0, purple_connection_get_display_name(gc),
 	  5, xfer->who, 14, "", 27, encoded_filename, 28, size);
@@ -981,8 +986,8 @@
 	struct yahoo_xfer_data *xd;
 	struct sockaddr_in *addr;
 	struct yahoo_packet *pkt;
-	long actaddr;
-	long a,b,c,d;
+	unsigned long actaddr;
+	unsigned long a,b,c,d;
 	PurpleConnection *gc;
 	PurpleAccount *account;
 	struct yahoo_data *yd;
--- a/libpurple/protocols/yahoo/yahoo_packet.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/yahoo/yahoo_packet.c	Sun Jul 26 22:18:59 2009 +0900
@@ -42,6 +42,7 @@
 {
 	struct yahoo_pair *pair;
 
+	g_return_if_fail(pkt != NULL);
 	g_return_if_fail(value != NULL);
 
 	pair = g_new0(struct yahoo_pair, 1);
@@ -54,6 +55,8 @@
 {
 	struct yahoo_pair *pair;
 
+	g_return_if_fail(pkt != NULL);
+
 	pair = g_new0(struct yahoo_pair, 1);
 	pair->key = key;
 	pair->value = g_strdup_printf("%d", value);
@@ -386,6 +389,9 @@
 {
 	int ret;
 
+	g_return_val_if_fail(pkt != NULL, 0);
+	g_return_val_if_fail(yd != NULL, 0);
+
 	ret = yahoo_packet_send(pkt, yd);
 	yahoo_packet_free(pkt);
 	return ret;
--- a/libpurple/protocols/yahoo/yahoo_profile.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/yahoo/yahoo_profile.c	Sun Jul 26 22:18:59 2009 +0900
@@ -22,6 +22,7 @@
  */
 
 #define PHOTO_SUPPORT 1
+//original is 1 --yaz
 
 #include "internal.h"
 #include "debug.h"
@@ -670,6 +671,7 @@
 	},
 };
 
+#if 0
 static char *yahoo_info_date_reformat(const char *field, size_t len)
 {
 	char *tmp = g_strndup(field, len);
@@ -678,6 +680,7 @@
 	g_free(tmp);
 	return g_strdup(purple_date_format_short(localtime(&t)));
 }
+#endif
 
 static char *yahoo_remove_nonbreaking_spaces(char *str)
 {
@@ -763,6 +766,7 @@
 
 #endif /* PHOTO_SUPPORT */
 
+#define PROF_LEN (1024 * 10)
 static void yahoo_got_info(PurpleUtilFetchUrlData *url_data, gpointer user_data,
 		const gchar *url_text, size_t len, const gchar *error_message)
 {
@@ -1011,6 +1015,9 @@
 			g_free(stripped);
 			stripped = purple_utf8_ncr_decode(p);
 			stripped_len = strlen(stripped);
+
+			purple_debug_misc("yahoo", "after utf8 conversion: stripped@1 = (%s)\n",
+                              stripped); //payload --yaz
 			g_free(p);
 		}
 	}
@@ -1022,7 +1029,7 @@
 				strings->charset, NULL, NULL, NULL);
 		yahoo_remove_nonbreaking_spaces(last_updated_utf8_string);
 
-		purple_debug_misc("yahoo", "after utf8 conversion: stripped = (%s)\n", stripped);
+		purple_debug_misc("yahoo", "after utf8 conversion: stripped = (%s)\n", stripped); //payload --yaz
 	}
 
 	if (profile_state == PROFILE_STATE_DEFAULT) {
@@ -1055,16 +1062,17 @@
 		}
 	}
 #endif /* PHOTO_SUPPORT */
+	purple_debug_info("yahoo", "email = %s\n", strings->my_email_string);
 
 	/* extract their Email address and put it in */
 	found |= purple_markup_extract_info_field(stripped, stripped_len, user_info,
 			strings->my_email_string, (yd->jp ? 4 : 1), " ", 0,
 			strings->private_string, _("Email"), 0, NULL, NULL);
-
+#if 0
 	/* extract the Nickname if it exists */
 	found |= purple_markup_extract_info_field(stripped, stripped_len, user_info,
 			"Nickname:", 1, "\n", '\n',
-			NULL, _("Nickname"), 0, NULL, NULL);
+			 NULL, _("Nickname"), 0, NULL, NULL);
 
 	/* extract their RealName and put it in */
 	found |= purple_markup_extract_info_field(stripped, stripped_len, user_info,
@@ -1095,7 +1103,7 @@
 	found |= purple_markup_extract_info_field(stripped, stripped_len, user_info,
 			strings->occupation_string, 2, "\n", '\n',
 			NULL, _("Occupation"), 0, NULL, NULL);
-
+#endif
 	/* Hobbies, Latest News, and Favorite Quote are a bit different, since
 	 * the values can contain embedded newlines... but any or all of them
 	 * can also not appear.  The way we delimit them is to successively
@@ -1104,7 +1112,7 @@
 	 * next thing to follow this bunch.  (For Yahoo Japan, we check for
 	 * the "Description" ("Self PR") heading instead of "Links".)
 	 */
-
+#if 0
 	if (!purple_markup_extract_info_field(stripped, stripped_len, user_info,
 			strings->hobbies_string, (yd->jp ? 3 : 1), strings->latest_news_string,
 			'\n', "\n", _("Hobbies"), 0, NULL, NULL))
@@ -1190,6 +1198,7 @@
 				last_updated_utf8_string, (yd->jp ? 2 : 1), (yd->jp ? "\n" : " "), (yd->jp ? 0 : '\n'), NULL,
 				_("Last Update"), 0, NULL, (yd->jp ? NULL : yahoo_info_date_reformat));
 	}
+#endif
 	} /* if (profile_state == PROFILE_STATE_DEFAULT) */
 
 	if(!found)
--- a/libpurple/protocols/yahoo/yahoochat.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/yahoo/yahoochat.c	Sun Jul 26 22:18:59 2009 +0900
@@ -951,7 +951,7 @@
 	g_free(msg1);
 	msg1 = yahoo_string_encode(gc, msg2, &utf8);
 	g_free(msg2);
-	room2 = yahoo_string_encode(gc, room, NULL);
+	room2 = yahoo_string_encode(gc, room, &utf8);
 
 	pkt = yahoo_packet_new(YAHOO_SERVICE_COMMENT, YAHOO_STATUS_AVAILABLE, yd->session_id);
 
@@ -1590,6 +1590,7 @@
 	char *url;
 	char *id;
 	const char *rll;
+	gboolean jp = purple_account_get_bool(list->account, "yahoojp", FALSE);
 
 	if (category->type != PURPLE_ROOMLIST_ROOMTYPE_CATEGORY)
 		return;
@@ -1599,17 +1600,12 @@
 		return;
 	}
 
-	rll = purple_account_get_string(list->account, "room_list_locale",
-								  YAHOO_ROOMLIST_LOCALE);
+	rll = jp ? YAHOOJP_ROOMLIST_LOCALE : purple_account_get_string(list->account, "room_list_locale", YAHOO_ROOMLIST_LOCALE);
 
 	if (rll != NULL && *rll != '\0') {
-		url = g_strdup_printf("%s?chatroom_%s=0&intl=%s",
-	       purple_account_get_string(list->account,"room_list",
-	       YAHOO_ROOMLIST_URL), id, rll);
+		url = g_strdup_printf("%s?chatroom_%s=0&intl=%s", jp ? YAHOOJP_ROOMLIST_URL : purple_account_get_string(list->account,"room_list", YAHOO_ROOMLIST_URL), id, rll);
 	} else {
-		url = g_strdup_printf("%s?chatroom_%s=0",
-	       purple_account_get_string(list->account,"room_list",
-	       YAHOO_ROOMLIST_URL), id);
+		url = g_strdup_printf("%s?chatroom_%s=0", jp ? YAHOOJP_ROOMLIST_URL : purple_account_get_string(list->account,"room_list", YAHOO_ROOMLIST_URL), id);
 	}
 
 	yrl = g_new0(struct yahoo_roomlist, 1);
--- a/libpurple/protocols/yahoo/ycht.h	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/protocols/yahoo/ycht.h	Sun Jul 26 22:18:59 2009 +0900
@@ -32,6 +32,10 @@
 #define YAHOO_YCHT_HOST "jcs3.chat.dcn.yahoo.com"
 #define YAHOO_YCHT_PORT 8002
 
+/* fix these --yaz */
+#define YAHOOJP_YCHT_HOST "chat.yahoo.co.jp"
+#define YAHOOJP_YCHT_PORT 8000
+
 #define YCHT_VERSION (0xae)
 #define YCHT_HEADER_LEN (0x10)
 
--- a/libpurple/server.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/server.c	Sun Jul 26 22:18:59 2009 +0900
@@ -241,6 +241,8 @@
 	GSList *buddies;
 	PurpleBuddy *b;
 	PurpleConversation *conv;
+	gsize dummy;
+	gchar *alias2 = NULL;
 
 	account = purple_connection_get_account(gc);
 	buddies = purple_find_buddies(account, who);
@@ -257,13 +259,16 @@
 		if (purple_strequal(server_alias, alias))
 			continue;
 
-		purple_blist_server_alias_buddy(b, alias);
+		if(alias)
+			alias2 = sanitize_utf(alias, strlen(alias), &dummy);
+
+		purple_blist_server_alias_buddy(b, alias2);
 
 		conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, purple_buddy_get_name(b), account);
-		if (conv != NULL && alias != NULL && purple_strequal(alias, who))
+		if (conv != NULL && alias2 != NULL && !purple_strequal(alias2, who))
 		{
 			char *escaped = g_markup_escape_text(who, -1);
-			char *escaped2 = g_markup_escape_text(alias, -1);
+			char *escaped2 = g_markup_escape_text(alias2, -1);
 			char *tmp = g_strdup_printf(_("%s is now known as %s.\n"),
 										escaped, escaped2);
 
@@ -275,6 +280,8 @@
 			g_free(escaped2);
 			g_free(escaped);
 		}
+		g_free(alias2);
+		alias2 = NULL;
 	}
 }
 
@@ -284,6 +291,8 @@
 	PurpleAccount *account = NULL;
 	GSList *buddies = NULL;
 	PurpleBuddy *b = NULL;
+	gsize dummy;
+	gchar *alias2 = NULL;
 
 	account = purple_connection_get_account(gc);
 	buddies = purple_find_buddies(account, who);
@@ -298,11 +307,13 @@
 		if (purple_strequal(balias, alias))
 			continue;
 
-		purple_blist_alias_buddy(b, alias);
+		alias2 = sanitize_utf(alias, strlen(alias), &dummy);
+		purple_blist_alias_buddy(b, alias2);
+		g_free(alias2);
+		alias2 = NULL;
 	}
 }
 
-
 PurpleAttentionType *purple_get_attention_type_from_code(PurpleAccount *account, guint type_code)
 {
 	PurplePlugin *prpl;
--- a/libpurple/util.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/util.c	Sun Jul 26 22:18:59 2009 +0900
@@ -1338,6 +1338,8 @@
 		return FALSE;
 
 	q = strstr(p, end_token);
+	if(q == NULL) //yaz
+		return FALSE;
 
 	/* Trim leading blanks */
 	while (*p != '\n' && g_ascii_isspace(*p)) {
@@ -1350,7 +1352,7 @@
 	}
 
 	/* Don't bother with null strings */
-	if (p == q)
+	if (p >= q)
 		return FALSE;
 
 	if (q != NULL && (!no_value_token ||
@@ -2129,6 +2131,20 @@
 }
 
 static gboolean
+is_zenkaku_space(const char *c)
+{
+    gboolean rv = FALSE;
+    const guchar *u = (guchar *)c;
+
+    if(!c || !strcmp(c, "") || strlen(c) < 3)
+        rv = FALSE;
+    else if(*u == 0xe3 && *(u+1) == 0x80 && *(u+2) == 0x80)
+        rv = TRUE;
+
+    return rv;
+}
+
+static gboolean
 badchar(char c)
 {
 	switch (c) {
@@ -2165,6 +2181,7 @@
 	gunichar g;
 	gboolean inside_html = FALSE;
 	int inside_paren = 0;
+	int inside_bracket = 0;
 	GString *ret;
 
 	if (text == NULL)
@@ -2181,6 +2198,12 @@
 			c++;
 		}
 
+		if(*c == '[' && !inside_html) {
+			inside_bracket++;
+			ret = g_string_append_c(ret, *c);
+			c++;
+		}
+
 		if(inside_html) {
 			if(*c == '>') {
 				inside_html = FALSE;
@@ -2208,7 +2231,7 @@
 					(!g_ascii_strncasecmp(c, "https://", 8)))) {
 			t = c;
 			while (1) {
-				if (badchar(*t) || badentity(t)) {
+				if (badchar(*t) || badentity(t) || is_zenkaku_space(t)) {
 
 					if ((!g_ascii_strncasecmp(c, "http://", 7) && (t - c == 7)) ||
 						(!g_ascii_strncasecmp(c, "https://", 8) && (t - c == 8))) {
@@ -2225,6 +2248,9 @@
 					if ((*(t - 1) == ')' && (inside_paren > 0))) {
 						t--;
 					}
+					if ((*(t - 1) == ']' && (inside_bracket > 0))) {
+						t--;
+					}
 
 					url_buf = g_strndup(c, t - c);
 					tmpurlbuf = purple_unescape_html(url_buf);
@@ -2242,7 +2268,7 @@
 			if (c[4] != '.') {
 				t = c;
 				while (1) {
-					if (badchar(*t) || badentity(t)) {
+					if (badchar(*t) || badentity(t) || is_zenkaku_space(t)) {
 						if (t - c == 4) {
 							break;
 						}
@@ -2257,6 +2283,9 @@
 						if ((*(t - 1) == ')' && (inside_paren > 0))) {
 							t--;
 						}
+						if ((*(t - 1) == ']' && (inside_bracket > 0))) {
+							t--;
+						}
 						url_buf = g_strndup(c, t - c);
 						tmpurlbuf = purple_unescape_html(url_buf);
 						g_string_append_printf(ret,
@@ -2273,7 +2302,7 @@
 		} else if (!g_ascii_strncasecmp(c, "ftp://", 6) || !g_ascii_strncasecmp(c, "sftp://", 7)) {
 			t = c;
 			while (1) {
-				if (badchar(*t) || badentity(t)) {
+				if (badchar(*t) || badentity(t) || is_zenkaku_space(t)) {
 
 					if ((!g_ascii_strncasecmp(c, "ftp://", 6) && (t - c == 6)) ||
 						(!g_ascii_strncasecmp(c, "sftp://", 7) && (t - c == 7))) {
@@ -2285,6 +2314,9 @@
 					if ((*(t - 1) == ')' && (inside_paren > 0))) {
 						t--;
 					}
+					if ((*(t - 1) == ']' && (inside_bracket > 0))) {
+						t--;
+					}
 					url_buf = g_strndup(c, t - c);
 					tmpurlbuf = purple_unescape_html(url_buf);
 					g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>",
@@ -2303,7 +2335,7 @@
 			if (c[4] != '.') {
 				t = c;
 				while (1) {
-					if (badchar(*t) || badentity(t)) {
+					if (badchar(*t) || badentity(t) || is_zenkaku_space(t)) {
 						if (t - c == 4) {
 							break;
 						}
@@ -2312,6 +2344,9 @@
 						if ((*(t - 1) == ')' && (inside_paren > 0))) {
 							t--;
 						}
+						if ((*(t - 1) == ']' && (inside_bracket > 0))) {
+							t--;
+						}
 						url_buf = g_strndup(c, t - c);
 						tmpurlbuf = purple_unescape_html(url_buf);
 						g_string_append_printf(ret,
@@ -2330,7 +2365,7 @@
 		} else if (!g_ascii_strncasecmp(c, "mailto:", 7)) {
 			t = c;
 			while (1) {
-				if (badchar(*t) || badentity(t)) {
+				if (badchar(*t) || badentity(t) || is_zenkaku_space(t)) {
 					char *d;
 					if (t - c == 7) {
 						break;
@@ -2364,7 +2399,7 @@
 				   (c == text || badchar(c[-1]) || badentity(c-1))) {
 			t = c;
 			while (1) {
-				if (badchar(*t) || badentity(t)) {
+				if (badchar(*t) || badentity(t) || is_zenkaku_space(t)) {
 
 					if (t - c == 5) {
 						break;
@@ -2380,6 +2415,9 @@
 					if ((*(t - 1) == ')' && (inside_paren > 0))) {
 						t--;
 					}
+					if ((*(t - 1) == ']' && (inside_bracket > 0))) {
+						t--;
+					}
 
 					url_buf = g_strndup(c, t - c);
 					tmpurlbuf = purple_unescape_html(url_buf);
@@ -2467,6 +2505,11 @@
 			ret = g_string_append_c(ret, *c);
 			c++;
 		}
+		if(*c == ']' && !inside_html) {
+			inside_bracket--;
+			ret = g_string_append_c(ret, *c);
+			c++;
+		}
 
 		if (*c == 0)
 			break;
@@ -5152,3 +5195,296 @@
 	}
 #endif
 }
+
+#ifdef _WIN32
+void botch_ucs(gchar *ucs_src, gsize len)
+{
+	/* no operation */
+}
+#else
+void botch_ucs(gchar *ucs_src, gsize len)
+{
+	gint i;
+	guchar *ucs = (guchar *)ucs_src;
+
+	g_return_if_fail(ucs_src != NULL);
+	g_return_if_fail(len > 0);
+
+ 	for(i=0;i<len;i+=2){
+ 		switch(*(ucs+i)){
+ 		case 0x00:
+ 			switch(*(ucs+i+1)){
+ 			case 0xa2:	// ¢
+ 				*(ucs+i) = 0xff;
+ 				*(ucs+i+1) = 0xe0;
+ 				break;
+ 			case 0xa3:	// £
+ 				*(ucs+i) = 0xff;
+				*(ucs+i+1) = 0xe1;
+ 				break;
+ 			case 0xac:	// ¬
+ 				*(ucs+i) = 0xff;
+ 				*(ucs+i+1) = 0xe2;
+ 				break;
+ 			}
+ 			break;
+ 		case 0x20:	// ‖
+ 			if(*(ucs+i+1) == 0x16){
+ 				*(ucs+i) = 0x22;
+				*(ucs+i+1) = 0x25;
+ 			}
+ 			break;
+ 		case 0x22:	// −
+ 			if(*(ucs+i+1) == 0x12){
+ 				*(ucs+i) = 0xff;
+ 				*(ucs+i+1) = 0x0d;
+ 			}
+ 			break;
+ 		case 0x30:	// 〜
+ 			if(*(ucs+i+1) == 0x1c){
+ 				*(ucs+i) = 0xff;
+ 				*(ucs+i+1) = 0x5e;
+ 			}
+ 			break;
+ 		}
+ 	}
+
+}
+#endif
+
+#ifdef _WIN32
+void sanitize_ucs(gchar *ucs, gsize len)
+{
+	/* no operation */
+}
+#else
+void sanitize_ucs(gchar *ucs_src, gsize len)
+{
+	gint i;
+	guchar *ucs = (guchar *)ucs_src;
+
+	g_return_if_fail(ucs_src != NULL);
+	g_return_if_fail(len > 0);
+
+	for(i=0;i<len;i+=2){
+		switch(*(ucs+i)){
+		case 0x22:
+			switch(*(ucs+i+1)){
+			case 0x25:	// ‖
+				*(ucs+i) = 0x20;
+				*(ucs+i+1) = 0x16;
+				break;
+			}
+			break;
+		case 0xff:
+			switch(*(ucs+i+1)){
+			case 0x0d:	// −
+				*(ucs+i) = 0x22;
+				*(ucs+i+1) = 0x12;
+				break;
+			case 0x5e:	// 〜
+				*(ucs+i) = 0x30;
+				*(ucs+i+1) = 0x1c;
+				break;
+			case 0xe0:	// ¢
+				*(ucs+i) = 0x00;
+				*(ucs+i+1) = 0xa2;
+				break;
+			case 0xe1:	// £
+				*(ucs+i) = 0x00;
+				*(ucs+i+1) = 0xa3;
+				break;
+			case 0xe2:	// ¬
+				*(ucs+i) = 0x00;
+				*(ucs+i+1) = 0xac;
+				break;
+			}
+			break;
+		}
+	}
+}
+#endif
+
+#ifdef _WIN32
+gchar *sanitize_utf(const gchar *msg, gsize len, gsize *newlen)
+{
+	g_return_val_if_fail(msg != NULL, NULL);
+	if(len == -1)
+		len = strlen(msg);
+	g_return_val_if_fail(len > 0, NULL);
+
+	if(newlen)
+		*newlen = len;
+
+	return g_strndup(msg, len);
+}
+#else
+gchar *sanitize_utf(const gchar *msg, gsize len, gsize *newlen)
+{
+	gint i;
+	size_t bytes;
+	guchar *utf;
+
+	g_return_val_if_fail(msg != NULL, NULL);
+	if(len == -1)
+		len = strlen(msg);
+	g_return_val_if_fail(len > 0, NULL);
+
+	utf = (guchar *)g_strndup(msg, len);
+
+	bytes = len;
+
+	for(i=0;i<len;i++){
+		switch(*(utf+i)){
+		case 0xe2:
+			if(*(utf+i+1) == 0x88) {
+				if(*(utf+i+2) == 0xa5) {	// ‖
+					*(utf+i) = 0xe2;
+					*(utf+i+1) = 0x80;
+					*(utf+i+2) = 0x96;
+				}
+			}
+			break;
+		case 0xef:
+			switch(*(utf+i+1)){
+			case 0xbc:
+				if(*(utf+i+2) == 0x8d) {	// −
+					*(utf+i) = 0xe2;
+					*(utf+i+1) = 0x88;
+					*(utf+i+2) = 0x92;
+				}
+				break;
+			case 0xbd:
+				if(*(utf+i+2) == 0x9e) {	// 〜
+					*(utf+i) = 0xe3;
+					*(utf+i+1) = 0x80;
+					*(utf+i+2) = 0x9c;
+				}
+				break;
+			case 0xbf:
+				switch(*(utf+i+2)){
+			       case 0xa0:	// ¢
+				       *(utf+i) = 0xc2;
+				       *(utf+i+1) = 0xa2;
+				       memmove(utf+i+2, utf+i+3,
+					       len-i-3); //shorten by 1byte
+				       bytes--;
+				       break;
+			       case 0xa1:	// £
+				       *(utf+i) = 0xc2;
+				       *(utf+i+1) = 0xa3;
+				       memmove(utf+i+2, utf+i+3,
+					       len-i-3); //shorten by 1byte
+				       bytes--;
+				       break;
+			       case 0xa2:	// ¬
+				       *(utf+i) = 0xc2;
+				       *(utf+i+1) = 0xac;
+				       memmove(utf+i+2, utf+i+3,
+					       len-i-3); //shorten by 1byte
+				       bytes--;
+				       break;
+			       }
+			       break;
+			}
+			break;
+		}
+	}
+	*(utf+bytes)= 0x00; //terminate
+	if(newlen)
+		*newlen = bytes;
+	return (gchar *)utf;
+}
+#endif
+
+#ifdef _WIN32
+gchar *botch_utf(const gchar *msg, gsize len, gsize *newlen)
+{
+	g_return_val_if_fail(msg != NULL, NULL);
+	if(len == -1)
+		len = strlen(msg);
+	g_return_val_if_fail(len > 0, NULL);
+
+	if(newlen)
+		*newlen = len;
+
+	return g_strndup(msg, len);
+}
+#else
+gchar *botch_utf(const gchar *msg, gsize len, gsize *newlen)
+{
+ 	int i,bytes;
+	unsigned char *utf;
+
+	g_return_val_if_fail(msg != NULL, NULL);
+	if(len == -1)
+		len = strlen(msg);
+	g_return_val_if_fail(len > 0, NULL);
+
+	bytes = len;
+
+	utf = g_malloc0(bytes*3/2+1); /* new length might be 3/2 in the worst case */
+	memcpy(utf, msg, bytes);
+
+ 	for(i=0;i<bytes;i++){
+ 		switch(*(utf+i)){
+ 		case 0xc2:
+ 			switch(*(utf+i+1)){
+ 			case 0xa2:	// ¢
+ 				*(utf+i) = 0xef;
+ 				*(utf+i+1) = 0xbf;
+				memmove(utf+i+3, utf+i+2, bytes-i-2);
+				*(utf+i+2) = 0xa0;
+				bytes++;
+ 				break;
+ 			case 0xa3:	// £
+ 				*(utf+i) = 0xef;
+ 				*(utf+i+1) = 0xbf;
+				memmove(utf+i+3, utf+i+2, bytes-i-2);
+				*(utf+i+2) = 0xa1;
+				bytes++;
+ 				break;
+ 			case 0xac:	// ¬
+ 				*(utf+i) = 0xef;
+ 				*(utf+i+1) = 0xbf;
+				memmove(utf+i+3, utf+i+2, bytes-i-2);
+				*(utf+i+2) = 0xa2;
+				bytes++;
+ 				break;
+ 			}
+ 			break;
+ 		case 0xe2:
+			switch(*(utf+i+1)){
+			case 0x80:	// ‖
+				if(*(utf+i+2) == 0x96){
+					*(utf+i) = 0xe2;
+					*(utf+i+1) = 0x88;
+					*(utf+i+2) = 0xa5;
+				}
+				break;
+			case 0x88:	// −
+				if(*(utf+i+1) == 0x92){
+					*(utf+i) = 0xef;
+					*(utf+i+1) = 0xbc;
+					*(utf+i+2) = 0x8d;
+				}
+				break;
+			}
+			break;
+ 		case 0xe3:	// 〜
+ 			if(*(utf+i+1) == 0x80){
+				if(*(utf+i+2) == 0x9c){
+					*(utf+i) = 0xef;
+					*(utf+i+1) = 0xbd;
+					*(utf+i+2) = 0x9e;
+				}
+ 			}
+ 			break;
+ 		} //switch
+ 	}
+	*(utf+bytes) = 0x00; //terminate
+	if(newlen)
+		*newlen = bytes;
+	return (gchar *)utf;
+}
+#endif
--- a/libpurple/util.h	Sat Jul 25 02:55:33 2009 +0000
+++ b/libpurple/util.h	Sun Jul 26 22:18:59 2009 +0900
@@ -1427,4 +1427,10 @@
 }
 #endif
 
+/* to address incompatibility with cp932. */
+void botch_ucs(gchar *ucs, gsize len);
+void sanitize_ucs(gchar *ucs, gsize len);
+gchar *botch_utf(const gchar *utf, gsize len, gsize *newlen);
+gchar *sanitize_utf(const gchar *msg, gsize len, gsize *newlen);
+
 #endif /* _PURPLE_UTIL_H_ */
--- a/pidgin/gtkblist.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/pidgin/gtkblist.c	Sun Jul 26 22:18:59 2009 +0900
@@ -72,6 +72,11 @@
 
 #define HEADLINE_CLOSE_SIZE 11
 
+/* I noticed that some of short cuts are very annoying.
+   If you really want to use them, change this to 1. --yaz
+*/
+#define ENABLE_SHORTCUT 0
+
 typedef struct
 {
 	PurpleAccount *account;
@@ -3465,6 +3470,7 @@
 	{ N_("/Tools/System _Log"), NULL, gtk_blist_show_systemlog_cb, 3, "<Item>", NULL },
 	{ "/Tools/sep3", NULL, NULL, 0, "<Separator>", NULL },
 	{ N_("/Tools/Mute _Sounds"), NULL, pidgin_blist_mute_sounds_cb, 0, "<CheckItem>", NULL },
+
 	/* Help */
 	{ N_("/_Help"), NULL, NULL, 0, "<Branch>", NULL },
 	{ N_("/Help/Online _Help"), "F1", gtk_blist_show_onlinehelp_cb, 0, "<StockItem>", GTK_STOCK_HELP },
--- a/pidgin/gtkconv.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/pidgin/gtkconv.c	Sun Jul 26 22:18:59 2009 +0900
@@ -1,3 +1,4 @@
+/* -*- coding: utf-8 -*- */
 /**
  * @file gtkconv.c GTK+ Conversation API
  * @ingroup pidgin
@@ -120,6 +121,10 @@
 static GdkColor *nick_colors = NULL;
 static guint nbr_nick_colors;
 
+/* yaz. If you want to use shortcut keys that may conflict with
+   inputmethods, change this to 1. */
+#define ENABLE_SHORTCUT 0
+
 typedef struct {
 	GtkWidget *window;
 
@@ -274,6 +279,43 @@
 	return FALSE;
 }
 
+static gboolean
+size_allocate_cb(GtkWidget *w, GtkAllocation *allocation, PidginConversation *gtkconv)
+{
+	PurpleConversation *conv = gtkconv->active_conv;
+
+	if (!GTK_WIDGET_VISIBLE(w))
+		return FALSE;
+
+	if (!PIDGIN_IS_PIDGIN_CONVERSATION(conv))
+		return FALSE;
+	if (gtkconv->auto_resize) {
+		return FALSE;
+	}
+
+	if (gdk_window_get_state(gtkconv->win->window->window) & GDK_WINDOW_STATE_MAXIMIZED) {
+		return FALSE;
+	}
+
+	/* I find that I resize the window when it has a bunch of conversations in it, mostly so that the
+	 * tab bar will fit, but then I don't want new windows taking up the entire screen.  I check to see
+	 * if there is only one conversation in the window.  This way we'll be setting new windows to the
+	 * size of the last resized new window. */
+	/* I think that the above justification is not the majority, and that the new tab resizing should
+	 * negate it anyway.  --luke */
+	if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM)
+	{
+		if (w == gtkconv->lower_hbox)
+			purple_prefs_set_int(PIDGIN_PREFS_ROOT "/conversations/im/entry_height", allocation->height);
+	}
+	else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT)
+	{
+		if (w == gtkconv->lower_hbox)
+			purple_prefs_set_int(PIDGIN_PREFS_ROOT "/conversations/chat/entry_height", allocation->height);
+	}
+	return FALSE;
+}
+
 static void
 default_formatize(PidginConversation *c)
 {
@@ -424,6 +466,20 @@
 	gtkconv->send_history = g_list_prepend(first, NULL);
 }
 
+#if 0
+static void
+reset_default_size(PidginConversation *gtkconv)
+{
+	PurpleConversation *conv = gtkconv->active_conv;
+	if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT)
+		gtk_widget_set_size_request(gtkconv->lower_hbox, -1,
+					    purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/chat/entry_height"));
+	else
+		gtk_widget_set_size_request(gtkconv->lower_hbox, -1,
+					    purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/im/entry_height"));
+}
+#endif
+
 static gboolean
 check_for_and_do_command(PurpleConversation *conv)
 {
@@ -3136,13 +3192,21 @@
 
 	{ "/Conversation/sep0", NULL, NULL, 0, "<Separator>", NULL },
 
+#if ENABLE_SHORTCUT
 	{ N_("/Conversation/_Find..."), NULL, menu_find_cb, 0,
 			"<StockItem>", GTK_STOCK_FIND },
+#else
+	{ N_("/Conversation/_Find..."), NULL, menu_find_cb, 0,
+      "<Item>", NULL },
+#endif
 	{ N_("/Conversation/View _Log"), NULL, menu_view_log_cb, 0, "<Item>", NULL },
 	{ N_("/Conversation/_Save As..."), NULL, menu_save_as_cb, 0,
 			"<StockItem>", GTK_STOCK_SAVE_AS },
+#if ENABLE_SHORTCUT
 	{ N_("/Conversation/Clea_r Scrollback"), "<CTL>L", menu_clear_cb, 0, "<StockItem>", GTK_STOCK_CLEAR },
-
+#else
+	{ N_("/Conversation/Clea_r Scrollback"), NULL, menu_clear_cb, 0, "<Item>", NULL },
+#endif
 	{ "/Conversation/sep1", NULL, NULL, 0, "<Separator>", NULL },
 
 #ifdef USE_VV
@@ -3159,8 +3223,13 @@
 	{ N_("/Conversation/Se_nd File..."), NULL, menu_send_file_cb, 0, "<StockItem>", PIDGIN_STOCK_TOOLBAR_SEND_FILE },
 	{ N_("/Conversation/Add Buddy _Pounce..."), NULL, menu_add_pounce_cb,
 			0, "<Item>", NULL },
+#if ENABLE_SHORTCUT
 	{ N_("/Conversation/_Get Info"), "<CTL>O", menu_get_info_cb, 0,
 			"<StockItem>", PIDGIN_STOCK_TOOLBAR_USER_INFO },
+#else
+	{ N_("/Conversation/_Get Info"), NULL, menu_get_info_cb, 0,
+			"<StockItem>", PIDGIN_STOCK_TOOLBAR_USER_INFO },
+#endif
 	{ N_("/Conversation/In_vite..."), NULL, menu_invite_cb, 0,
 			"<Item>", NULL },
 	{ N_("/Conversation/M_ore"), NULL, NULL, 0, "<Branch>", NULL },
@@ -3885,7 +3954,11 @@
 		gtk_widget_destroy(win->menu.send_to);
 
 	/* Build the Send To menu */
+#if ENABLE_SHORTCUT
 	win->menu.send_to = gtk_menu_item_new_with_mnemonic(_("S_end To"));
+#else
+	win->menu.send_to = gtk_menu_item_new_with_mnemonic(_("Send To")); //to free Alt-s. intentional. --yaz
+#endif
 	gtk_widget_show(win->menu.send_to);
 
 	menu = gtk_menu_new();
@@ -4289,6 +4362,7 @@
 	PidginChatPane *gtkchat;
 	char *new_topic;
 	const char *current_topic;
+	char dummy[] = "No Topic";
 
 	gc      = purple_conversation_get_gc(conv);
 
@@ -4308,7 +4382,7 @@
 		return;
 	}
 
-	gtk_entry_set_text(GTK_ENTRY(gtkchat->topic_text), current_topic);
+	gtk_entry_set_text(GTK_ENTRY(gtkchat->topic_text), current_topic ? current_topic : dummy);
 	prpl_info->set_chat_topic(gc, purple_conv_chat_get_id(PURPLE_CONV_CHAT(conv)),
 			new_topic);
 
@@ -4591,12 +4665,10 @@
 	height = CLAMP(height, MIN(min_height, max_height), max_height);
 
 	diff = height - gtkconv->entry->allocation.height;
-	if (ABS(diff) < oneline.height / 2)
+	if (diff == 0 || (diff < 0 && -diff < oneline.height / 2))
 		return FALSE;
-
 	gtk_widget_set_size_request(gtkconv->lower_hbox, -1,
-		diff + gtkconv->lower_hbox->allocation.height);
-
+				    diff + gtkconv->lower_hbox->allocation.height);
 	return FALSE;
 }
 
@@ -4814,7 +4886,7 @@
 static GtkWidget *
 setup_common_pane(PidginConversation *gtkconv)
 {
-	GtkWidget *vbox, *frame, *imhtml_sw, *event_box;
+	GtkWidget *paned, *vbox, *frame, *imhtml_sw, *event_box;
 	GtkCellRenderer *rend;
 	GtkTreePath *path;
 	PurpleConversation *conv = gtkconv->active_conv;
@@ -4823,8 +4895,12 @@
 	GtkPolicyType imhtml_sw_hscroll;
 	int buddyicon_size = 0;
 
+	paned = gtk_vpaned_new();
+	gtk_widget_show(paned);
+
 	/* Setup the top part of the pane */
 	vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	gtk_paned_pack1(GTK_PANED(paned), vbox, TRUE, TRUE);
 	gtk_widget_show(vbox);
 
 	/* Setup the info pane */
@@ -4953,18 +5029,30 @@
 	g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_release_event",
 	                 G_CALLBACK(refocus_entry_cb), gtkconv);
 
+	/* Setup the bottom half of the conversation window */
+	vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	gtk_paned_pack2(GTK_PANED(paned), vbox, FALSE, TRUE);
+	gtk_widget_show(vbox);
+
 	gtkconv->lower_hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
-	gtk_box_pack_start(GTK_BOX(vbox), gtkconv->lower_hbox, FALSE, FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(vbox), gtkconv->lower_hbox, TRUE, TRUE, 0);
 	gtk_widget_show(gtkconv->lower_hbox);
 
+	vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	gtk_box_pack_end(GTK_BOX(gtkconv->lower_hbox), vbox, TRUE, TRUE, 0);
+	gtk_widget_show(vbox);
+
 	/* Setup the toolbar, entry widget and all signals */
 	frame = pidgin_create_imhtml(TRUE, &gtkconv->entry, &gtkconv->toolbar, NULL);
-	gtk_box_pack_start(GTK_BOX(gtkconv->lower_hbox), frame, TRUE, TRUE, 0);
+	gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0);
 	gtk_widget_show(frame);
 
 	gtk_widget_set_name(gtkconv->entry, "pidgin_conv_entry");
 	gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->entry),
 			purple_account_get_protocol_name(conv->account));
+	gtk_widget_set_size_request(gtkconv->lower_hbox, -1,
+			chat ? purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/chat/entry_height") :
+			purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/im/entry_height"));
 
 	g_signal_connect(G_OBJECT(gtkconv->entry), "populate-popup",
 	                 G_CALLBACK(entry_popup_menu_cb), gtkconv);
@@ -4974,6 +5062,8 @@
 	                       G_CALLBACK(send_cb), gtkconv);
 	g_signal_connect_after(G_OBJECT(gtkconv->entry), "button_press_event",
 	                       G_CALLBACK(entry_stop_rclick_cb), NULL);
+	g_signal_connect(G_OBJECT(gtkconv->lower_hbox), "size-allocate",
+	                 G_CALLBACK(size_allocate_cb), gtkconv);
 
 	gtkconv->entry_buffer =
 		gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry));
@@ -4998,7 +5088,7 @@
 	default_formatize(gtkconv);
 	g_signal_connect_after(G_OBJECT(gtkconv->entry), "format_function_clear",
 	                       G_CALLBACK(clear_formatting_cb), gtkconv);
-	return vbox;
+	return paned;
 }
 
 static void
@@ -6662,6 +6752,9 @@
 		AtkObject *accessibility_obj;
 		/* I think this is a little longer than it needs to be but I'm lazy. */
 		char *style;
+		gboolean ellipsis;
+		int side;
+		char *tab_title = NULL;
 
 		if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM)
 			im = PURPLE_CONV_IM(conv);
@@ -6756,8 +6849,26 @@
 			style = NULL;
 		}
 
+		// nosuke's tab width patch
+		side = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/tab_side");
+		side &= ~8; 
+		if ( (side == GTK_POS_LEFT || side == GTK_POS_RIGHT) &&
+		     purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/trim_vertical_tabs") )
+			ellipsis = TRUE;
+		else
+			ellipsis = FALSE;
+
+		if (ellipsis) {
+			tab_title = pidgin_gtk_ellipsis_text(gtkconv->tab_label, title, 60, "...");
+		}
+		else {
+			tab_title = g_strdup(title);
+		}
+
 		gtk_widget_set_name(gtkconv->tab_label, style);
-		gtk_label_set_text(GTK_LABEL(gtkconv->tab_label), title);
+		gtk_label_set_text(GTK_LABEL(gtkconv->tab_label), tab_title);
+		g_free(tab_title); tab_title = NULL;
+
 		gtk_widget_set_state(gtkconv->tab_label, GTK_STATE_ACTIVE);
 
 		if (gtkconv->unseen_state == PIDGIN_UNSEEN_TEXT ||
@@ -7184,6 +7295,24 @@
 	return page_num;
 }
 
+//nosuke
+static void
+trim_vertical_tabs_pref_cb(const char *name, PurplePrefType type,
+						   gconstpointer value, gpointer data)
+{
+	GList *l;
+	PurpleConversation *conv;
+
+	for (l = purple_get_conversations(); l != NULL; l = l->next) {
+		conv = (PurpleConversation *)l->data;
+
+		if (!PIDGIN_IS_PIDGIN_CONVERSATION(conv))
+			continue;
+
+		pidgin_conv_update_fields(conv, PIDGIN_CONV_SET_TITLE);
+	}
+}
+
 static void
 close_on_tabs_pref_cb(const char *name, PurplePrefType type,
 					  gconstpointer value, gpointer data)
@@ -7253,6 +7382,7 @@
 			pidgin_conv_tab_pack(gtkwin, gtkconvs->data);
 		}
 	}
+	trim_vertical_tabs_pref_cb(name, type, value, data);
 }
 
 static void
@@ -7311,7 +7441,7 @@
 		else
 			gtk_widget_hide(gtkconv->toolbar);
 
-		g_idle_add((GSourceFunc)resize_imhtml_cb,gtkconv);
+//		g_idle_add((GSourceFunc)resize_imhtml_cb,gtkconv);
 	}
 }
 
@@ -7818,6 +7948,7 @@
 	purple_prefs_add_none(PIDGIN_PREFS_ROOT "/conversations");
 	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/use_smooth_scrolling", TRUE);
 	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/close_on_tabs", TRUE);
+	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/trim_vertical_tabs", FALSE);
 	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/send_bold", FALSE);
 	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/send_italic", FALSE);
 	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/send_underline", FALSE);
@@ -7872,6 +8003,8 @@
 	/* Connect callbacks. */
 	purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/close_on_tabs",
 								close_on_tabs_pref_cb, NULL);
+	purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/trim_vertical_tabs",
+								  trim_vertical_tabs_pref_cb, NULL);
 	purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/show_timestamps",
 								show_timestamps_pref_cb, NULL);
 	purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/show_formatting_toolbar",
--- a/pidgin/gtkimhtml.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/pidgin/gtkimhtml.c	Sun Jul 26 22:18:59 2009 +0900
@@ -116,6 +116,10 @@
                            gint              y,
                            guint             time);
 
+/* yaz. If you want to use shortcut keys that may conflict with
+   inputmethods, change this to 1. */
+#define ENABLE_SHORTCUT 0
+
 static void preinsert_cb(GtkTextBuffer *buffer, GtkTextIter *iter, gchar *text, gint len, GtkIMHtml *imhtml);
 static void insert_cb(GtkTextBuffer *buffer, GtkTextIter *iter, gchar *text, gint len, GtkIMHtml *imhtml);
 static void delete_cb(GtkTextBuffer *buffer, GtkTextIter *iter, GtkTextIter *end, GtkIMHtml *imhtml);
@@ -509,10 +513,11 @@
 static gint
 gtk_imhtml_tip (gpointer data)
 {
-	GtkIMHtml *imhtml = data;
+	GtkIMHtml *imhtml = (GtkIMHtml *)data;
 	PangoFontMetrics *font_metrics;
 	PangoLayout *layout;
 	PangoFont *font;
+	PangoLanguage *lang;
 
 	gint gap, x, y, h, w, scr_w, baseline_skip;
 
@@ -558,7 +563,9 @@
 		return FALSE;
 	}
 
-	font_metrics = pango_font_get_metrics(font, NULL);
+	lang = pango_context_get_language (pango_layout_get_context(layout));
+	font_metrics = pango_font_get_metrics(font, lang); //it's ok.
+//	font_metrics = pango_font_get_metrics(font, NULL); //crash!
 
 	pango_layout_get_pixel_size(layout, &scr_w, NULL);
 	gap = PANGO_PIXELS((pango_font_metrics_get_ascent(font_metrics) +
@@ -671,14 +678,12 @@
 		tip = g_object_get_data(G_OBJECT(anchor), "gtkimhtml_tiptext");
 		hand = FALSE;
 	}
-
 	if (tip && *tip) {
 		if (!GTK_IMHTML(imhtml)->editable && hand)
 			gdk_window_set_cursor(win, GTK_IMHTML(imhtml)->hand_cursor);
 		GTK_IMHTML(imhtml)->tip_timer = g_timeout_add (TOOLTIP_TIMEOUT,
 							       gtk_imhtml_tip, imhtml);
 	}
-
 	GTK_IMHTML(imhtml)->tip = tip;
 	g_slist_free(tags);
 	return FALSE;
@@ -1034,18 +1039,25 @@
 	if (info == TARGET_HTML) {
 		char *selection;
 #ifndef _WIN32
-		gsize len;
 		if (primary) {
 			text = gtk_imhtml_get_markup_range(imhtml, &start, &end);
 		} else
 			text = html_clipboard;
 
-		/* Mozilla asks that we start our text/html with the Unicode byte order mark */
-		selection = g_convert(text, -1, "UTF-16", "UTF-8", NULL, &len, NULL);
-		gtk_selection_data_set(selection_data, gdk_atom_intern("text/html", FALSE), 16, (const guchar *)selection, len);
-#else
+		selection = NULL;
+		if (primary) {
+			text = gtk_imhtml_get_markup_range(imhtml, &start, &end);
+		} else {
+			text = html_clipboard;
+		}
+		/* xxx should remove following line --yaz */
+		purple_debug_info("imhtml clipboard", "html_clipboard: %s len = %d\n", text, strlen(text));
+		gtk_selection_data_set(selection_data, gdk_atom_intern("text/html", FALSE),
+				       8, (const guchar *)text, strlen(text)+1); // include trailing '\0' --yaz
+#else /*_WIN32 */
 		selection = clipboard_html_to_win32(html_clipboard);
-		gtk_selection_data_set(selection_data, gdk_atom_intern("HTML Format", FALSE), 8, (const guchar *)selection, strlen(selection));
+		gtk_selection_data_set(selection_data, gdk_atom_intern("HTML Format", FALSE),
+				       8, (const guchar *)selection, strlen(selection));
 #endif
 		g_free(selection);
 	} else {
@@ -1196,7 +1208,8 @@
 	if (selection_data->length >= 2 &&
 		(*(guint16 *)text == 0xfeff || *(guint16 *)text == 0xfffe)) {
 		/* This is UTF-16 */
-		char *utf8 = utf16_to_utf8_with_bom_check(text, selection_data->length);
+//		char *utf8 = utf16_to_utf8_with_bom_check(text, selection_data->length);
+		char *utf8 = g_convert(text, selection_data->length, "UTF-8", "UTF-16", NULL, NULL, NULL);
 		g_free(text);
 		text = utf8;
 		if (!text) {
@@ -1931,7 +1944,8 @@
 			 * http://mail.gnome.org/archives/gtk-devel-list/2001-September/msg00114.html
 			 */
 			if (sd->length >= 2 && !g_utf8_validate(text, sd->length - 1, NULL)) {
-				utf8 = utf16_to_utf8_with_bom_check(text, sd->length);
+//				utf8 = utf16_to_utf8_with_bom_check(text, sd->length);
+				utf8 = g_convert(text, sd->length, "UTF-8", "UTF-16", NULL, NULL, NULL);
 
 				if (!utf8) {
 					purple_debug_warning("gtkimhtml", "g_convert from UTF-16 failed in drag_rcv_cb\n");
@@ -3377,6 +3391,7 @@
 			break;
 		}
 	}
+	ws[wpos] = '\0'; // chop ws at wpos. due to bug of gtk_text_buffer_insert() --yaz
 	gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
 	ws[0] = '\0'; wpos = 0;
 
--- a/pidgin/gtkimhtmltoolbar.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/pidgin/gtkimhtmltoolbar.c	Sun Jul 26 22:18:59 2009 +0900
@@ -1432,7 +1432,7 @@
 	gtk_container_add(GTK_CONTAINER(smiley_button), bbox);
 	image = gtk_image_new_from_stock(PIDGIN_STOCK_TOOLBAR_SMILEY, gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL));
 	gtk_box_pack_start(GTK_BOX(bbox), image, FALSE, FALSE, 0);
-	label = gtk_label_new_with_mnemonic(_("_Smile!"));
+	label = gtk_label_new_with_mnemonic(_("Smile!"));
 	gtk_box_pack_start(GTK_BOX(bbox), label, FALSE, FALSE, 0);
 	gtk_box_pack_start(GTK_BOX(box), smiley_button, FALSE, FALSE, 0);
 	g_signal_connect_swapped(G_OBJECT(smiley_button), "clicked", G_CALLBACK(gtk_button_clicked), toolbar->smiley);
--- a/pidgin/gtkimhtmltoolbar.h	Sat Jul 25 02:55:33 2009 +0000
+++ b/pidgin/gtkimhtmltoolbar.h	Sun Jul 26 22:18:59 2009 +0900
@@ -30,7 +30,7 @@
 extern "C" {
 #endif
 
-#define DEFAULT_FONT_FACE "Helvetica 12"
+#define DEFAULT_FONT_FACE "Sans 12"
 
 #define GTK_TYPE_IMHTMLTOOLBAR            (gtk_imhtmltoolbar_get_type())
 #define GTK_IMHTMLTOOLBAR(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_IMHTMLTOOLBAR, GtkIMHtmlToolbar))
--- a/pidgin/gtknotify.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/pidgin/gtknotify.c	Sun Jul 26 22:18:59 2009 +0900
@@ -1180,12 +1180,15 @@
 pidgin_notify_uri(const char *uri)
 {
 #ifndef _WIN32
-	char *escaped = g_shell_quote(uri);
+	char *tmp = g_shell_quote(uri);
+	char *escaped = g_locale_from_utf8(tmp, -1, NULL, NULL, NULL);
 	char *command = NULL;
 	char *remote_command = NULL;
 	const char *web_browser;
 	int place;
 
+	g_free(tmp);
+
 	web_browser = purple_prefs_get_string(PIDGIN_PREFS_ROOT "/browsers/browser");
 	place = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/browsers/place");
 
--- a/pidgin/gtkprefs.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/pidgin/gtkprefs.c	Sun Jul 26 22:18:59 2009 +0900
@@ -1491,6 +1491,9 @@
 	pidgin_prefs_checkbox(_("Show close b_utton on tabs"),
 				PIDGIN_PREFS_ROOT "/conversations/close_on_tabs", vbox2);
 
+	pidgin_prefs_checkbox(_("Trim names on vertical tabs"),
+				PIDGIN_PREFS_ROOT "/conversations/trim_vertical_tabs", vbox2);
+
 	label = pidgin_prefs_dropdown(vbox2, _("_Placement:"), PURPLE_PREF_INT,
 					PIDGIN_PREFS_ROOT "/conversations/tab_side",
 					_("Top"), GTK_POS_TOP,
@@ -1575,7 +1578,7 @@
 #endif
 
 	pidgin_prefs_checkbox(_("Use smooth-scrolling"), PIDGIN_PREFS_ROOT "/conversations/use_smooth_scrolling", vbox);
-
+	pidgin_prefs_checkbox(_("Use msn messenger style"), "/purple/conversations/msnstyle", vbox);//yaz
 #ifdef _WIN32
 	pidgin_prefs_checkbox(_("F_lash window when IMs are received"), PIDGIN_PREFS_ROOT "/win32/blink_im", vbox);
 #endif
--- a/pidgin/gtkutils.c	Sat Jul 25 02:55:33 2009 +0000
+++ b/pidgin/gtkutils.c	Sun Jul 26 22:18:59 2009 +0900
@@ -3929,3 +3929,61 @@
 	gtk_imhtml_class_register_protocol("gopher://", NULL, NULL);
 }
 
+gchar *
+pidgin_gtk_ellipsis_text(GtkWidget *widget, const char *text, gint min_width, gchar *ellipsis)
+{
+	PangoLayout *layout;
+	gint width, height;
+	gint ewidth;
+	glong len0, len1, len2;
+	gchar *buf, *buf_tmp;
+	gboolean with_ellipsis = FALSE;
+	const gchar default_ellipsis[] = "...";
+
+	if(!ellipsis)
+		ellipsis = default_ellipsis;
+
+	/* allocate buf */
+	buf = g_malloc0(strlen(text) * 2);
+
+	/* create layout */
+	layout = gtk_widget_create_pango_layout(widget, ellipsis);
+	pango_layout_get_pixel_size(layout, &width, &height);
+	ewidth = width; /* length of ellipsis text. */
+
+	len0 = 0;
+	len1 = g_utf8_strlen(text, -1);
+	len2 = len1;
+
+	while (1) {
+
+		if (len2 == len0)
+			break;
+
+		g_utf8_strncpy(buf, text, len2);
+		pango_layout_set_text(layout, buf, -1);
+		pango_layout_get_pixel_size(layout, &width, &height);
+
+		if(!with_ellipsis && width <= min_width)
+			break;
+		else
+			with_ellipsis = TRUE;
+
+		if (width + ewidth > min_width)
+			len1 = len2;
+		else
+			len0 = len2;
+
+		len2 = (len0 + len1) / 2;
+	}
+
+	g_object_unref(layout);
+
+	if (with_ellipsis) {
+		buf_tmp = buf;
+		buf = g_strdup_printf("%s%s", buf_tmp, ellipsis);
+		g_free(buf_tmp);
+	}
+
+	return buf;
+}
--- a/pidgin/gtkutils.h	Sat Jul 25 02:55:33 2009 +0000
+++ b/pidgin/gtkutils.h	Sun Jul 26 22:18:59 2009 +0900
@@ -859,5 +859,7 @@
  */
 void pidgin_utils_uninit(void);
 
+gchar *pidgin_gtk_ellipsis_text(GtkWidget *widget, const char *text, gint min_width, gchar *ellipsis);
+
 #endif /* _PIDGINUTILS_H_ */
 
Binary file pidgin/pixmaps/icons/hicolor/16x16/apps/pidgin.png has changed
--- a/pidgin/pixmaps/icons/hicolor/16x16/apps/scalable/pidgin.svg	Sat Jul 25 02:55:33 2009 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,335 +0,0 @@
-<?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://creativecommons.org/ns#"
-   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="16"
-   height="16"
-   id="svg4345"
-   sodipodi:version="0.32"
-   inkscape:version="0.46"
-   sodipodi:docbase="/home/hbons/Desktop/Pidgin/2.1.0/icons/24/scalable"
-   sodipodi:docname="pidgin.svg"
-   inkscape:export-filename="/home/hbons/Bureaublad/pidgin16-4.png"
-   inkscape:export-xdpi="90"
-   inkscape:export-ydpi="90"
-   version="1.0"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape">
-  <defs
-     id="defs4347">
-    <linearGradient
-       id="linearGradient8739"
-       inkscape:collect="always">
-      <stop
-         id="stop8741"
-         offset="0"
-         style="stop-color:#602869;stop-opacity:1" />
-      <stop
-         id="stop8743"
-         offset="1"
-         style="stop-color:#3b1941;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient8760">
-      <stop
-         style="stop-color:#3b1941;stop-opacity:1;"
-         offset="0"
-         id="stop8762" />
-      <stop
-         style="stop-color:#3b1941;stop-opacity:0;"
-         offset="1"
-         id="stop8764" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient8989"
-       inkscape:collect="always">
-      <stop
-         id="stop8991"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop8993"
-         offset="1"
-         style="stop-color:#eeeeec;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient8776">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0.82412058"
-         offset="0"
-         id="stop8778" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0"
-         offset="1"
-         id="stop8780" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient8720">
-      <stop
-         style="stop-color:#fdc26a;stop-opacity:1"
-         offset="0"
-         id="stop8722" />
-      <stop
-         style="stop-color:#f57900;stop-opacity:1"
-         offset="1"
-         id="stop8724" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3124">
-      <stop
-         style="stop-color:#3b1941;stop-opacity:1;"
-         offset="0"
-         id="stop3126" />
-      <stop
-         style="stop-color:#3b1941;stop-opacity:0;"
-         offset="1"
-         id="stop3128" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3116">
-      <stop
-         style="stop-color:#894599;stop-opacity:1"
-         offset="0"
-         id="stop3118" />
-      <stop
-         style="stop-color:#82508e;stop-opacity:0"
-         offset="1"
-         id="stop3120" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8989"
-       id="linearGradient6512"
-       x1="15.242517"
-       y1="38.066795"
-       x2="15.242517"
-       y2="42.163002"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.474981,0,0,0.4591462,0.5705609,-3.9567446)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3124"
-       id="linearGradient3130"
-       x1="12.561858"
-       y1="39.998802"
-       x2="12.561858"
-       y2="42.352577"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.5069392,0,0,0.4907885,-2.0817467e-2,-4.88025)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8720"
-       id="linearGradient8726"
-       x1="12.806054"
-       y1="16.65247"
-       x2="13.166923"
-       y2="16.608501"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.8035512,0,0,0.6654138,-0.6991237,0.3717176)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3116"
-       id="linearGradient8774"
-       x1="10.624538"
-       y1="19.264456"
-       x2="10.624538"
-       y2="23.165424"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.7506322,0,0,0.7602819,0.3614067,-1.1609868)" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8776"
-       id="radialGradient8782"
-       cx="11.539145"
-       cy="11.774944"
-       fx="11.539145"
-       fy="11.774944"
-       r="9.5"
-       gradientTransform="matrix(1.1492907,-3.5818508e-2,2.1662967e-2,0.7172256,-4.3193915,-6.011096e-2)"
-       gradientUnits="userSpaceOnUse" />
-    <filter
-       inkscape:collect="always"
-       id="filter9040"
-       x="-0.095484518"
-       width="1.190969"
-       y="-0.32181817"
-       height="1.6436363">
-      <feGaussianBlur
-         inkscape:collect="always"
-         stdDeviation="0.22627841"
-         id="feGaussianBlur9042" />
-    </filter>
-    <filter
-       inkscape:collect="always"
-       id="filter8756"
-       x="-0.067594799"
-       width="1.1351896"
-       y="-0.12311285"
-       height="1.2462257">
-      <feGaussianBlur
-         inkscape:collect="always"
-         stdDeviation="0.25007298"
-         id="feGaussianBlur8758" />
-    </filter>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8760"
-       id="linearGradient8766"
-       x1="10.025534"
-       y1="24.3125"
-       x2="12.26086"
-       y2="24.3125"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8739"
-       id="linearGradient8816"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.2058295,0,0,3.3872105,-0.5868595,-0.5305442)"
-       x1="6.6287227"
-       y1="0.48644698"
-       x2="0.44665223"
-       y2="1.4697748" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8760"
-       id="linearGradient8735"
-       gradientUnits="userSpaceOnUse"
-       x1="9.778717"
-       y1="24.3125"
-       x2="12.178589"
-       y2="24.3125" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="32"
-     inkscape:cx="17.336548"
-     inkscape:cy="7.0248271"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:grid-bbox="true"
-     inkscape:document-units="px"
-     inkscape:window-width="1440"
-     inkscape:window-height="847"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
-     showguides="true"
-     inkscape:guide-bbox="true"
-     inkscape:grid-points="false"
-     width="24px"
-     height="24px"
-     inkscape:object-bbox="true"
-     inkscape:snap-bbox="true"
-     inkscape:snap-nodes="false"
-     objecttolerance="10"
-     gridtolerance="10">
-    <inkscape:grid
-       type="xygrid"
-       id="grid7936"
-       visible="true"
-       enabled="true" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata4350">
-    <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">
-    <path
-       style="opacity:1;fill:none;fill-rule:evenodd;stroke:url(#linearGradient8816);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
-       d="M 7.9293116,5.0795231 C 8.4000613,4.9623562 8.4835059,4.5003986 8.6165851,4.1601444 C 8.8703534,3.4900386 8.9850242,3.2527412 8.8138379,2.5709314 C 8.2219508,0.45209022 2.1611419,-0.88447008 1.4517269,2.9807965"
-       id="path8814"
-       sodipodi:nodetypes="cscc" />
-    <path
-       style="opacity:1;fill:url(#linearGradient8774);fill-opacity:1;stroke:url(#linearGradient3130);stroke-width:0.99999994000000003;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 7.5832705,1.5 C 4.2253041,1.5 1.5,4.2484155 1.5,7.6348558 C 1.5,10.409353 1.5368298,15.204777 2.3493298,16.119387 C 2.9513142,16.119387 14.14629,17.5 15.510463,17.5 C 16.582197,17.5 15.529722,16.489173 15.529722,16.489173 C 15.529722,15.082448 14.037305,14.095385 13.065033,13.123113 C 12.31715,12.330145 13.159601,10.088797 13.159601,10.088797 C 13.484704,9.3379883 13.534521,8.6063333 13.534521,7.735143 C 13.534521,4.348703 10.941237,1.5 7.5832705,1.5 z"
-       id="path5176"
-       sodipodi:nodetypes="cccccccsc" />
-    <path
-       style="opacity:0.54299998999999999;fill:url(#radialGradient8782);fill-opacity:1;stroke:url(#linearGradient6512);stroke-width:0.99999994000000003;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 7.6952762,2.4999998 C 4.8395496,2.4999998 2.5080065,4.8304336 2.5001711,7.7371358 C 2.5001581,7.7420387 2.4997927,7.7465938 2.5001711,7.7514849 C 2.5001711,11.097502 3.0181313,16.475208 3.0181313,16.475208 C 3.9379713,16.475208 10.734965,16.461527 13.502192,16.461527 C 14.056593,16.461527 15,16.692971 15,16.020522 C 15,15.91871 14.623872,16.133525 14.362514,15.895884 C 14.101157,15.658243 13.835251,15.059314 13.403964,14.806022 C 12.543199,14.263752 11.86054,13.312811 11.81661,11.873858 C 11.874694,10.425059 12.718766,9.4318208 12.620458,7.8321281 C 12.620458,4.918572 10.555818,2.4999998 7.6952762,2.4999998 z"
-       id="path5241"
-       sodipodi:nodetypes="cscccsscccc" />
-    <path
-       style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 7.9998599,7.6813275 C 7.9998599,9.061316 6.8055234,10 5.9999296,10 C 4.8959685,10 4,8.880011 4,7.5000225 C 4,6.3007912 4.6142095,4.9911617 5.7181378,5.0000449 C 8.059493,5.018459 7.9998599,6.5910879 7.9998599,7.6813275 z"
-       id="path5157"
-       sodipodi:nodetypes="csssc" />
-    <path
-       sodipodi:type="arc"
-       style="opacity:1;fill:url(#linearGradient8766);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path5162"
-       sodipodi:cx="10.169642"
-       sodipodi:cy="24.3125"
-       sodipodi:rx="1.2410715"
-       sodipodi:ry="1.2946428"
-       d="M 11.410714,24.3125 A 1.2410715,1.2946428 0 1 1 8.928571,24.3125 A 1.2410715,1.2946428 0 1 1 11.410714,24.3125 z"
-       transform="matrix(0.8057553,0,0,0.7927385,-2.1942434,-11.247142)" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="0.63276428"
-       inkscape:original="M 10.5 14 C 10.223 14 10 14.223 10 14.5 C 10 14.777 10.223 15 10.5 15 L 11.5 15 C 11.777 15 12 14.777 12 14.5 C 12 14.223 11.777 14 11.5 14 L 10.5 14 z M 13.5 14 C 13.223 14 13 14.223 13 14.5 C 13 14.777 13.223 15 13.5 15 L 14.5 15 C 14.777 15 15 14.777 15 14.5 C 15 14.223 14.777 14 14.5 14 L 13.5 14 z "
-       style="fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter9040)"
-       id="path8998"
-       d="M 10.5,13.375 C 9.8833937,13.375 9.375,13.883394 9.375,14.5 C 9.375,15.116606 9.8833937,15.625 10.5,15.625 L 11.5,15.625 C 11.997417,15.625 12.351557,15.26606 12.5,14.8125 C 12.648443,15.26606 13.002583,15.625 13.5,15.625 L 14.5,15.625 C 15.116606,15.625 15.625,15.116606 15.625,14.5 C 15.625,13.883394 15.116606,13.375 14.5,13.375 L 13.5,13.375 C 13.002583,13.375 12.648443,13.73394 12.5,14.1875 C 12.351557,13.73394 11.997417,13.375 11.5,13.375 L 10.5,13.375 z"
-       transform="matrix(0.7360213,0,0,0.7376927,0.4333759,-1.1147722)" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="0.58151811"
-       inkscape:original="M 8.5 9 C 7.5744947 9 8.0888797 12.372263 4 10.3125 C 5.6494162 12.565197 8.197109 13 8.96875 13 C 9.7318012 13 11.759773 11.940619 12.03125 9.96875 C 9.8826905 12.168839 9.3373684 9 8.5 9 z "
-       style="fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter8756)"
-       id="path7960"
-       d="M 8.5,8.40625 C 8.2077387,8.40625 7.9340555,8.5866498 7.78125,8.75 C 7.6284445,8.9133502 7.5498385,9.0608344 7.46875,9.21875 C 7.3065731,9.5345811 7.172643,9.8595724 7,10.0625 C 6.827357,10.265428 6.671609,10.387141 6.28125,10.40625 C 5.890891,10.425359 5.2196564,10.269712 4.25,9.78125 C 4.0077291,9.6621096 3.7153231,9.7253647 3.5439557,9.9339859 C 3.3725882,10.142607 3.3673262,10.44173 3.53125,10.65625 C 4.4297328,11.883357 5.5774976,12.609102 6.59375,13.03125 C 7.6100024,13.453398 8.4737052,13.59375 8.96875,13.59375 C 9.6193922,13.59375 10.340813,13.267437 11.0625,12.6875 C 11.784187,12.107563 12.433247,11.228313 12.59375,10.0625 C 12.622923,9.8212663 12.499043,9.5873227 12.283116,9.4758765 C 12.067189,9.3644302 11.804734,9.3989754 11.625,9.5625 C 11.145204,10.053803 10.811541,10.151032 10.65625,10.15625 C 10.500959,10.161468 10.384244,10.105939 10.1875,9.90625 C 9.9907556,9.7065608 9.7866869,9.3846583 9.5625,9.09375 C 9.4504065,8.9482959 9.3464815,8.8194169 9.1875,8.6875 C 9.0285185,8.5555831 8.7880568,8.40625 8.5,8.40625 z"
-       transform="translate(0.9337088,2.2097087e-2)" />
-    <path
-       style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 12.665364,5.6592388 C 12.000973,4.6508398 10.81971,4.941345 10.39549,5.5852216 C 9.8141493,6.4675705 9.881553,8.00209 10.545944,9.0104902 C 11.123309,9.8868033 12.156638,10.433807 12.737979,9.551461 C 13.319319,8.6691115 13.190256,6.4559104 12.665364,5.6592388 z"
-       id="path3134"
-       sodipodi:nodetypes="csssc" />
-    <path
-       style="fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 8,9 C 8,9 8,10 8,10 L 8.8944098,10 C 9.0595775,10 9.1925465,9.7769994 9.1925465,9.4999995 C 9.1925465,9.2229999 9.0595775,9 8.8944098,9 L 8,9 z M 10.086956,9 C 9.9217887,9 9.7888198,9.2229999 9.7888198,9.4999995 C 9.7888198,9.7769994 9.9217887,10 10.086956,10 L 11,10 C 11,10 11,9.1680139 11,9 L 10.086956,9 z"
-       id="rect3140"
-       sodipodi:nodetypes="cccscccscccc" />
-    <path
-       style="fill:url(#linearGradient8726);fill-opacity:1;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 4.9337087,10.066933 C 8.8819634,12.626696 8.4961475,9.022097 9.4216528,9.022097 C 10.259021,9.022097 10.807246,12.196312 12.955806,9.9962228 C 12.684329,11.968092 10.658384,13.022097 9.8953332,13.022097 C 9.1236918,13.022097 6.5674999,12.88213 4.9337087,10.066933 z"
-       id="path3142"
-       sodipodi:nodetypes="czczc" />
-    <path
-       sodipodi:type="arc"
-       style="opacity:1;fill:url(#linearGradient8735);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path8733"
-       sodipodi:cx="10.169642"
-       sodipodi:cy="24.3125"
-       sodipodi:rx="1.2410715"
-       sodipodi:ry="1.2946428"
-       d="M 11.410714,24.3125 A 1.2410715,1.2946428 0 1 1 8.928571,24.3125 A 1.2410715,1.2946428 0 1 1 11.410714,24.3125 z"
-       transform="matrix(0.8057555,0,0,0.7724141,2.8057548,-10.779318)" />
-  </g>
-</svg>
Binary file pidgin/pixmaps/icons/hicolor/22x22/apps/pidgin.png has changed
Binary file pidgin/pixmaps/icons/hicolor/24x24/apps/pidgin.png has changed
--- a/pidgin/pixmaps/icons/hicolor/24x24/apps/scalable/pidgin.svg	Sat Jul 25 02:55:33 2009 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,347 +0,0 @@
-<?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://creativecommons.org/ns#"
-   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="svg4345"
-   sodipodi:version="0.32"
-   inkscape:version="0.46"
-   sodipodi:docbase="/home/hbons/Desktop/Pidgin/2.1.0/icons/24/scalable"
-   sodipodi:docname="pidgin.svg"
-   inkscape:export-filename="/home/hbons/Bureaublad/pidgin.png"
-   inkscape:export-xdpi="90"
-   inkscape:export-ydpi="90"
-   version="1.0"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape">
-  <defs
-     id="defs4347">
-    <linearGradient
-       id="linearGradient8989"
-       inkscape:collect="always">
-      <stop
-         id="stop8991"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:0.81407034" />
-      <stop
-         id="stop8993"
-         offset="1"
-         style="stop-color:#eeeeec;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient8838">
-      <stop
-         style="stop-color:#3b1941;stop-opacity:1;"
-         offset="0"
-         id="stop8840" />
-      <stop
-         style="stop-color:#3b1941;stop-opacity:0;"
-         offset="1"
-         id="stop8842" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient8830">
-      <stop
-         style="stop-color:#3b1941;stop-opacity:1;"
-         offset="0"
-         id="stop8832" />
-      <stop
-         style="stop-color:#3b1941;stop-opacity:0;"
-         offset="1"
-         id="stop8834" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient8776">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0.82412058"
-         offset="0"
-         id="stop8778" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0"
-         offset="1"
-         id="stop8780" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient8720">
-      <stop
-         style="stop-color:#fdc26a;stop-opacity:1"
-         offset="0"
-         id="stop8722" />
-      <stop
-         style="stop-color:#f57900;stop-opacity:1"
-         offset="1"
-         id="stop8724" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3124">
-      <stop
-         style="stop-color:#3b1941;stop-opacity:1;"
-         offset="0"
-         id="stop3126" />
-      <stop
-         style="stop-color:#3b1941;stop-opacity:0;"
-         offset="1"
-         id="stop3128" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3116">
-      <stop
-         style="stop-color:#82508e;stop-opacity:1;"
-         offset="0"
-         id="stop3118" />
-      <stop
-         style="stop-color:#82508e;stop-opacity:0"
-         offset="1"
-         id="stop3120" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8989"
-       id="linearGradient6512"
-       x1="15.712908"
-       y1="41.672424"
-       x2="15.712908"
-       y2="43.283482"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.657666,0,0,0.625853,0.8007403,-4.3010586)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3124"
-       id="linearGradient3130"
-       x1="12.561858"
-       y1="39.538197"
-       x2="12.561858"
-       y2="43.858727"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.6753496,0,0,0.6455349,0.4630688,-4.891953)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8720"
-       id="linearGradient8726"
-       x1="12.806054"
-       y1="16.65247"
-       x2="13.166923"
-       y2="16.608501"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(0.9722718,0)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3116"
-       id="linearGradient8774"
-       x1="10.624538"
-       y1="19.763729"
-       x2="10.624538"
-       y2="23.347383"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(0.9722718,0)" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8776"
-       id="radialGradient8782"
-       cx="11.763939"
-       cy="12.831866"
-       fx="11.763939"
-       fy="12.831866"
-       r="9.5000002"
-       gradientTransform="matrix(1.5913256,-4.8823489e-2,2.9994878e-2,0.9776358,-5.9699631,1.0103644)"
-       gradientUnits="userSpaceOnUse" />
-    <filter
-       inkscape:collect="always"
-       id="filter8810"
-       x="-0.066766478"
-       width="1.133533"
-       y="-0.10563155"
-       height="1.2112631">
-      <feGaussianBlur
-         inkscape:collect="always"
-         stdDeviation="0.30534121"
-         id="feGaussianBlur8812" />
-    </filter>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8830"
-       id="linearGradient8836"
-       x1="6.3341951"
-       y1="3.1008458"
-       x2="0.83419508"
-       y2="3.1008458"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(0.9722718,0)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8838"
-       id="linearGradient8844"
-       x1="9.5704832"
-       y1="3.0778286"
-       x2="3.0625"
-       y2="-0.047171354"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(0.9722718,0)" />
-    <filter
-       inkscape:collect="always"
-       id="filter9040"
-       x="-0.095484515"
-       width="1.190969"
-       y="-0.32181818"
-       height="1.6436364">
-      <feGaussianBlur
-         inkscape:collect="always"
-         stdDeviation="0.22627841"
-         id="feGaussianBlur9042" />
-    </filter>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="22.627417"
-     inkscape:cx="21.62498"
-     inkscape:cy="11.838987"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:grid-bbox="true"
-     inkscape:document-units="px"
-     inkscape:window-width="1440"
-     inkscape:window-height="847"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
-     showguides="true"
-     inkscape:guide-bbox="true"
-     inkscape:grid-points="false"
-     width="24px"
-     height="24px"
-     inkscape:object-bbox="true"
-     inkscape:snap-bbox="true"
-     inkscape:snap-nodes="false"
-     objecttolerance="10"
-     gridtolerance="10">
-    <inkscape:grid
-       type="xygrid"
-       id="grid7936"
-       visible="true"
-       enabled="true" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata4350">
-    <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">
-    <path
-       style="fill:url(#linearGradient8844);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 6.9177548,1.9731142 C 8.1897168,-0.34713734 10.972272,1.9093507 10.972272,4.2806574 L 9.9267968,4.1947658 C 9.9267968,2.9993751 8.9228106,1.7171212 6.9177548,1.9731142 z"
-       id="rect5189"
-       sodipodi:nodetypes="cccc" />
-    <path
-       style="fill:url(#linearGradient8836);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 4.3071856,3.782206 C 4.2486113,1.1368282 7.7866188,1.6997265 8.9722718,3.7533385 L 8.0239178,4.2016918 C 7.4262233,3.1664528 5.9156185,2.5579816 4.3071856,3.782206 z"
-       id="path8784"
-       sodipodi:nodetypes="cccc"
-       inkscape:transform-center-x="1.7235728"
-       inkscape:transform-center-y="-0.24306796" />
-    <path
-       style="opacity:1;fill:url(#linearGradient8774);fill-opacity:1;stroke:url(#linearGradient3130);stroke-width:0.99999994000000003;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 10.593313,3.5 C 6.1197955,3.5 2.4891175,7.1149956 2.4891175,11.569186 C 2.4891175,15.218486 3.4986749,23.427658 -1.7892089,23.427658 C -0.98723886,23.427658 18.806305,24.544826 20.623671,24.544826 C 22.051445,24.544826 21.939905,23.215283 21.939905,23.215283 C 21.939905,22.576692 21.741015,22.10882 20.830589,21.409004 C 19.67644,20.521846 19.025096,20.449608 18.028757,19.406617 C 17.032418,18.363626 18.022158,14.796859 18.022158,14.796859 C 18.455264,13.809319 18.521629,12.846972 18.521629,11.701094 C 18.521629,7.2469039 15.066831,3.5 10.593313,3.5 z"
-       id="path5176"
-       sodipodi:nodetypes="ccccsszcsc" />
-    <path
-       style="opacity:0.5;fill:url(#radialGradient8782);fill-opacity:1;stroke:url(#linearGradient6512);stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 10.665731,4.5 C 6.7116478,4.5 3.4833573,7.6765676 3.4725083,11.638635 C 3.4724903,11.645318 3.4719843,11.651527 3.4725083,11.658194 C 3.4725083,11.658194 4.335542,22.578523 0.47920826,23.611825 C 1.7528328,23.611825 14.992315,23.530678 18.82386,23.530678 C 19.591493,23.530678 20.897748,23.846154 20.897748,22.929553 C 20.897748,22.790774 20.766378,22.529834 20.404498,22.20591 C 20.042618,21.881986 19.501364,21.534156 18.904198,21.188899 C 17.106601,20.449743 16.43302,19.238726 16.372193,17.277317 C 16.452619,15.30249 17.621333,13.948626 17.485214,11.768117 C 17.485214,7.7967072 14.626482,4.5 10.665731,4.5 z"
-       id="path5241"
-       sodipodi:nodetypes="cscccsscccc" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="0.97252291"
-       inkscape:original="M 7.15625 8 C 5.7694225 8 4.9999998 9.5395554 5 10.96875 C 5 12.613363 6.1444228 13.96875 7.53125 13.96875 C 8.5432599 13.96875 10.03125 12.832113 10.03125 11.1875 C 10.03125 9.8881973 8.5430781 8 7.15625 8 z "
-       style="opacity:1;fill:#9757a4;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
-       id="path8816"
-       d="M 7.15625,7.03125 C 6.1029614,7.03125 5.2431984,7.6462575 4.75,8.40625 C 4.2568016,9.1662425 4.0312499,10.07963 4.03125,10.96875 C 4.03125,13.064524 5.5107726,14.9375 7.53125,14.9375 C 8.4013507,14.9375 9.1895212,14.517728 9.84375,13.875 C 10.497979,13.232272 11,12.303108 11,11.1875 C 11,10.166552 10.509035,9.2426793 9.84375,8.46875 C 9.1784648,7.6948207 8.2910346,7.03125 7.15625,7.03125 z"
-       transform="matrix(1.0039789,0,0,1,-4.3768242e-2,6.25e-2)" />
-    <path
-       style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 9.9722718,11.217568 C 9.9722718,12.873569 8.4886302,14 7.4878967,14 C 6.1165222,14 5.0035223,12.656001 5.0035223,11 C 5.0035223,9.5609094 5.7664715,8 7.1378462,8 C 8.5092214,8 9.9722718,9.9092687 9.9722718,11.217568 z"
-       id="path5157"
-       sodipodi:nodetypes="csssc" />
-    <path
-       sodipodi:type="arc"
-       style="opacity:1;fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path5162"
-       sodipodi:cx="10.169642"
-       sodipodi:cy="24.3125"
-       sodipodi:rx="1.2410715"
-       sodipodi:ry="1.2946428"
-       d="M 11.410714,24.3125 A 1.2410715,1.2946428 0 1 1 8.928571,24.3125 A 1.2410715,1.2946428 0 1 1 11.410714,24.3125 z"
-       transform="matrix(1.1960429,0,0,1.158621,-4.7066825,-16.575223)" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="1.0018603"
-       inkscape:original="M 15.375 8 C 14.972613 8.0219165 14.616322 8.2670758 14.40625 8.59375 C 13.830495 9.4890789 13.873243 11.039266 14.53125 12.0625 C 15.103067 12.951704 16.049246 13.426577 16.625 12.53125 C 17.200756 11.635921 17.051098 9.4958908 16.53125 8.6875 C 16.202247 8.1758836 15.777387 7.9780835 15.375 8 z "
-       style="fill:#9757a4;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
-       id="path8820"
-       d="M 15.3125,7 C 14.537055,7.0422356 13.927975,7.4941649 13.5625,8.0625 C 12.689986,9.4193046 12.791183,11.199932 13.6875,12.59375 C 14.065497,13.181554 14.559478,13.713455 15.28125,13.9375 C 16.003022,14.161545 17.002245,13.787939 17.46875,13.0625 C 17.974403,12.276184 18.035404,11.401604 18,10.53125 C 17.964596,9.6608958 17.828805,8.8619408 17.375,8.15625 C 16.897304,7.4134085 16.079992,6.9581976 15.3125,7 z"
-       transform="translate(0.9722718,0)" />
-    <path
-       style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 17.512585,8.6790592 C 16.854579,7.6558262 15.784106,7.9284344 15.363962,8.5817827 C 14.788207,9.4771112 14.854963,11.034204 15.51297,12.057438 C 16.084787,12.946642 17.025322,13.413012 17.601076,12.517685 C 18.176831,11.622356 18.032433,9.48745 17.512585,8.6790592 z"
-       id="path3134"
-       sodipodi:nodetypes="csssc" />
-    <path
-       sodipodi:type="arc"
-       style="fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path3136"
-       sodipodi:cx="10.169642"
-       sodipodi:cy="24.3125"
-       sodipodi:rx="1.2410715"
-       sodipodi:ry="1.2946428"
-       d="M 11.410714,24.3125 A 1.2410715,1.2946428 0 1 1 8.928571,24.3125 A 1.2410715,1.2946428 0 1 1 11.410714,24.3125 z"
-       transform="matrix(0.8057553,0,0,1.158621,7.7780286,-16.668973)" />
-    <path
-       style="fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter8810)"
-       d="M 13.566022,12.4375 C 13.194663,12.4375 12.924994,12.697732 12.784772,12.90625 C 12.64455,13.114768 12.563861,13.333559 12.472272,13.5625 C 12.289094,14.020382 12.105216,14.51781 11.847272,14.875 C 11.589328,15.23219 11.326777,15.452654 10.816022,15.46875 C 10.305267,15.484846 9.472703,15.240041 8.2535218,14.4375 C 8.0308701,14.276718 7.7244458,14.30128 7.530249,14.495477 C 7.3360522,14.689674 7.3114894,14.996098 7.4722718,15.21875 C 8.177906,16.27546 9.2361909,17.5841 10.612897,18.40625 C 11.30125,18.817325 12.405251,19.087337 12.987897,19.34375 C 13.570543,19.600163 13.914091,19.5625 14.378522,19.5625 C 14.899377,19.5625 15.235127,19.263825 15.597272,18.9375 C 15.959417,18.611175 16.339029,18.201439 16.691022,17.75 C 17.395008,16.847123 18.035855,15.803499 18.409772,15.1875 C 18.520635,14.941092 18.439589,14.65066 18.217158,14.49726 C 17.994726,14.343859 17.694451,14.37131 17.503522,14.5625 C 16.887662,15.324047 16.510081,15.447586 16.316022,15.4375 C 16.121963,15.427414 15.873341,15.263025 15.597272,14.875 C 15.321203,14.486975 15.048543,13.963561 14.784772,13.5 C 14.652887,13.26822 14.51805,13.036007 14.347272,12.84375 C 14.176494,12.651493 13.932762,12.4375 13.566022,12.4375 z"
-       id="path8770"
-       sodipodi:nodetypes="csssscscssssscscssssc" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="0.63276428"
-       inkscape:original="M 10.5 14 C 10.223 14 10 14.223 10 14.5 C 10 14.777 10.223 15 10.5 15 L 11.5 15 C 11.777 15 12 14.777 12 14.5 C 12 14.223 11.777 14 11.5 14 L 10.5 14 z M 13.5 14 C 13.223 14 13 14.223 13 14.5 C 13 14.777 13.223 15 13.5 15 L 14.5 15 C 14.777 15 15 14.777 15 14.5 C 15 14.223 14.777 14 14.5 14 L 13.5 14 z "
-       style="fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter9040)"
-       id="path8998"
-       d="M 10.5,13.375 C 9.8833937,13.375 9.375,13.883394 9.375,14.5 C 9.375,15.116606 9.8833937,15.625 10.5,15.625 L 11.5,15.625 C 11.997417,15.625 12.351557,15.26606 12.5,14.8125 C 12.648443,15.26606 13.002583,15.625 13.5,15.625 L 14.5,15.625 C 15.116606,15.625 15.625,15.116606 15.625,14.5 C 15.625,13.883394 15.116606,13.375 14.5,13.375 L 13.5,13.375 C 13.002583,13.375 12.648443,13.73394 12.5,14.1875 C 12.351557,13.73394 11.997417,13.375 11.5,13.375 L 10.5,13.375 z"
-       transform="translate(0.9722718,0)" />
-    <path
-       style="fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 11,14 C 11,14 11,15 11,15 L 12.491733,15 C 12.767207,15 12.988978,14.777 12.988978,14.5 C 12.988978,14.223 12.767207,14 12.491733,14 L 11,14 z M 14.480711,14 C 14.205238,14 13.983467,14.223 13.983467,14.5 C 13.983467,14.777 14.205238,15 14.480711,15 L 16.003522,15 C 16.003522,15 16.003522,14.168014 16.003522,14 L 14.480711,14 z"
-       id="rect3140"
-       sodipodi:nodetypes="cccscccscccc" />
-    <path
-       style="fill:url(#linearGradient8726);fill-opacity:1;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 7.982195,14.992875 C 13.070707,18.088335 12.577918,13 13.567333,13 C 14.578647,13 15.264171,18.201991 17.938001,14.895644 C 17.517658,16.431071 15.326409,19.011297 14.376811,19.011297 C 13.416522,19.011297 10.034853,18.378283 7.982195,14.992875 z"
-       id="path3142"
-       sodipodi:nodetypes="czczc" />
-  </g>
-</svg>
Binary file pidgin/pixmaps/icons/hicolor/32x32/apps/pidgin.png has changed
--- a/pidgin/pixmaps/icons/hicolor/32x32/apps/scalable/pidgin.svg	Sat Jul 25 02:55:33 2009 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,617 +0,0 @@
-<?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://creativecommons.org/ns#"
-   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="32"
-   height="32"
-   id="svg4345"
-   sodipodi:version="0.32"
-   inkscape:version="0.46"
-   sodipodi:docbase="/home/hbons/Desktop/2.0.2/pidgin/pixmaps/icons/32/scalable"
-   sodipodi:docname="pidgin.svg"
-   inkscape:export-filename="/home/hbons/Bureaublad/pidgin-32.png"
-   inkscape:export-xdpi="90"
-   inkscape:export-ydpi="90"
-   version="1.0"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape">
-  <defs
-     id="defs4347">
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2816">
-      <stop
-         style="stop-color:#eeeeec;stop-opacity:1;"
-         offset="0"
-         id="stop2818" />
-      <stop
-         style="stop-color:#eeeeec;stop-opacity:0;"
-         offset="1"
-         id="stop2820" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2826">
-      <stop
-         style="stop-color:#3b1941;stop-opacity:1;"
-         offset="0"
-         id="stop2828" />
-      <stop
-         style="stop-color:#3b1941;stop-opacity:0;"
-         offset="1"
-         id="stop2830" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2834">
-      <stop
-         style="stop-color:#82508e;stop-opacity:1;"
-         offset="0"
-         id="stop2836" />
-      <stop
-         style="stop-color:#82508e;stop-opacity:0;"
-         offset="1"
-         id="stop2838" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6537">
-      <stop
-         style="stop-color:white;stop-opacity:1;"
-         offset="0"
-         id="stop6539" />
-      <stop
-         style="stop-color:white;stop-opacity:0;"
-         offset="1"
-         id="stop6541" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient6506">
-      <stop
-         style="stop-color:#eeeeec;stop-opacity:1;"
-         offset="0"
-         id="stop6508" />
-      <stop
-         style="stop-color:#eeeeec;stop-opacity:0;"
-         offset="1"
-         id="stop6510" />
-    </linearGradient>
-    <linearGradient
-       y2="30.188351"
-       x2="18.143806"
-       y1="29.72571"
-       x1="18.097515"
-       gradientUnits="userSpaceOnUse"
-       id="linearGradient8818"
-       xlink:href="#linearGradient8808"
-       inkscape:collect="always" />
-    <linearGradient
-       gradientUnits="userSpaceOnUse"
-       y2="30.431053"
-       x2="18.031723"
-       y1="29.72571"
-       x1="18.097515"
-       id="linearGradient8814"
-       xlink:href="#linearGradient8820"
-       inkscape:collect="always" />
-    <linearGradient
-       id="linearGradient8686"
-       inkscape:collect="always">
-      <stop
-         id="stop8688"
-         offset="0"
-         style="stop-color:#fdb751;stop-opacity:1" />
-      <stop
-         id="stop8690"
-         offset="1"
-         style="stop-color:#ce5c00;stop-opacity:1" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient8808"
-       inkscape:collect="always">
-      <stop
-         id="stop8810"
-         offset="0"
-         style="stop-color:#6e3100;stop-opacity:1;" />
-      <stop
-         id="stop8812"
-         offset="1"
-         style="stop-color:#6e3100;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient8820">
-      <stop
-         style="stop-color:#522400;stop-opacity:1"
-         offset="0"
-         id="stop8822" />
-      <stop
-         style="stop-color:#6e3100;stop-opacity:0;"
-         offset="1"
-         id="stop8824" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient8848"
-       inkscape:collect="always">
-      <stop
-         id="stop8850"
-         offset="0"
-         style="stop-color:#000000;stop-opacity:1;" />
-      <stop
-         id="stop8852"
-         offset="1"
-         style="stop-color:#ffffff;stop-opacity:1" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient8860"
-       inkscape:collect="always">
-      <stop
-         id="stop8862"
-         offset="0"
-         style="stop-color:#3b1941;stop-opacity:1;" />
-      <stop
-         id="stop8864"
-         offset="1"
-         style="stop-color:#a949b9;stop-opacity:1" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient8868"
-       inkscape:collect="always">
-      <stop
-         id="stop8870"
-         offset="0"
-         style="stop-color:#3b1941;stop-opacity:1;" />
-      <stop
-         id="stop8872"
-         offset="1"
-         style="stop-color:#a646b7;stop-opacity:1" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient8876"
-       inkscape:collect="always">
-      <stop
-         id="stop8878"
-         offset="0"
-         style="stop-color:#9a5ba8;stop-opacity:1;" />
-      <stop
-         id="stop8880"
-         offset="1"
-         style="stop-color:#744380;stop-opacity:1" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient8884"
-       inkscape:collect="always">
-      <stop
-         id="stop8886"
-         offset="0"
-         style="stop-color:#9a5ba8;stop-opacity:1;" />
-      <stop
-         id="stop8888"
-         offset="1"
-         style="stop-color:#6b3e75;stop-opacity:1" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient8904"
-       inkscape:collect="always">
-      <stop
-         id="stop8906"
-         offset="0"
-         style="stop-color:#729fcf;stop-opacity:1;" />
-      <stop
-         id="stop8908"
-         offset="1"
-         style="stop-color:#25486d;stop-opacity:1" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient8732"
-       inkscape:collect="always">
-      <stop
-         id="stop8734"
-         offset="0"
-         style="stop-color:#6b3678;stop-opacity:1;" />
-      <stop
-         id="stop8736"
-         offset="1"
-         style="stop-color:#6b3678;stop-opacity:0;" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient8744">
-      <stop
-         style="stop-color:#7a1d90;stop-opacity:1"
-         offset="0"
-         id="stop8746" />
-      <stop
-         style="stop-color:#6b3678;stop-opacity:0;"
-         offset="1"
-         id="stop8748" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8732"
-       id="linearGradient8239"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.6883673,0,0,0.6819755,24.954518,-0.5239125)"
-       x1="4.0852318"
-       y1="40.416641"
-       x2="4.0852318"
-       y2="43.352409" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8744"
-       id="linearGradient8242"
-       gradientUnits="userSpaceOnUse"
-       x1="4.0852318"
-       y1="39.097038"
-       x2="4.0852318"
-       y2="44.321774"
-       gradientTransform="matrix(0.6883673,0,0,0.6819755,-0.5307196,-0.5239125)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8686"
-       id="linearGradient8248"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.7692307,0,0,0.8858131,-1.2307696,-7.0311428)"
-       x1="18.5"
-       y1="29.911009"
-       x2="19.985121"
-       y2="29.853554" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2816"
-       id="radialGradient8261"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.7193306,0,0,0.7337558,-19.889272,-7.8067639)"
-       cx="46.861629"
-       cy="38.01083"
-       fx="46.861629"
-       fy="38.01083"
-       r="16.390338" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6506"
-       id="linearGradient8263"
-       gradientUnits="userSpaceOnUse"
-       x1="15.645709"
-       y1="40.956318"
-       x2="15.645709"
-       y2="44.694569"
-       gradientTransform="matrix(0.6894969,0,0,0.6764991,-0.2876444,-0.2797398)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2834"
-       id="linearGradient8266"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.7068603,0,0,0.6774341,-33.464679,-11.987365)"
-       x1="58.611423"
-       y1="56.489136"
-       x2="58.611423"
-       y2="61.328545" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2826"
-       id="linearGradient8268"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.7068603,0,0,0.6774341,-33.464679,-11.987365)"
-       x1="60.8349"
-       y1="56.601696"
-       x2="60.8349"
-       y2="61.321751" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8868"
-       id="linearGradient8271"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.9347751,0,0,0.4640431,-5.8911763,1.552034)"
-       x1="12.409452"
-       y1="10.602999"
-       x2="16.140554"
-       y2="13.895189" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8860"
-       id="linearGradient8274"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.0342512,0,0,0.6819755,-6.0896085,-1.7917997)"
-       x1="13.061977"
-       y1="10.027351"
-       x2="16.545418"
-       y2="12.891665" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient6537"
-       id="linearGradient8277"
-       gradientUnits="userSpaceOnUse"
-       x1="30.5"
-       y1="1.7319652"
-       x2="30.5"
-       y2="22.781603"
-       gradientTransform="matrix(0.6666666,0,0,0.6587574,0.1666662,-0.1468935)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8904"
-       id="linearGradient8280"
-       gradientUnits="userSpaceOnUse"
-       x1="29.466667"
-       y1="6.8962817"
-       x2="42.829762"
-       y2="37.801281"
-       gradientTransform="matrix(0.6875001,0,0,0.6767003,-0.4687499,-0.5159997)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8876"
-       id="linearGradient8284"
-       gradientUnits="userSpaceOnUse"
-       x1="10.46875"
-       y1="25.3125"
-       x2="9.53125"
-       y2="19.6875" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8848"
-       id="linearGradient8286"
-       gradientUnits="userSpaceOnUse"
-       x1="10.48653"
-       y1="25.21174"
-       x2="9.7512932"
-       y2="23.675837" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8884"
-       id="linearGradient8288"
-       gradientUnits="userSpaceOnUse"
-       x1="23.881994"
-       y1="24.343237"
-       x2="24.973602"
-       y2="19.216713" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient8848"
-       id="linearGradient8290"
-       gradientUnits="userSpaceOnUse"
-       x1="10.498732"
-       y1="24.936121"
-       x2="9.6415968"
-       y2="23.675837" />
-    <filter
-       inkscape:collect="always"
-       id="filter9078">
-      <feGaussianBlur
-         inkscape:collect="always"
-         stdDeviation="0.29164334"
-         id="feGaussianBlur9080" />
-    </filter>
-    <filter
-       inkscape:collect="always"
-       id="filter9122"
-       x="-0.06288049"
-       width="1.125761"
-       y="-0.22385455"
-       height="1.4477091">
-      <feGaussianBlur
-         inkscape:collect="always"
-         stdDeviation="0.14573864"
-         id="feGaussianBlur9124" />
-    </filter>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="17.236022"
-     inkscape:cx="25.766946"
-     inkscape:cy="17.060038"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:grid-bbox="true"
-     inkscape:document-units="px"
-     inkscape:window-width="1432"
-     inkscape:window-height="840"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
-     showguides="true"
-     inkscape:guide-bbox="true"
-     inkscape:grid-points="false"
-     width="32px"
-     height="32px"
-     inkscape:object-bbox="true"
-     inkscape:snap-bbox="true"
-     inkscape:snap-nodes="false"
-     objecttolerance="10"
-     gridtolerance="10">
-    <inkscape:grid
-       type="xygrid"
-       id="grid8236"
-       visible="true"
-       enabled="true" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata4350">
-    <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">
-    <path
-       style="fill:#efefef;fill-opacity:1;stroke:url(#linearGradient8280);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 13.646486,0.49905075 C 11.351227,0.49905075 9.5000004,2.6044244 9.5000004,5.2148058 L 9.5000004,13.377503 C 9.5000004,15.987885 11.351227,18.470375 13.646486,18.470375 L 23.588406,18.470375 C 23.588406,18.470375 23.18568,20.245193 22.16985,21.5 C 25.739035,21.5 26.597376,19.058605 26.597376,18.460569 L 28.062501,18.470375 C 30.821257,18.470375 31.500001,15.984112 31.500001,13.377503 L 31.500001,5.2148058 C 31.500001,2.6044246 29.648775,0.49905075 27.353517,0.49905075 L 13.646486,0.49905075 z"
-       id="path8201"
-       sodipodi:nodetypes="cccccccccccc" />
-    <path
-       style="fill:url(#linearGradient8277);fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 13.854166,1.5 C 12.0438,1.5 10.5,3.1982064 10.5,5.4319585 L 10.5,13.37822 C 10.5,15.611972 12.0438,17.310178 13.854166,17.310178 L 23.854707,17.310178 C 24.222455,17.311225 24.520314,17.605549 24.521373,17.968936 C 24.521373,17.968936 24.644478,19.146784 24.232611,19.890811 C 25.286204,19.513694 25.854166,17.433696 25.854166,17.433696 C 25.969506,17.352067 26.108135,17.30881 26.249999,17.310178 L 27.833332,17.310178 C 28.997823,17.310178 29.543634,16.936466 29.9375,16.280871 C 30.331365,15.625274 30.5,14.590529 30.5,13.37822 L 30.5,5.4319585 C 30.5,3.1982066 28.956198,1.5 27.145833,1.5 L 13.854166,1.5 z"
-       id="path8203"
-       sodipodi:nodetypes="ccccccccccscccc" />
-    <rect
-       style="fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect8734"
-       width="4.8185711"
-       height="1.2686747"
-       x="10.237393"
-       y="17.486546"
-       rx="0.5602473"
-       ry="0.63433737" />
-    <path
-       style="fill:url(#linearGradient8274);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 6,4.9064736 C 7.9672058,3.6750483 11.311019,5.8704952 11.667854,7 L 8.951995,7 C 8.9089721,5.4016199 6,4.9064736 6,4.9064736 z"
-       id="path8205"
-       sodipodi:nodetypes="cccc" />
-    <path
-       style="fill:url(#linearGradient8271);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 5,6.7464464 C 6.2268113,5.1783371 10,6.3940033 10,7.5343215 L 7.134176,8 C 8.0531299,6.6379921 5,6.7464464 5,6.7464464 z"
-       id="path8207"
-       sodipodi:nodetypes="cccc" />
-    <path
-       style="fill:url(#linearGradient8266);fill-opacity:1;stroke:url(#linearGradient8268);stroke-width:0.99999988;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       d="M 11.067522,6.4999996 C 6.385278,6.4999996 2.2201068,10.234965 2.6293774,14.884611 C 3.5249724,25.059298 0.81309749,23.680419 0.50183135,28.323515 C 0.50183135,29.735371 1.1983857,30.406973 2.6874788,30.406973 C 3.5268674,30.406973 21.218061,30.505972 23.120221,30.505972 C 24.614613,30.505972 24.497868,29.110729 24.497868,29.110729 C 24.497868,27.305087 19.972479,25.789981 18.711123,24.464564 C 17.418686,23.109004 18.842985,18.271782 18.842985,18.271782 C 19.296299,17.235443 19.549846,16.087114 19.549846,14.884611 C 19.549846,10.210316 15.749766,6.4999996 11.067522,6.4999996 z"
-       id="path8209"
-       sodipodi:nodetypes="cscccszcsc" />
-    <path
-       style="opacity:0.55;fill:url(#radialGradient8261);fill-opacity:1;stroke:url(#linearGradient8263);stroke-width:0.99999982;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 10.916681,7.4999998 C 6.7712212,7.4999998 3.1789143,10.957612 3.5045886,15.167484 C 3.8937578,20.198131 3.7235067,21.924032 2.4866618,25.116843 C 0.50096208,28.326958 1.8660136,29.846841 3.4810518,29.846841 C 4.8163187,29.846841 17.103621,29.826924 21.120612,29.826924 C 21.925398,29.826924 23.294875,30.163902 23.294875,29.184825 C 23.294875,29.036588 23.157148,28.757863 22.777754,28.411859 C 22.398357,28.065856 21.830907,27.694319 21.204838,27.325529 C 20.578767,26.956739 19.909935,26.583672 19.308721,26.218308 C 18.707508,25.852945 18.174778,25.511888 17.800447,25.027522 C 17.379851,24.483292 17.186833,23.843536 17.14928,23.147336 C 17.111728,22.451136 17.206769,21.704215 17.28733,20.995566 C 17.448452,19.578267 17.800447,18.342413 17.800447,18.342413 C 17.810782,18.299429 17.825209,18.257467 17.84354,18.217067 C 18.248606,17.280213 18.468397,16.236634 18.468397,15.146094 C 18.468397,10.903994 15.069132,7.4999998 10.916681,7.4999998 z"
-       id="path8211"
-       sodipodi:nodetypes="cscccssssssscssc" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="1.0174263"
-       inkscape:original="M 9.96875 19 C 8.022221 19 6.9374998 21.081214 6.9375 23 C 6.9375 25.208 8.5222219 27 10.46875 27 C 11.889191 27 14 25.489251 14 23.28125 C 14 21.536852 11.915281 19 9.96875 19 z "
-       style="fill:url(#linearGradient8284);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
-       id="path8838"
-       d="M 9.96875,17.96875 C 8.6328774,17.96875 7.5286409,18.753017 6.875,19.71875 C 6.2213591,20.684483 5.9062499,21.848884 5.90625,23 C 5.90625,25.694817 7.8977844,28.03125 10.46875,28.03125 C 11.539674,28.03125 12.596335,27.527372 13.46875,26.71875 C 14.341165,25.910128 15.03125,24.709464 15.03125,23.28125 C 15.03125,22.003744 14.362496,20.808851 13.46875,19.8125 C 12.575004,18.816149 11.384009,17.96875 9.96875,17.96875 z"
-       transform="matrix(0.8767124,0,0,0.795031,-1.1780825,-4.2857136)" />
-    <path
-       style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 11,14.217567 C 11,15.873567 9.2097808,17 8.0022573,17 C 6.3475044,17 5.0045159,15.655999 5.0045159,14 C 5.0045159,12.56091 5.9251197,11 7.5798726,11 C 9.2346277,11 11,12.909268 11,14.217567 z"
-       id="path8214"
-       sodipodi:nodetypes="csssc" />
-    <path
-       sodipodi:type="arc"
-       style="fill:#6b1a80;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path8216"
-       sodipodi:cx="10.169642"
-       sodipodi:cy="24.3125"
-       sodipodi:rx="1.2410715"
-       sodipodi:ry="1.2946428"
-       d="M 11.410714,24.3125 A 1.2410715,1.2946428 0 1 1 8.928571,24.3125 A 1.2410715,1.2946428 0 1 1 11.410714,24.3125 z"
-       transform="matrix(1.2086331,0,0,1.1586209,-4.7913664,-13.66897)" />
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#linearGradient8286);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path5164"
-       sodipodi:cx="10.169642"
-       sodipodi:cy="24.3125"
-       sodipodi:rx="1.2410715"
-       sodipodi:ry="1.2946428"
-       d="M 11.410714,24.3125 A 1.2410715,1.2946428 0 1 1 8.928571,24.3125 A 1.2410715,1.2946428 0 1 1 11.410714,24.3125 z"
-       transform="matrix(0.4028777,0,0,0.3862069,3.4028779,5.1103446)" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="1.0250763"
-       inkscape:original="M 24.71875 19 C 23.921039 19.030682 23.197708 19.355158 22.78125 19.8125 C 21.639847 21.065961 21.758036 23.254972 23.0625 24.6875 C 24.196099 25.932389 26.077347 26.565958 27.21875 25.3125 C 28.360153 24.05904 28.061824 21.069247 27.03125 19.9375 C 26.379019 19.221236 25.516461 18.969318 24.71875 19 z "
-       style="fill:url(#linearGradient8288);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
-       id="path8846"
-       d="M 24.6875,17.96875 C 23.636213,18.009185 22.683031,18.409233 22.03125,19.125 C 20.466122,20.843786 20.678782,23.580894 22.3125,25.375 C 23.011072,26.142154 23.917332,26.724837 24.9375,26.9375 C 25.957668,27.150163 27.151401,26.89759 27.96875,26 C 28.842555,25.04041 29.039766,23.753975 28.96875,22.53125 C 28.897734,21.308525 28.565932,20.111716 27.78125,19.25 C 26.906665,18.289553 25.728905,17.928695 24.6875,17.96875 z"
-       transform="matrix(0.7484239,0,0,0.7741119,-1.6908405,-3.9075188)" />
-    <path
-       style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 18.387083,11.67906 C 17.509743,10.655828 16.082447,10.928433 15.522253,11.58178 C 14.754581,12.477109 14.843587,14.034201 15.720929,15.057435 C 16.483351,15.94664 17.737401,16.413013 18.505073,15.517687 C 19.272745,14.622358 19.080214,12.487451 18.387083,11.67906 z"
-       id="path8220"
-       sodipodi:nodetypes="csssc" />
-    <path
-       sodipodi:type="arc"
-       style="fill:#6b1a80;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path8222"
-       sodipodi:cx="10.169642"
-       sodipodi:cy="24.3125"
-       sodipodi:rx="1.2410715"
-       sodipodi:ry="1.2946428"
-       d="M 11.410714,24.3125 A 1.2410715,1.2946428 0 1 1 8.928571,24.3125 A 1.2410715,1.2946428 0 1 1 11.410714,24.3125 z"
-       transform="matrix(0.8057552,0,0,1.1586207,7.8057579,-13.668966)" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="0.45127434"
-       inkscape:original="M 13.4375 16 C 12.661218 16 12.51015 20.901969 8 18.0625 C 9.44341 21.526853 12.98614 22.15225 14.4375 23 C 15.186206 22.224914 17.79624 20.07567 18 17.6875 C 14.33672 20.56768 14.203099 16 13.4375 16 z "
-       style="fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter9078)"
-       id="path8294"
-       d="M 13.4375,15.5625 C 13.102994,15.5625 12.900231,15.762242 12.78125,15.9375 C 12.662269,16.112758 12.598408,16.320422 12.5,16.53125 C 12.303184,16.952907 12.081096,17.438832 11.78125,17.8125 C 11.481404,18.186168 11.117515,18.452218 10.59375,18.5 C 10.069985,18.547782 9.3270345,18.365572 8.25,17.6875 C 8.0823108,17.580065 7.8640254,17.595242 7.7128173,17.724849 C 7.5616092,17.854456 7.5132259,18.067852 7.59375,18.25 C 9.1305666,21.93854 12.960094,22.63981 14.21875,23.375 C 14.390432,23.472658 14.605671,23.447336 14.75,23.3125 C 15.08711,22.963512 15.981008,22.217382 16.78125,21.25 C 17.581492,20.282618 18.32272,19.06403 18.4375,17.71875 C 18.441912,17.546498 18.34786,17.386764 18.195094,17.30706 C 18.042327,17.227356 17.857509,17.241591 17.71875,17.34375 C 16.849538,18.02715 16.256503,18.203898 15.875,18.1875 C 15.493497,18.171102 15.246785,17.984965 15,17.65625 C 14.753215,17.327535 14.557786,16.863539 14.375,16.46875 C 14.283607,16.271356 14.181058,16.105684 14.0625,15.9375 C 13.943942,15.769316 13.757564,15.5625 13.4375,15.5625 z" />
-    <path
-       sodipodi:type="inkscape:offset"
-       inkscape:radius="0.28790623"
-       inkscape:original="M 11.5 17 C 11.223 17 11 17.223 11 17.5 C 11 17.777 11.223 18 11.5 18 L 15.5 18 C 15.777 18 16 17.777 16 17.5 C 16 17.223 15.777 17 15.5 17 L 11.5 17 z "
-       style="fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter9122)"
-       id="path9084"
-       d="M 11.5,16.71875 C 11.06848,16.71875 10.71875,17.06848 10.71875,17.5 C 10.71875,17.93152 11.06848,18.28125 11.5,18.28125 L 15.5,18.28125 C 15.93152,18.28125 16.28125,17.93152 16.28125,17.5 C 16.28125,17.06848 15.93152,16.71875 15.5,16.71875 L 11.5,16.71875 z" />
-    <rect
-       style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="rect8226"
-       width="5"
-       height="1"
-       x="11"
-       y="17"
-       rx="0.5"
-       ry="0.5" />
-    <path
-       style="fill:url(#linearGradient8248);fill-opacity:1;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 8,18.051818 C 12.51015,20.891288 12.65519,16 13.431472,16 C 14.197071,16 14.33672,20.582306 18,17.702126 C 17.79624,20.090296 15.178764,22.224914 14.430058,23 C 12.978698,22.15225 9.44341,21.516171 8,18.051818 z"
-       id="rect5187"
-       sodipodi:nodetypes="czccc" />
-    <path
-       sodipodi:type="arc"
-       style="opacity:0.61111108999999997;fill:url(#linearGradient8814);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;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;enable-background:accumulate"
-       id="path8806"
-       sodipodi:cx="18.097515"
-       sodipodi:cy="29.72571"
-       sodipodi:rx="0.28726214"
-       sodipodi:ry="0.6408155"
-       d="M 18.384777,29.72571 A 0.28726214,0.6408155 0 1 1 17.810253,29.72571 A 0.28726214,0.6408155 0 1 1 18.384777,29.72571 z"
-       transform="matrix(-1.0945739,0.462613,0.6067759,0.7520251,16.272223,-11.226626)" />
-    <path
-       sodipodi:type="arc"
-       style="opacity:0.61111108999999997;fill:url(#linearGradient8818);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;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;enable-background:accumulate"
-       id="path8816"
-       sodipodi:cx="18.097515"
-       sodipodi:cy="29.72571"
-       sodipodi:rx="0.28726214"
-       sodipodi:ry="0.6408155"
-       d="M 18.384777,29.72571 A 0.28726214,0.6408155 0 1 1 17.810253,29.72571 A 0.28726214,0.6408155 0 1 1 18.384777,29.72571 z"
-       transform="matrix(1.0945739,0.462613,-0.606776,0.7520251,10.727779,-11.226626)" />
-    <path
-       sodipodi:type="arc"
-       style="fill:url(#linearGradient8290);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path8856"
-       sodipodi:cx="10.169642"
-       sodipodi:cy="24.3125"
-       sodipodi:rx="1.2410715"
-       sodipodi:ry="1.2946428"
-       d="M 11.410714,24.3125 A 1.2410715,1.2946428 0 1 1 8.928571,24.3125 A 1.2410715,1.2946428 0 1 1 11.410714,24.3125 z"
-       transform="matrix(0.4028777,0,0,0.3862069,11.402878,5.110345)" />
-    <path
-       style="opacity:0.61111109;fill:url(#linearGradient8242);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-       d="M 1.79252,30.122362 C 0.67392318,29.866621 0.24369361,27.479706 2.3518185,23.856712 C 3.1851311,27.272027 7.0413207,29.73875 7.0413207,29.73875 L 1.79252,30.122362 z"
-       id="rect7959"
-       sodipodi:nodetypes="cccc" />
-    <path
-       style="opacity:0.61111109;fill:url(#linearGradient8239);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
-       d="M 22.631278,30.122362 C 23.749876,29.866621 24.782427,28.50267 19.275488,25.774768 C 19.517749,28.593354 17.382477,29.73875 17.382477,29.73875 L 22.631278,30.122362 z"
-       id="path8740"
-       sodipodi:nodetypes="cccc" />
-  </g>
-</svg>
Binary file pidgin/pixmaps/icons/hicolor/48x48/apps/pidgin.png has changed