changeset 20641:707cd521188a

propagate from branch 'im.pidgin.pidgin' (head e67a54b3bf4349b6e65a46f749626a122c6afb22) to branch 'im.pidgin.sadrul.currentmedia' (head d3dc349e84591135f4f729a4e169ca65e48fc6e2)
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Fri, 21 Sep 2007 13:27:41 +0000
parents 485a0bffe4f5 (current diff) ec11c8ec0305 (diff)
children ba6cd9c25853
files libpurple/protocols/jabber/google.c pidgin/gtkblist.c
diffstat 39 files changed, 412 insertions(+), 235 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Fri Sep 21 02:11:29 2007 +0000
+++ b/ChangeLog	Fri Sep 21 13:27:41 2007 +0000
@@ -34,6 +34,7 @@
 	* Pidgin's display is now saved with the command line for session
 	  restoration.  (David Mohr)
 	* You should no longer lose proxy settings when Pidgin is restarted.
+	* ICQ Birthday notifications are shown as buddy list emblems
 
 Version 2.2.0 (09/13/2007):
 	http://developer.pidgin.im/query?status=closed&milestone=2.2.0
--- a/doc/funniest_home_convos.txt	Fri Sep 21 02:11:29 2007 +0000
+++ b/doc/funniest_home_convos.txt	Fri Sep 21 13:27:41 2007 +0000
@@ -487,3 +487,21 @@
             established that
 19:03 <user> its functioning just fine
 
+--
+
+17:12 <a_user> I think I foundage a bug
+17:13 <a_user> I don't think blocking works correctly for the AIM protocol
+17:13 <a_user> because a girl attempted to block me in pidgin and I can still
+               talk to her
+17:14 <a_user> [screen name expunged]: I already told you yesterday. You don't
+               need me to ease your mind, you want me to change MY mind. Well,
+               you're out of luck. I don't know how you're still messaging me,
+               because I already blocked you, but I demand you stop immediately.
+               For now on, I will save every message that you send me as
+               evidence for the next time I decide to call the police. I did
+               call them yesterday, but I didn't have evidence. The more you
+               message me now, the more you're digging you're own grave, so I
+               advice you to stop.
+17:14 <a_user> see?
+17:16 <sadrul> I think blocking in pidgin not working is not your biggest
+               problem here.
--- a/libpurple/ft.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/libpurple/ft.c	Fri Sep 21 13:27:41 2007 +0000
@@ -67,6 +67,7 @@
 	xfer->ui_ops  = purple_xfers_get_ui_ops();
 	xfer->message = NULL;
 	xfer->current_buffer_size = FT_INITIAL_BUFFER_SIZE;
+	xfer->fd = -1;
 
 	ui_ops = purple_xfer_get_ui_ops(xfer);
 
--- a/libpurple/notify.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/libpurple/notify.c	Fri Sep 21 13:27:41 2007 +0000
@@ -150,8 +150,6 @@
 {
 	PurpleNotifyUiOps *ops;
 
-	g_return_val_if_fail(count != 0, NULL);
-
 	if (count == 1) {
 		return purple_notify_email(handle,
 								 (subjects == NULL ? NULL : *subjects),
@@ -506,7 +504,7 @@
 	g_return_if_fail(user_info_entry != NULL);
 	
 	g_free(user_info_entry->label);
-	g_free(user_info_entry->value);	
+	g_free(user_info_entry->value);
 	PURPLE_DBUS_UNREGISTER_POINTER(user_info_entry);
 	g_free(user_info_entry);
 }
@@ -568,7 +566,7 @@
 		if (user_info_entry->label && user_info_entry->value)
 			g_string_append(text, ": ");
 		if (user_info_entry->value)
-			g_string_append(text, user_info_entry->value);			
+			g_string_append(text, user_info_entry->value);
 
 		/* Display a section break as a horizontal line */
 		if (user_info_entry->type == PURPLE_NOTIFY_USER_INFO_ENTRY_SECTION_BREAK)
--- a/libpurple/protocols/jabber/buddy.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/libpurple/protocols/jabber/buddy.c	Fri Sep 21 13:27:41 2007 +0000
@@ -1656,8 +1656,10 @@
 
 	if(!strcmp(ns, "jabber:iq:last")) {
 		if(!strcmp(jbr->client.name, "Trillian")) {
-			if(!strcmp(jbr->client.version, "3.1.0.121")) {
-				/* verified by nwalp 2007/05/09 */
+			/* verified by nwalp 2007/05/09 */
+			if(!strcmp(jbr->client.version, "3.1.0.121") ||
+					/* verified by nwalp 2007/09/19 */
+					!strcmp(jbr->client.version, "3.1.7.0")) {
 				return TRUE;
 			}
 		}
--- a/libpurple/protocols/jabber/google.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/libpurple/protocols/jabber/google.c	Fri Sep 21 13:27:41 2007 +0000
@@ -61,14 +61,9 @@
 	to = xmlnode_get_attrib(packet, "to");
 	default_tos[0] = jabber_get_bare_jid(to);
 
-	if (count == 0) {
-		purple_notify_emails(js->gc, count, FALSE, NULL, NULL, (const char**) default_tos, NULL, NULL, NULL);
-		g_free(default_tos[0]);
-		return;
-	}
+	message = xmlnode_get_child(child, "mail-thread-info");
 
-	message = xmlnode_get_child(child, "mail-thread-info");
-	if (!message) {
+	if (count == 0 || !message) {
 		purple_notify_emails(js->gc, count, FALSE, NULL, NULL, (const char**) default_tos, NULL, NULL, NULL);
 		g_free(default_tos[0]);
 		return;
@@ -127,7 +122,7 @@
 	if (i>0)
 		purple_notify_emails(js->gc, count, count == i, (const char**) subjects, froms, tos,
 				urls, NULL, NULL);
-	else 
+	else
 		purple_notify_emails(js->gc, count, FALSE, NULL, NULL, (const char**) default_tos, NULL, NULL, NULL);
 
 
@@ -257,7 +252,8 @@
 
 	if (grt && (*grt == 'H' || *grt == 'h')) {
 		PurpleBuddy *buddy = purple_find_buddy(account, jid_norm);
-		purple_blist_remove_buddy(buddy);
+		if (buddy)
+			purple_blist_remove_buddy(buddy);
 		g_free(jid_norm);
 		return FALSE;
 	}
--- a/libpurple/protocols/jabber/iq.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/libpurple/protocols/jabber/iq.c	Fri Sep 21 13:27:41 2007 +0000
@@ -255,7 +255,7 @@
 	if(type && !strcmp(type, "get")) {
 		GHashTable *ui_info;
 		const char *ui_name = NULL, *ui_version = NULL;
-
+#if 0
 		if(!purple_prefs_get_bool("/plugins/prpl/jabber/hide_os")) {
 			struct utsname osinfo;
 
@@ -263,7 +263,7 @@
 			os = g_strdup_printf("%s %s %s", osinfo.sysname, osinfo.release,
 					osinfo.machine);
 		}
-
+#endif
 		from = xmlnode_get_attrib(packet, "from");
 		id = xmlnode_get_attrib(packet, "id");
 
--- a/libpurple/protocols/msn/directconn.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/libpurple/protocols/msn/directconn.c	Fri Sep 21 13:27:41 2007 +0000
@@ -418,6 +418,15 @@
 	}
 }
 
+static void
+directconn_connect_cb(gpointer data, gint source, const gchar *error_message)
+{
+	if (error_message)
+		purple_debug_error("msn", "Error making direct connection: %s\n", error_message);
+
+	connect_cb(data, source, PURPLE_INPUT_READ);
+}
+
 gboolean
 msn_directconn_connect(MsnDirectConn *directconn, const char *host, int port)
 {
@@ -437,14 +446,9 @@
 #endif
 
 	directconn->connect_data = purple_proxy_connect(NULL, session->account,
-			host, port, connect_cb, directconn);
+			host, port, directconn_connect_cb, directconn);
 
-	if (directconn->connect_data != NULL)
-	{
-		return TRUE;
-	}
-	else
-		return FALSE;
+	return (directconn->connect_data != NULL);
 }
 
 void
--- a/libpurple/protocols/msn/httpconn.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/libpurple/protocols/msn/httpconn.c	Fri Sep 21 13:27:41 2007 +0000
@@ -663,6 +663,8 @@
 	httpconn->tx_buf = purple_circ_buffer_new(MSN_BUF_LEN);
 	httpconn->tx_handler = 0;
 
+	httpconn->fd = -1;
+
 	return httpconn;
 }
 
--- a/libpurple/protocols/msn/servconn.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/libpurple/protocols/msn/servconn.c	Fri Sep 21 13:27:41 2007 +0000
@@ -53,6 +53,8 @@
 	servconn->tx_buf = purple_circ_buffer_new(MSN_BUF_LEN);
 	servconn->tx_handler = 0;
 
+	serconn->fd = -1;
+
 	return servconn;
 }
 
--- a/libpurple/protocols/msn/session.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/libpurple/protocols/msn/session.c	Fri Sep 21 13:27:41 2007 +0000
@@ -269,7 +269,7 @@
 
 	/* The core used to use msn_add_buddy to add all buddies before
 	 * being logged in. This no longer happens, so we manually iterate
-	 * over the whole buddy list to identify sync issues. 
+	 * over the whole buddy list to identify sync issues.
 	 */
 	for (gnode = purple_get_blist()->root; gnode; gnode = gnode->next) {
 		PurpleGroup *group = (PurpleGroup *)gnode;
@@ -342,6 +342,8 @@
 		case MSN_ERROR_SIGN_OTHER:
 			gc->wants_to_die = TRUE;
 			msg = g_strdup(_("You have signed on from another location."));
+			if (!purple_account_get_remember_password(session->account))
+				purple_account_set_password(session->account, NULL);
 			break;
 		case MSN_ERROR_SERV_UNAVAILABLE:
 			msg = g_strdup(_("The MSN servers are temporarily "
--- a/libpurple/protocols/msn/userlist.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/libpurple/protocols/msn/userlist.c	Fri Sep 21 13:27:41 2007 +0000
@@ -133,6 +133,7 @@
 		return FALSE;
 }
 
+#if 0
 static const char*
 get_store_name(MsnUser *user)
 {
@@ -160,6 +161,7 @@
 
 	return store_name;
 }
+#endif
 
 /**************************************************************************
  * Server functions
--- a/libpurple/protocols/myspace/myspace.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/libpurple/protocols/myspace/myspace.c	Fri Sep 21 13:27:41 2007 +0000
@@ -1784,11 +1784,13 @@
 	/* Destroy session if fatal. */
 	if (msim_msg_get(msg, "fatal")) {
 		purple_debug_info("msim", "fatal error, closing\n");
-		if (err == 260) {
-			/* Incorrect password */
-			session->gc->wants_to_die = TRUE;
-			if (!purple_account_get_remember_password(session->account))
-				purple_account_set_password(session->account, NULL);
+		switch (err) {
+			case 260: /* Incorrect password */
+			case 6: /* Logged in elsewhere */
+				session->gc->wants_to_die = TRUE;
+				if (!purple_account_get_remember_password(session->account))
+					purple_account_set_password(session->account, NULL);
+				break;
 		}
 		purple_connection_error(session->gc, full_errmsg);
 	} else {
--- a/libpurple/protocols/novell/novell.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/libpurple/protocols/novell/novell.c	Fri Sep 21 13:27:41 2007 +0000
@@ -130,6 +130,8 @@
 		if (ret_code == NMERR_AUTHENTICATION_FAILED ||
 			ret_code == NMERR_CREDENTIALS_MISSING ||
 			ret_code == NMERR_PASSWORD_INVALID) {
+			if (!purple_account_get_remember_password(gc->account))
+				purple_account_set_password(gc->account, NULL);
 			gc->wants_to_die = TRUE;
 		}
 		purple_connection_error(gc, err);
@@ -2004,11 +2006,14 @@
 _evt_user_disconnect(NMUser * user, NMEvent * event)
 {
 	PurpleConnection *gc;
-
-	gc = purple_account_get_connection((PurpleAccount *) user->client_data);
+	PurpleAccount *account = user->client_data;
+
+	gc = purple_account_get_connection(account);
 	if (gc)
 	{
 		gc->wants_to_die = TRUE; /* we don't want to reconnect in this case */
+		if (!purple_account_get_remember_password(account))
+			purple_account_set_password(account, NULL);
 		purple_connection_error(gc, _("You have been logged out because you"
 									" logged in at another workstation."));
 	}
@@ -2799,7 +2804,7 @@
 	const char *text = NULL;
 
 	if (buddy == NULL)
-		return; 
+		return;
 
 	gc = purple_account_get_connection(buddy->account);
 	if (gc == NULL || (user = gc->proto_data) == NULL)
--- a/libpurple/protocols/oscar/flap_connection.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/libpurple/protocols/oscar/flap_connection.c	Fri Sep 21 13:27:41 2007 +0000
@@ -382,6 +382,8 @@
 		gchar *tmp;
 		if (conn->disconnect_code == 0x0001) {
 			tmp = g_strdup(_("You have signed on from another location."));
+			if (!purple_account_get_remember_password(account))
+				purple_account_set_password(account, NULL);
 			od->gc->wants_to_die = TRUE;
 		} else if (conn->disconnect_reason == OSCAR_DISCONNECT_REMOTE_CLOSED)
 			tmp = g_strdup(_("Server closed the connection."));
--- a/libpurple/protocols/oscar/oscar.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/libpurple/protocols/oscar/oscar.c	Fri Sep 21 13:27:41 2007 +0000
@@ -5507,6 +5507,8 @@
 			return "hiptop";
 		if (userinfo->capabilities & OSCAR_CAPABILITY_SECUREIM)
 			return "secure";
+		if (userinfo->icqinfo.status & AIM_ICQ_STATE_BIRTHDAY)
+			return "birthday";
 	}
 	return NULL;
 }
--- a/libpurple/protocols/qq/login_logout.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/libpurple/protocols/qq/login_logout.c	Fri Sep 21 13:27:41 2007 +0000
@@ -480,6 +480,8 @@
 	switch (ret) {
 	case QQ_LOGIN_REPLY_PWD_ERROR:
 		gc->wants_to_die = TRUE;
+		if (!purple_account_get_remember_password(gc->account))
+			purple_account_set_password(gc->account, NULL);
 		purple_connection_error(gc, _("Incorrect password."));
 		break;
 	case QQ_LOGIN_REPLY_MISC_ERROR:
--- a/libpurple/protocols/simple/simple.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/libpurple/protocols/simple/simple.c	Fri Sep 21 13:27:41 2007 +0000
@@ -695,7 +695,7 @@
 static void do_register_exp(struct simple_account_data *sip, int expire) {
 	char *uri, *to, *contact, *hdr;
 
-	/* Set our default expiration to 900, 
+	/* Set our default expiration to 900,
 	 * as done in the initialization of the simple_account_data
 	 * structure.
 	 */
@@ -1042,6 +1042,8 @@
 				if(sip->registrar.retries > SIMPLE_REGISTER_RETRY_MAX) {
 					purple_debug_info("simple", "Setting wants_to_die to true.\n");
 					sip->gc->wants_to_die = TRUE;
+					if (!purple_account_get_remember_password(sip->gc->account))
+						purple_account_set_password(sip->gc->account, NULL);
 					purple_connection_error(sip->gc, _("Incorrect password."));
 					return TRUE;
 				}
--- a/libpurple/protocols/yahoo/yahoo.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/libpurple/protocols/yahoo/yahoo.c	Fri Sep 21 13:27:41 2007 +0000
@@ -202,6 +202,8 @@
 
 	if (pkt->service == YAHOO_SERVICE_LOGOFF && pkt->status == -1) {
 		gc->wants_to_die = TRUE;
+		if (!purple_account_get_remember_password(account))
+			purple_account_set_password(account, NULL);
 		purple_connection_error(gc, _("You have signed on from another location."));
 		return;
 	}
@@ -4087,12 +4089,12 @@
 {
 	return TRUE;
 }
-	
+
 gboolean yahoo_send_attention(PurpleConnection *gc, const char *username, guint type)
 {
 	PurpleConversation *c;
 
-	c = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, 
+	c = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM,
 			username, gc->account);
 
 	g_return_val_if_fail(c != NULL, FALSE);
@@ -4117,7 +4119,7 @@
 		attn->incoming_description = _("%s has buzzed you!");
 		attn->outgoing_description = _("Buzzing %s...");
 		list = g_list_append(list, attn);
-	} 
+	}
 
 	return list;
 }
--- a/libpurple/protocols/yahoo/yahoo_aliases.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/libpurple/protocols/yahoo/yahoo_aliases.c	Fri Sep 21 13:27:41 2007 +0000
@@ -45,7 +45,7 @@
  */
 struct callback_data {
 	PurpleConnection *gc;
-	const char *id;
+	char *id;
 };
 
 
@@ -56,11 +56,16 @@
 static void
 yahoo_fetch_aliases_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data,const gchar *url_text, size_t len, const gchar *error_message)
 {
+	struct callback_data *cb = user_data;
+	PurpleConnection *gc = cb->gc;
+	struct yahoo_data *yd = gc->proto_data;
+
+	yd->url_datas = g_slist_remove(yd->url_datas, url_data);
+
 	if (len == 0) {
 		purple_debug_info("yahoo","No Aliases to process\n");
 	} else {
 		const char *yid, *full_name, *nick_name, *alias, *id, *fn, *ln, *nn;
-		struct callback_data *cb = user_data;
 		PurpleBuddy *b = NULL;
 		xmlnode *item, *contacts;
 
@@ -123,8 +128,9 @@
 			}
 		}
 		xmlnode_free(contacts);
-		g_free(cb);
 	}
+	g_free(cb->id);
+	g_free(cb);
 }
 
 void
@@ -134,6 +140,7 @@
 	struct callback_data *cb;
 	char *url, *request, *webpage, *webaddress, *strtmp;
 	int inttmp;
+	PurpleUtilFetchUrlData *url_data;
 
 	/* Using callback_data so I have access to gc in the callback function */
 	cb = g_new0(struct callback_data, 1);
@@ -150,7 +157,12 @@
 				 webpage, yd->cookie_t,yd->cookie_y, webaddress);
 
 	/* We have a URL and some header information, let's connect and get some aliases  */
-	purple_util_fetch_url_request(url, FALSE, NULL, TRUE, request, FALSE, yahoo_fetch_aliases_cb, cb);
+	url_data = purple_util_fetch_url_request(url, FALSE, NULL, TRUE, request, FALSE, yahoo_fetch_aliases_cb, cb);
+	if (url_data != NULL) {
+		yd->url_datas = g_slist_prepend(yd->url_datas, url_data);
+	} else {
+		g_free(cb);
+	}
 
 	g_free(url);
 	g_free(request);
@@ -165,6 +177,11 @@
 {
 	xmlnode *node, *result;
 	struct callback_data *cb = user_data;
+	PurpleConnection *gc = cb->gc;
+	struct yahoo_data *yd;
+
+	yd = gc->proto_data;
+	yd->url_datas = g_slist_remove(yd->url_datas, url_data);
 
 	result = xmlnode_from_str(url_text, -1);
 
@@ -184,6 +201,7 @@
 		purple_debug_info("yahoo", "Alias update failed (No contact record returned)\n");
 	}
 
+	g_free(cb->id);
 	g_free(cb);
 	xmlnode_free(result);
 }
@@ -197,6 +215,7 @@
 	int inttmp;
 	struct callback_data *cb;
 	PurpleBuddy *buddy;
+	PurpleUtilFetchUrlData *url_data;
    
 	g_return_if_fail(alias!= NULL);
 	g_return_if_fail(who!=NULL);
@@ -216,6 +235,7 @@
 	/* Using callback_data so I have access to gc in the callback function */
 	cb = g_new0(struct callback_data, 1);
 	cb->id = g_strdup(yu->id);
+	cb->gc = gc;
 
 	/*  Build all the info to make the web request */
 	url = g_strdup(YAHOO_ALIAS_UPDATE_URL);
@@ -236,7 +256,13 @@
 			 	  strlen(content), content);
 
 	/* We have a URL and some header information, let's connect and update the alias  */
-	purple_util_fetch_url_request(url, FALSE, NULL, TRUE, request, FALSE, yahoo_update_alias_cb, cb);
+	url_data = purple_util_fetch_url_request(url, FALSE, NULL, TRUE, request, FALSE, yahoo_update_alias_cb, cb);
+	if (url_data != NULL) {
+		yd->url_datas = g_slist_prepend(yd->url_datas, url_data);
+	} else {
+		g_free(cb->id);
+		g_free(cb);
+	}
 
 	g_free(content);
 	g_free(url);
--- a/libpurple/prpl.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/libpurple/prpl.c	Fri Sep 21 13:27:41 2007 +0000
@@ -226,6 +226,9 @@
 	{
 		if (!purple_account_is_disconnected(account))
 			purple_account_disconnect(account);
+		/* Clear out the unsaved password if we're already disconnected and we switch to offline status */
+		else if (!purple_account_get_remember_password(account))
+			purple_account_set_password(account, NULL);
 		return;
 	}
 
--- a/libpurple/util.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/libpurple/util.c	Fri Sep 21 13:27:41 2007 +0000
@@ -1526,7 +1526,8 @@
 					while(*p && *p != '>') {
 						if(!g_ascii_strncasecmp(p, "href=", strlen("href="))) {
 							const char *q = p + strlen("href=");
-							g_string_free(url, TRUE);
+							if (url)
+								g_string_free(url, TRUE);
 							url = g_string_new("");
 							cdata = g_string_new("");
 							if(*q == '\'' || *q == '\"')
@@ -3853,6 +3854,7 @@
 	gfud->full = full;
 	gfud->request = g_strdup(request);
 	gfud->include_headers = include_headers;
+	gfud->fd = -1;
 
 	purple_url_parse(url, &gfud->website.address, &gfud->website.port,
 				   &gfud->website.page, &gfud->website.user, &gfud->website.passwd);
--- a/libpurple/win32/win32dep.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/libpurple/win32/win32dep.c	Fri Sep 21 13:27:41 2007 +0000
@@ -43,7 +43,6 @@
 /*
  *  DEFINES & MACROS
  */
-#define WIN32_PROXY_REGKEY "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings"
 
 /* For shfolder.dll */
 typedef HRESULT (CALLBACK* LPFNSHGETFOLDERPATHA)(HWND, int, HANDLE, DWORD, LPSTR);
@@ -57,9 +56,6 @@
 
 static HINSTANCE libpurpledll_hInstance = 0;
 
-static HANDLE proxy_change_event = NULL;
-static HKEY proxy_regkey = NULL;
-
 /*
  *  PUBLIC CODE
  */
@@ -431,86 +427,93 @@
 	return result;
 }
 
-static void wpurple_refresh_proxy(void) {
-	gboolean set_proxy = FALSE;
-	DWORD enabled = 0;
+/* the winapi headers don't yet have winhttp.h, so we use the struct from msdn directly */
+typedef struct {
+  BOOL fAutoDetect;
+  LPWSTR lpszAutoConfigUrl;
+  LPWSTR lpszProxy;
+  LPWSTR lpszProxyBypass;
+} WINHTTP_CURRENT_USER_IE_PROXY_CONFIG;
 
-	wpurple_read_reg_dword(HKEY_CURRENT_USER, WIN32_PROXY_REGKEY,
-				"ProxyEnable", &enabled);
-
-	if (enabled & 1) {
-		char *c = NULL;
-		char *tmp = wpurple_read_reg_string(HKEY_CURRENT_USER, WIN32_PROXY_REGKEY,
-				"ProxyServer");
+typedef BOOL (CALLBACK* LPFNWINHTTPGETIEPROXYCONFIG)(/*IN OUT*/ WINHTTP_CURRENT_USER_IE_PROXY_CONFIG* pProxyConfig);
 
-		/* There are proxy settings for several protocols */
-		if (tmp && (c = g_strstr_len(tmp, strlen(tmp), "http="))) {
-			char *d;
-			c += strlen("http=");
-			d = strchr(c, ';');
-			if (d)
-				*d = '\0';
-			/* c now points the proxy server (and port) */
+gboolean wpurple_check_for_proxy_changes(void) {
+	static gboolean loaded = FALSE;
+	static LPFNWINHTTPGETIEPROXYCONFIG MyWinHttpGetIEProxyConfig = NULL;
 
-		/* There is only a global proxy */
-		} else if (tmp && strlen(tmp) > 0 && !strchr(tmp, ';')) {
-			c = tmp;
+	WINHTTP_CURRENT_USER_IE_PROXY_CONFIG ie_proxy_config;
+	char *tmp = NULL, *c = NULL;
+	gboolean changed = FALSE;
+
+	if (!loaded) {
+		loaded = TRUE;
+
+		if (getenv("HTTP_PROXY") || getenv("http_proxy") || getenv("HTTPPROXY")) {
+			purple_debug_info("wpurple", "HTTP_PROXY env. var already set.  Ignoring win32 Internet Settings.\n");
+			return FALSE;
 		}
 
-		if (c) {
+		MyWinHttpGetIEProxyConfig = (LPFNWINHTTPGETIEPROXYCONFIG)
+			wpurple_find_and_loadproc("winhttp.dll", "WinHttpGetIEProxyConfigForCurrentUser");
+		if (!MyWinHttpGetIEProxyConfig)
+			purple_debug_info("wpurple", "Unable to read Windows Proxy Settings.\n");
+	}
+
+	if (!MyWinHttpGetIEProxyConfig)
+		return FALSE;
+
+	ZeroMemory(&ie_proxy_config, sizeof(ie_proxy_config));
+	if (!MyWinHttpGetIEProxyConfig(&ie_proxy_config)) {
+		purple_debug_error("wpurple", "Error reading Windows Proxy Settings(%u).\n", GetLastError());
+		return FALSE;
+	}
+
+	/* We can't do much if it is autodetect*/
+	if (ie_proxy_config.fAutoDetect)
+		purple_debug_error("wpurple", "Windows Proxy Settings set to autodetect (not supported).\n");
+	else if (ie_proxy_config.lpszProxy) {
+		tmp = g_utf16_to_utf8(ie_proxy_config.lpszProxy, -1,
+						NULL, NULL, NULL);
+		/* We can't do anything about the bypass list, as we don't have the url */
+	} else
+		purple_debug_info("wpurple", "No Windows Proxy Set.\n");
+
+	if (ie_proxy_config.lpszAutoConfigUrl)
+		GlobalFree(ie_proxy_config.lpszAutoConfigUrl);
+	if (ie_proxy_config.lpszProxy)
+		GlobalFree(ie_proxy_config.lpszProxy);
+	if (ie_proxy_config.lpszProxyBypass)
+		GlobalFree(ie_proxy_config.lpszProxyBypass);
+
+	/* There are proxy settings for several protocols */
+	if (tmp && (c = g_strstr_len(tmp, strlen(tmp), "http="))) {
+		char *d;
+		c += strlen("http=");
+		d = strchr(c, ';');
+		if (d)
+			*d = '\0';
+		/* c now points the proxy server (and port) */
+	/* There is only a global proxy */
+	} else if (tmp && strlen(tmp) > 0 && !strchr(tmp, ';')) {
+		c = tmp;
+	}
+
+	if (c && *c) {
+		const char *current = g_getenv("HTTP_PROXY");
+		if (!current || strcmp(current, c)) {
 			purple_debug_info("wpurple", "Setting HTTP Proxy: 'http://%s'\n", c);
 			g_setenv("HTTP_PROXY", c, TRUE);
-			set_proxy = TRUE;
+			changed = TRUE;
 		}
-		g_free(tmp);
 	}
-
 	/* If there previously was a proxy set and there isn't one now, clear it */
-	if (getenv("HTTP_PROXY") && !set_proxy) {
+	else if (getenv("HTTP_PROXY")) {
 		purple_debug_info("wpurple", "Clearing HTTP Proxy\n");
 		g_unsetenv("HTTP_PROXY");
-	}
-}
-
-static void watch_for_proxy_changes(void) {
-	LONG rv;
-	DWORD filter = REG_NOTIFY_CHANGE_NAME |
-			REG_NOTIFY_CHANGE_LAST_SET;
-
-	if (!proxy_regkey &&
-			!(proxy_regkey = _reg_open_key(HKEY_CURRENT_USER,
-				WIN32_PROXY_REGKEY, KEY_NOTIFY))) {
-		return;
-	}
-
-	if (!(proxy_change_event = CreateEvent(NULL, TRUE, FALSE, NULL))) {
-		char *errmsg = g_win32_error_message(GetLastError());
-		purple_debug_error("wpurple", "Unable to watch for proxy changes: %s\n", errmsg);
-		g_free(errmsg);
-		return;
+		changed = TRUE;
 	}
 
-	rv = RegNotifyChangeKeyValue(proxy_regkey, TRUE, filter, proxy_change_event, TRUE);
-	if (rv != ERROR_SUCCESS) {
-		char *errmsg = g_win32_error_message(rv);
-		purple_debug_error("wpurple", "Unable to watch for proxy changes: %s\n", errmsg);
-		g_free(errmsg);
-		CloseHandle(proxy_change_event);
-		proxy_change_event = NULL;
-	}
-
-}
-
-gboolean wpurple_check_for_proxy_changes(void) {
-	gboolean changed = FALSE;
-
-	if (proxy_change_event && WaitForSingleObject(proxy_change_event, 0) == WAIT_OBJECT_0) {
-		CloseHandle(proxy_change_event);
-		proxy_change_event = NULL;
-		changed = TRUE;
-		wpurple_refresh_proxy();
-		watch_for_proxy_changes();
-	}
+	g_free(tmp);
 
 	return changed;
 }
@@ -555,15 +558,6 @@
 	if (!g_thread_supported())
 		g_thread_init(NULL);
 
-	/* If the proxy server environment variables are already set,
-	 * we shouldn't override them */
-	if (!getenv("HTTP_PROXY") && !getenv("http_proxy") && !getenv("HTTPPROXY")) {
-		wpurple_refresh_proxy();
-		watch_for_proxy_changes();
-	} else {
-		purple_debug_info("wpurple", "HTTP_PROXY env. var already set.  Ignoring win32 Internet Settings.\n");
-	}
-
 	purple_debug_info("wpurple", "wpurple_init end\n");
 }
 
@@ -578,11 +572,6 @@
 	g_free(app_data_dir);
 	app_data_dir = NULL;
 
-	if (proxy_regkey) {
-		RegCloseKey(proxy_regkey);
-		proxy_regkey = NULL;
-	}
-
 	libpurpledll_hInstance = NULL;
 }
 
--- a/pidgin/gtkblist.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/pidgin/gtkblist.c	Fri Sep 21 13:27:41 2007 +0000
@@ -3105,7 +3105,7 @@
 	{ N_("/_Help"), NULL, NULL, 0, "<Branch>", NULL },
 	{ N_("/Help/Online _Help"), "F1", gtk_blist_show_onlinehelp_cb, 0, "<StockItem>", GTK_STOCK_HELP },
 	{ N_("/Help/_Debug Window"), NULL, toggle_debug, 0, "<Item>", NULL },
-#if GTK_CHECK_VERSION(2,6,0)	
+#if GTK_CHECK_VERSION(2,6,0)
 	{ N_("/Help/_About"), NULL, pidgin_dialogs_about, 0,  "<StockItem>", GTK_STOCK_ABOUT },
 #else
 	{ N_("/Help/_About"), NULL, pidgin_dialogs_about, 0,  "<Item>", NULL },
@@ -4820,7 +4820,7 @@
 							  "visible", EMBLEM_VISIBLE_COLUMN, NULL);
 
 	rend = gtk_cell_renderer_pixbuf_new();
-	gtk_tree_view_column_pack_start(column, rend, FALSE);	
+	gtk_tree_view_column_pack_start(column, rend, FALSE);
 	gtk_tree_view_column_set_attributes(column, rend,
 					   "pixbuf", PROTOCOL_ICON_COLUMN,
 					   "visible", PROTOCOL_ICON_VISIBLE_COLUMN,
@@ -5265,7 +5265,7 @@
 
 	group = (PurpleGroup*)gnode;
 	textcolor = gtkblist->treeview->style->fg[GTK_STATE_ACTIVE];
-        
+
 	if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(gtkblist->treeview)), NULL, &iter)) {
 		gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter,
 				NODE_COLUMN, &selected_node, -1);
@@ -6319,9 +6319,13 @@
 	gtkblist->headline_callback = callback;
 	gtkblist->headline_data = user_data;
 	gtkblist->headline_destroy = destroy;
-	if (!GTK_WIDGET_HAS_FOCUS(gtkblist->window))
-		pidgin_set_urgent(GTK_WINDOW(gtkblist->window), TRUE);
-	gtk_widget_show_all(gtkblist->headline_hbox);
+	if (text != NULL || pixbuf != NULL) {
+		if (!GTK_WIDGET_HAS_FOCUS(gtkblist->window))
+			pidgin_set_urgent(GTK_WINDOW(gtkblist->window), TRUE);
+		gtk_widget_show_all(gtkblist->headline_hbox);
+	} else {
+		gtk_widget_hide(gtkblist->headline_hbox);
+	}
 }
 
 static PurpleBlistUiOps blist_ui_ops =
--- a/pidgin/gtkdialogs.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/pidgin/gtkdialogs.c	Fri Sep 21 13:27:41 2007 +0000
@@ -286,6 +286,7 @@
 	about = NULL;
 }
 
+#if 0
 /* This function puts the version number onto the pixmap we use in the 'about' 
  * screen in Pidgin. */
 static void
@@ -323,6 +324,7 @@
 											 width, height);
 	g_object_unref(G_OBJECT(pixmap));
 }
+#endif
 
 void pidgin_dialogs_about()
 {
@@ -386,6 +388,9 @@
 	str = g_string_sized_new(4096);
 
 	g_string_append_printf(str,
+		"<CENTER><FONT SIZE=\"4\"><B>%s %s</B></FONT></CENTER><BR><BR>", PIDGIN_NAME, VERSION);
+
+	g_string_append_printf(str,
 		_("%s is a graphical modular messaging client based on "
 		  "libpurple which is capable of connecting to "
 		  "AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, "
--- a/pidgin/gtknotify.c	Fri Sep 21 02:11:29 2007 +0000
+++ b/pidgin/gtknotify.c	Fri Sep 21 13:27:41 2007 +0000
@@ -413,7 +413,7 @@
  * count > 0 mean non-detailed.
  */
 static void *
-pidgin_notify_add_mail(GtkTreeStore *treemodel, PurpleAccount *account, char *notification, const char *url, int count)
+pidgin_notify_add_mail(GtkTreeStore *treemodel, PurpleAccount *account, char *notification, const char *url, int count, gboolean clear)
 {
 	PidginNotifyMailData *data = NULL;
 	GtkTreeIter iter;
@@ -422,20 +422,30 @@
 
 	icon = pidgin_create_prpl_icon(account, PIDGIN_PRPL_ICON_MEDIUM);
 
-	if (count > 0) {
+	if (count > 0 || clear) {
 		/* Allow only one non-detailed email notification for each account */
 		if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(treemodel), &iter)) {
+			gboolean advanced;
 			do {
+				advanced = FALSE;
 				gtk_tree_model_get(GTK_TREE_MODEL(treemodel), &iter,
 						PIDGIN_MAIL_DATA, &data, -1);
-				if (data->account == account && data->count > 0) {
-					new_n = FALSE;
-					g_free(data->url);
-					data->url = NULL;
-					mail_dialog->total_count -= data->count;
-					break;
+				if (data->account == account) {
+					if (clear) {
+						advanced = gtk_tree_store_remove(treemodel, &iter);
+						purple_notify_close(PURPLE_NOTIFY_EMAILS, data);
+						/* We're completely done if we've processed all entries */
+						if (!advanced)
+							return NULL;
+					} else if (data->count > 0) {
+						new_n = FALSE;
+						g_free(data->url);
+						data->url = NULL;
+						mail_dialog->total_count -= data->count;
+						break;
+					}
 				}
-			} while (gtk_tree_model_iter_next(GTK_TREE_MODEL(treemodel), &iter));
+			} while (advanced || gtk_tree_model_iter_next(GTK_TREE_MODEL(treemodel), &iter));
 		}
 	}
 
@@ -472,9 +482,13 @@
 	PurpleAccount *account;
 	PidginNotifyMailData *data = NULL;
 
+	/* Don't bother updating if there aren't new emails and we don't have any displayed currently */
+	if (count == 0 && mail_dialog == NULL)
+		return NULL;
+
 	account = purple_connection_get_account(gc);
 	dialog = pidgin_get_mail_dialog();  /* This creates mail_dialog if necessary */
- 
+
 	mail_dialog->total_count += count;
 	if (detailed) {
 		while (count--) {
@@ -512,31 +526,46 @@
 			g_free(from_text);
 			g_free(subject_text);
 
-			data = pidgin_notify_add_mail(mail_dialog->treemodel, account, notification, urls ? *urls : NULL, 0);
+			data = pidgin_notify_add_mail(mail_dialog->treemodel, account, notification, urls ? *urls : NULL, 0, FALSE);
 			g_free(notification);
 
 			if (urls != NULL)
 				urls++;
 		}
 	} else {
-		notification = g_strdup_printf(ngettext("%s has %d new message.",
-						   "%s has %d new messages.",
-						   (int)count),
-						   *tos, (int)count);
-		data = pidgin_notify_add_mail(mail_dialog->treemodel, account, notification, urls ? *urls : NULL, count);
-		g_free(notification);
+		if (count > 0) {
+			notification = g_strdup_printf(ngettext("%s has %d new message.",
+							   "%s has %d new messages.",
+							   (int)count),
+							   *tos, (int)count);
+			data = pidgin_notify_add_mail(mail_dialog->treemodel, account, notification, urls ? *urls : NULL, count, FALSE);
+			g_free(notification);
+		} else {
+			GtkTreeIter iter;
+
+			/* Clear out all mails for the account */
+			pidgin_notify_add_mail(mail_dialog->treemodel, account, NULL, NULL, 0, TRUE);
+
+			if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(mail_dialog->treemodel), &iter)) {
+				/* There is no API to clear the headline specifically */
+				/* This will trigger reset_mail_dialog() */
+				pidgin_blist_set_headline(NULL, NULL, NULL, NULL, NULL);
+			}
+
+			return NULL;
+		}
 	}
 
 	if (!GTK_WIDGET_VISIBLE(dialog)) {
 		GdkPixbuf *pixbuf = gtk_widget_render_icon(dialog, PIDGIN_STOCK_DIALOG_MAIL,
 							   gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL), NULL);
-		char *label_text = g_strdup_printf(ngettext("<b>You have %d new e-mail.</b>",
-							    "<b>You have %d new e-mails.</b>",
+		char *label_text = g_strdup_printf(ngettext("<b>%d new e-mail.</b>",
+							    "<b>%d new e-mails.</b>",
 							    mail_dialog->total_count), mail_dialog->total_count);
 		mail_dialog->in_use = TRUE;     /* So that _set_headline doesn't accidentally
 										   remove the notifications when replacing an
 										   old notification. */
-		pidgin_blist_set_headline(label_text, 
+		pidgin_blist_set_headline(label_text,
 					    pixbuf, G_CALLBACK(gtk_widget_show_all), dialog,
 					    (GDestroyNotify)reset_mail_dialog);
 		mail_dialog->in_use = FALSE;
Binary file pidgin/pixmaps/protocols/22/myspace.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/pixmaps/protocols/22/scalable/myspace.svg	Fri Sep 21 13:27:41 2007 +0000
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="24"
+   height="24"
+   id="svg2160"
+   sodipodi:version="0.32"
+   inkscape:version="0.45"
+   sodipodi:docname="myspace48.svg"
+   sodipodi:docbase="/home/hbons/Desktop"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   sodipodi:modified="true"
+   version="1.0">
+  <defs
+     id="defs2162">
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3147">
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:1;"
+         offset="0"
+         id="stop3149" />
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:0;"
+         offset="1"
+         id="stop3151" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3172">
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:1;"
+         offset="0"
+         id="stop3174" />
+      <stop
+         style="stop-color:#eeeeec;stop-opacity:0;"
+         offset="1"
+         id="stop3176" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3172"
+       id="linearGradient3178"
+       x1="10.549266"
+       y1="5.125"
+       x2="52.810349"
+       y2="49.864979"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3147"
+       id="linearGradient3153"
+       x1="6.0203052"
+       y1="1.0398448"
+       x2="26.101271"
+       y2="25.83909"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="9.8994949"
+     inkscape:cx="31.349135"
+     inkscape:cy="11.3794"
+     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="3"
+     inkscape:window-y="25"
+     width="24px"
+     height="24px" />
+  <metadata
+     id="metadata2165">
+    <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:#babdb6;fill-opacity:1;stroke:#888a85;stroke-width:1.00000012;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 17 1.5 C 15.068 1.5 13.5 3.0680001 13.5 5 C 13.5 6.932 15.068 8.5 17 8.5 C 18.932 8.5 20.499999 6.932 20.5 5 C 20.5 3.068 18.931999 1.4999999 17 1.5 z M 10.5 2.5 C 8.8439999 2.5 7.5000001 3.8439999 7.5 5.5 C 7.5 7.1559999 8.8439997 8.4999996 10.5 8.5 C 9.395701 8.5527352 8.4448563 9.5454035 7.875 10.4375 C 7.830859 8.7148111 7.161553 7.5791344 5.6875 7.5 C 6.7035586 7.4052513 7.5 6.5406823 7.5 5.5 C 7.5 4.396 6.604 3.5 5.5 3.5 C 4.396 3.5 3.4999999 4.396 3.5 5.5 C 3.5 6.5828941 4.3626534 7.4666427 5.4375 7.5 C 4.352857 7.6401732 3.5000005 8.6243123 3.5 9.875 L 3.5 14.53125 L 7.5625 14.53125 L 7.5625 18.53125 L 12.5 18.53125 L 12.5 22.5 L 21.5 22.5 C 21.499867 19.408873 21.5 16.303843 21.5 13.21875 C 21.5 10.634939 19.434134 8.53125 16.875 8.53125 C 15.587036 8.5312503 14.40291 9.424387 13.5625 10.28125 C 13.046577 9.1148819 11.916283 8.5 10.59375 8.5 C 12.205095 8.4489386 13.5 7.1236737 13.5 5.5 C 13.5 3.8440001 12.156 2.5 10.5 2.5 z "
+       id="path3149" />
+    <path
+       sodipodi:type="inkscape:offset"
+       inkscape:radius="-1.00878"
+       inkscape:original="M 17 1.5 C 15.068 1.5 13.5 3.0680001 13.5 5 C 13.5 6.932 15.068 8.5 17 8.5 C 18.932 8.5 20.499999 6.932 20.5 5 C 20.5 3.068 18.931999 1.4999999 17 1.5 z M 10.5 2.5 C 8.8439999 2.5 7.5000001 3.8439999 7.5 5.5 C 7.5 7.1559999 8.8439997 8.4999996 10.5 8.5 C 9.395701 8.5527352 8.4448563 9.5454035 7.875 10.4375 C 7.830859 8.7148111 7.161553 7.5791344 5.6875 7.5 C 6.7035586 7.4052513 7.5 6.5406823 7.5 5.5 C 7.5 4.396 6.604 3.5 5.5 3.5 C 4.396 3.5 3.4999999 4.396 3.5 5.5 C 3.5 6.5828941 4.3626534 7.4666427 5.4375 7.5 C 4.352857 7.6401732 3.5000005 8.6243123 3.5 9.875 L 3.5 14.53125 L 7.5625 14.53125 L 7.5625 18.53125 L 12.5 18.53125 L 12.5 22.5 L 21.5 22.5 C 21.499867 19.408873 21.5 16.303843 21.5 13.21875 C 21.5 10.634939 19.434134 8.53125 16.875 8.53125 C 15.587036 8.5312503 14.40291 9.424387 13.5625 10.28125 C 13.046577 9.1148819 11.916283 8.5 10.59375 8.5 C 12.205095 8.4489386 13.5 7.1236737 13.5 5.5 C 13.5 3.8440001 12.156 2.5 10.5 2.5 z "
+       style="opacity:1;fill:url(#linearGradient3153);fill-opacity:1.0;stroke:#ffffff;stroke-width:1.00000012;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path2174"
+       d="M 17,2.5 C 15.613813,2.5 14.5,3.6138135 14.5,5 C 14.5,6.3861867 15.613813,7.5 17,7.5 C 18.386187,7.5 19.499999,6.3861873 19.5,5 C 19.5,3.6138137 18.386185,2.4999999 17,2.5 z M 10.5,3.5 C 9.3898132,3.5 8.5000001,4.3898131 8.5,5.5 C 8.5,6.5997176 9.3733703,7.4835976 10.46875,7.5 C 10.499983,7.4985473 10.531267,7.4985473 10.5625,7.5 C 10.572807,7.4996734 10.583484,7.5004795 10.59375,7.5 C 11.655314,7.4504166 12.5,6.5769144 12.5,5.5 C 12.5,4.3898135 11.610187,3.5 10.5,3.5 z M 5.5,4.5 C 4.9418133,4.5 4.4999999,4.9418134 4.5,5.5 C 4.5,6.0471523 4.9293308,6.4832594 5.46875,6.5 C 5.4999831,6.4985473 5.5312669,6.4985473 5.5625,6.5 C 5.572916,6.4998387 5.583334,6.4998387 5.59375,6.5 C 6.0934659,6.4534009 6.5,6.0259981 6.5,5.5 C 6.5,4.9418133 6.0581867,4.5 5.5,4.5 z M 5.53125,8.5 C 4.98621,8.5848564 4.5000003,9.0959604 4.5,9.875 L 4.5,13.53125 L 7.5625,13.53125 C 8.1127746,13.536073 8.557677,13.980975 8.5625,14.53125 L 8.5625,17.53125 L 12.5,17.53125 C 13.050275,17.536073 13.495177,17.980975 13.5,18.53125 L 13.5,21.5 L 20.5,21.5 C 20.499928,18.739558 20.5,15.971417 20.5,13.21875 C 20.5,11.172647 18.881301,9.53125 16.875,9.53125 C 16.053394,9.5312502 15.035346,10.231141 14.28125,11 C 14.045303,11.244024 13.70246,11.353041 13.368907,11.290106 C 13.035354,11.227172 12.755806,11.000722 12.625,10.6875 C 12.280526,9.9087333 11.615906,9.5089368 10.625,9.5 C 10.614584,9.5001613 10.604166,9.5001613 10.59375,9.5 C 10.583334,9.5001613 10.572916,9.5001613 10.5625,9.5 C 10.033117,9.5252804 9.1973144,10.219569 8.71875,10.96875 C 8.4774641,11.327111 8.0347855,11.49207 7.6178253,11.378996 C 7.2008651,11.265922 6.9021772,10.899915 6.875,10.46875 C 6.8561284,9.7322475 6.6929787,9.2126452 6.5,8.9375 C 6.312535,8.6702161 6.1126513,8.5308317 5.65625,8.5 C 5.645834,8.5001613 5.635416,8.5001613 5.625,8.5 C 5.5937669,8.5014527 5.5624831,8.5014527 5.53125,8.5 L 5.53125,8.5 z " />
+  </g>
+</svg>
Binary file pidgin/pixmaps/status/16/available.png has changed
Binary file pidgin/pixmaps/status/16/away.png has changed
Binary file pidgin/pixmaps/status/16/busy.png has changed
Binary file pidgin/pixmaps/status/16/extended-away.png has changed
Binary file pidgin/pixmaps/status/16/offline.png has changed
Binary file pidgin/pixmaps/status/16/rtl/extended-away.png has changed
--- a/pidgin/pixmaps/status/16/scalable/available.svg	Fri Sep 21 02:11:29 2007 +0000
+++ b/pidgin/pixmaps/status/16/scalable/available.svg	Fri Sep 21 13:27:41 2007 +0000
@@ -13,13 +13,15 @@
    height="16"
    id="svg2"
    sodipodi:version="0.32"
-   inkscape:version="0.44.1"
+   inkscape:version="0.45"
    version="1.0"
    inkscape:export-filename="/home/hbons/GUI/Tango/Gaim Refresh/status/16/available.png"
    inkscape:export-xdpi="90"
    inkscape:export-ydpi="90"
-   sodipodi:docbase="/home/hbons/Desktop/experiment/status/16/scalable"
-   sodipodi:docname="available.svg">
+   sodipodi:docbase="/home/hbons/Desktop/2.1.1/status/16/scalable"
+   sodipodi:docname="available.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   sodipodi:modified="true">
   <defs
      id="defs4">
     <linearGradient
@@ -246,7 +248,7 @@
      inkscape:window-width="1274"
      inkscape:window-height="844"
      inkscape:window-x="3"
-     inkscape:window-y="0" />
+     inkscape:window-y="25" />
   <metadata
      id="metadata7">
     <rdf:RDF>
@@ -263,16 +265,6 @@
      inkscape:groupmode="layer"
      id="layer1">
     <path
-       d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1  22.45064,19.008621 A 8.6620579 8.6620579 0 1 1  39.774755 19.008621 z"
-       sodipodi:ry="8.6620579"
-       sodipodi:rx="8.6620579"
-       sodipodi:cy="19.008621"
-       sodipodi:cx="31.112698"
-       id="path2969"
-       style="color:black;fill:url(#radialGradient3025);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
-       sodipodi:type="arc"
-       transform="matrix(0.923568,0,0,0.173169,-20.73469,11.2083)" />
-    <path
        transform="matrix(0.538297,0,0,0.538297,-1.630177,-1.459246)"
        style="fill:url(#linearGradient4738);fill-opacity:1;fill-rule:evenodd;stroke:#306300;stroke-width:1.85770929;stroke-miterlimit:4;stroke-opacity:1"
        d="M 31.822886,17.572527 C 31.822886,25.263442 25.580983,31.505344 17.890068,31.505344 C 10.199153,31.505344 3.9572506,25.263442 3.9572506,17.572527 C 3.9572506,9.8816117 10.199153,3.6397095 17.890068,3.6397095 C 25.580983,3.6397095 31.822886,9.8816117 31.822886,17.572527 z "
--- a/pidgin/pixmaps/status/16/scalable/away.svg	Fri Sep 21 02:11:29 2007 +0000
+++ b/pidgin/pixmaps/status/16/scalable/away.svg	Fri Sep 21 13:27:41 2007 +0000
@@ -13,13 +13,15 @@
    height="16"
    id="svg2"
    sodipodi:version="0.32"
-   inkscape:version="0.44.1"
+   inkscape:version="0.45"
    version="1.0"
    inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/status/16/available16.png"
    inkscape:export-xdpi="90"
    inkscape:export-ydpi="90"
-   sodipodi:docbase="/home/hbons/Desktop/2.0.2/pidgin/pixmaps/status/16/scalable"
-   sodipodi:docname="away.svg">
+   sodipodi:docbase="/home/hbons/Desktop/2.1.1/status/16/scalable"
+   sodipodi:docname="away.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   sodipodi:modified="true">
   <defs
      id="defs4">
     <linearGradient
@@ -123,8 +125,8 @@
      fill="#eeeeec"
      inkscape:window-width="1434"
      inkscape:window-height="840"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
+     inkscape:window-x="3"
+     inkscape:window-y="25"
      inkscape:object-paths="false"
      inkscape:grid-bbox="true"
      inkscape:guide-bbox="false"
@@ -145,16 +147,6 @@
      inkscape:groupmode="layer"
      id="layer1">
     <path
-       d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1  22.45064,19.008621 A 8.6620579 8.6620579 0 1 1  39.774755 19.008621 z"
-       sodipodi:ry="8.6620579"
-       sodipodi:rx="8.6620579"
-       sodipodi:cy="19.008621"
-       sodipodi:cx="31.112698"
-       id="path4318"
-       style="opacity:1;color:black;fill:url(#radialGradient2818);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
-       sodipodi:type="arc"
-       transform="matrix(0.923568,0,0,0.173169,-20.73469,11.2083)" />
-    <path
        sodipodi:type="arc"
        style="opacity:1;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:evenodd;stroke:#173867;stroke-width:1.91314828px;stroke-linecap:butt;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"
        id="path1339"
--- a/pidgin/pixmaps/status/16/scalable/busy.svg	Fri Sep 21 02:11:29 2007 +0000
+++ b/pidgin/pixmaps/status/16/scalable/busy.svg	Fri Sep 21 13:27:41 2007 +0000
@@ -13,13 +13,15 @@
    height="16"
    id="svg2"
    sodipodi:version="0.32"
-   inkscape:version="0.44.1"
+   inkscape:version="0.45"
    version="1.0"
    inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/status/16/available16.png"
    inkscape:export-xdpi="90"
    inkscape:export-ydpi="90"
-   sodipodi:docbase="/home/hbons/Desktop/experiment/status/16/scalable"
-   sodipodi:docname="busy.svg">
+   sodipodi:docbase="/home/hbons/Desktop/2.1.1/status/16/scalable"
+   sodipodi:docname="busy.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   sodipodi:modified="true">
   <defs
      id="defs4">
     <linearGradient
@@ -192,8 +194,8 @@
      fill="#eeeeec"
      inkscape:window-width="1268"
      inkscape:window-height="844"
-     inkscape:window-x="6"
-     inkscape:window-y="0" />
+     inkscape:window-x="3"
+     inkscape:window-y="25" />
   <metadata
      id="metadata7">
     <rdf:RDF>
@@ -210,16 +212,6 @@
      inkscape:groupmode="layer"
      id="layer1">
     <path
-       d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1  22.45064,19.008621 A 8.6620579 8.6620579 0 1 1  39.774755 19.008621 z"
-       sodipodi:ry="8.6620579"
-       sodipodi:rx="8.6620579"
-       sodipodi:cy="19.008621"
-       sodipodi:cx="31.112698"
-       id="path2969"
-       style="color:black;fill:url(#radialGradient3025);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
-       sodipodi:type="arc"
-       transform="matrix(0.923568,0,0,0.173169,-20.73469,11.2083)" />
-    <path
        sodipodi:type="arc"
        style="opacity:1;color:#000000;fill:#ef2929;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.36561811px;stroke-linecap:butt;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"
        id="path1311"
--- a/pidgin/pixmaps/status/16/scalable/extended-away.svg	Fri Sep 21 02:11:29 2007 +0000
+++ b/pidgin/pixmaps/status/16/scalable/extended-away.svg	Fri Sep 21 13:27:41 2007 +0000
@@ -13,12 +13,14 @@
    height="16px"
    id="svg4245"
    sodipodi:version="0.32"
-   inkscape:version="0.44.1"
-   sodipodi:docbase="/home/hbons/GUI/Tango/Gaim Refresh/status/16/scalable"
+   inkscape:version="0.45"
+   sodipodi:docbase="/home/hbons/Desktop/2.1.1/status/16/scalable"
    sodipodi:docname="extended-away.svg"
    inkscape:export-filename="/home/hbons/GUI/Tango/Gaim Refresh/status/16/extended-away.png"
    inkscape:export-xdpi="90"
-   inkscape:export-ydpi="90">
+   inkscape:export-ydpi="90"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   sodipodi:modified="true">
   <defs
      id="defs4247">
     <linearGradient
@@ -53,16 +55,16 @@
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
      inkscape:zoom="22.197802"
-     inkscape:cx="8"
-     inkscape:cy="9.6246122"
+     inkscape:cx="14.39703"
+     inkscape:cy="8.273127"
      inkscape:current-layer="layer1"
      showgrid="true"
      inkscape:grid-bbox="true"
      inkscape:document-units="px"
-     inkscape:window-width="872"
-     inkscape:window-height="626"
-     inkscape:window-x="129"
-     inkscape:window-y="124" />
+     inkscape:window-width="1440"
+     inkscape:window-height="847"
+     inkscape:window-x="0"
+     inkscape:window-y="22" />
   <metadata
      id="metadata4250">
     <rdf:RDF>
@@ -79,27 +81,17 @@
      inkscape:label="Layer 1"
      inkscape:groupmode="layer">
     <path
-       sodipodi:type="arc"
-       style="fill:url(#radialGradient5300);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.81530744;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path5131"
-       sodipodi:cx="11.756953"
-       sodipodi:cy="17.588654"
-       sodipodi:rx="6.3436799"
-       sodipodi:ry="3.9753728"
-       d="M 18.100633 17.588654 A 6.3436799 3.9753728 0 1 1  5.4132733,17.588654 A 6.3436799 3.9753728 0 1 1  18.100633 17.588654 z"
-       transform="matrix(-1.024642,0,0,0.754646,19.54667,-0.273206)" />
-    <path
-       transform="matrix(-1.708738,0,0,1.647118,-1.878642,-0.867731)"
        style="fill:#fce94f;fill-opacity:1;stroke:#ce5c00;stroke-width:0.59607363;stroke-miterlimit:4;stroke-opacity:1"
        d="M -9,3.2233667 L -7.134588,1.4374993 L -2.89508,1.4374993 C -2.3096744,1.4374993 -1.9824877,1.8329068 -1.9824877,2.3263196 L -1.9824877,9.3300741 L -9,9.3300741 L -9,3.2233667 z "
        id="rect5097"
-       sodipodi:nodetypes="ccccccc" />
+       sodipodi:nodetypes="ccccccc"
+       transform="matrix(-1.708738,0,0,1.647118,-1.878642,-0.867731)" />
     <path
-       transform="matrix(-1.398059,0,0,1.342047,-8.253506e-2,0.574281)"
        style="opacity:0.5625;fill:none;fill-opacity:1;stroke:#eeeeec;stroke-width:0.7300511;stroke-miterlimit:4;stroke-opacity:1"
        d="M -8.9656284,3.1521999 L -7.1361003,1.4267646 L -1.8535964,1.4374993 L -1.8535964,9.6313422 L -9,9.6313422 L -8.9656284,3.1521999 z "
        id="rect5099"
-       sodipodi:nodetypes="cccccc" />
+       sodipodi:nodetypes="cccccc"
+       transform="matrix(-1.398059,0,0,1.342047,-8.253506e-2,0.574281)" />
     <rect
        style="opacity:0.4;fill:#ce5c00;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
        id="rect5988"
--- a/pidgin/pixmaps/status/16/scalable/offline.svg	Fri Sep 21 02:11:29 2007 +0000
+++ b/pidgin/pixmaps/status/16/scalable/offline.svg	Fri Sep 21 13:27:41 2007 +0000
@@ -13,13 +13,15 @@
    height="16"
    id="svg2"
    sodipodi:version="0.32"
-   inkscape:version="0.44.1"
+   inkscape:version="0.45"
    version="1.0"
    inkscape:export-filename="/home/hbons/Desktop/offline.png"
    inkscape:export-xdpi="90"
    inkscape:export-ydpi="90"
-   sodipodi:docbase="/home/hbons/Desktop/experiment/status/16/scalable"
-   sodipodi:docname="offline.svg">
+   sodipodi:docbase="/home/hbons/Desktop/2.1.1/status/16/scalable"
+   sodipodi:docname="offline.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   sodipodi:modified="true">
   <defs
      id="defs4">
     <linearGradient
@@ -168,8 +170,8 @@
      fill="#eeeeec"
      inkscape:window-width="1434"
      inkscape:window-height="844"
-     inkscape:window-x="0"
-     inkscape:window-y="0" />
+     inkscape:window-x="3"
+     inkscape:window-y="25" />
   <metadata
      id="metadata7">
     <rdf:RDF>
@@ -186,16 +188,6 @@
      inkscape:groupmode="layer"
      id="layer1">
     <path
-       d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1  22.45064,19.008621 A 8.6620579 8.6620579 0 1 1  39.774755 19.008621 z"
-       sodipodi:ry="8.6620579"
-       sodipodi:rx="8.6620579"
-       sodipodi:cy="19.008621"
-       sodipodi:cx="31.112698"
-       id="path4318"
-       style="opacity:0.7;color:#000000;fill:url(#radialGradient3822);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
-       sodipodi:type="arc"
-       transform="matrix(0.923568,0,0,0.288615,-20.73469,8.013827)" />
-    <path
        style="fill:#888a85;fill-opacity:1;stroke:#2e3436;stroke-width:0.99999827;stroke-miterlimit:4;stroke-opacity:1"
        d="M 13.307074,13.307079 C 10.376958,16.237198 5.6213214,16.237693 2.6918157,13.308187 C -0.23769028,10.378679 -0.23719421,5.623042 2.692923,2.6929237 C 5.62304,-0.23719442 10.378675,-0.23769056 13.308181,2.6918165 C 16.237687,5.6213234 16.237192,10.376962 13.307074,13.307079 z "
        id="path2187" />