im.pidgin.pidgin.2.3.1: fe3d0494f47eb9ef069371c15ae6bdcdd806a60e

nosnilmot at pidgin.im nosnilmot at pidgin.im
Sat Dec 1 09:10:56 EST 2007


-----------------------------------------------------------------
Revision: fe3d0494f47eb9ef069371c15ae6bdcdd806a60e
Ancestor: 478aa9dbaf498fead2266060ae758f48fa57f3d7
Author: nosnilmot at pidgin.im
Date: 2007-12-01T14:08:02
Branch: im.pidgin.pidgin.2.3.1

Modified files:
        ChangeLog configure.ac finch/finch.c
        finch/libgnt/configure.ac finch/libgnt/gntmain.c
        finch/libgnt/gntwm.c libpurple/Makefile.am
        libpurple/certificate.c libpurple/plugins/ssl/ssl-gnutls.c
        libpurple/protocols/bonjour/bonjour.c
        libpurple/protocols/bonjour/issues.txt
        libpurple/protocols/bonjour/jabber.c
        libpurple/protocols/bonjour/mdns_avahi.c
        libpurple/protocols/irc/parse.c
        libpurple/protocols/jabber/caps.c
        libpurple/protocols/jabber/google.c
        libpurple/protocols/jabber/presence.c
        libpurple/protocols/msn/notification.c
        libpurple/protocols/msnp9/msn.c
        libpurple/protocols/msnp9/nexus.c
        libpurple/protocols/msnp9/notification.c
        libpurple/protocols/msnp9/session.h
        libpurple/protocols/msnp9/user.c
        libpurple/protocols/myspace/myspace.c libpurple/prpl.c
        libpurple/xmlnode.c pidgin/gtkscrollbook.c
        pidgin/plugins/pidginrc.c pidgin/plugins/timestamp.c

ChangeLog: 


Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
hopefully I didn't get any string changes in here so we can
release off this branch without requiring a new freeze.


applied changes from 478aa9dbaf498fead2266060ae758f48fa57f3d7
             through 6e23cb6795a35692cf0f84fcea64a7c2748a9bad

applied changes from 66d234740bd40b14ef7564f178d84ab82816d6e2
             through 1c0e01f6a8f6d234910e799c3177eb52e87cd5c5

applied changes from 1c0e01f6a8f6d234910e799c3177eb52e87cd5c5
             through cbdc6d4cab03017c1c0267f861f9ed59407e1e61

applied changes from 3951f7df209afb2e8cf75ec6092de91ab080ae8e
             through a3da14876c865437f0916509629a649308081104

applied changes from c77aee16184e888f78cd2e43d89ecb6202938d9b
             through 30553187b82f795a4c65a0bf7f1e7e6c3fc4ff57

applied changes from 30553187b82f795a4c65a0bf7f1e7e6c3fc4ff57
             through b1278944ccaa36c30b7f00edf5b79dc38347c931

applied changes from 41c1eba01a2c9fe574f5c3b0c4a2a6ee0c9955b0
             through 83367f8f60af4ebb6636d5aa3e3eed63fc7e49b8

applied changes from 83367f8f60af4ebb6636d5aa3e3eed63fc7e49b8
             through cf65b89d71f0a142ac21a919ced9f163b4bc7251

applied changes from cf65b89d71f0a142ac21a919ced9f163b4bc7251
             through 55decf7b3893d1f4798d2a966b93eb9f08858f67

applied changes from 88390766d9b581d7a7e2e3b6156437c5bef76e93
             through a00ff8e1a342a8326627d51728ad97699740c945

applied changes from a00ff8e1a342a8326627d51728ad97699740c945
             through c55dabf731ea4d3fcb287e43b157062eb2d425fa

applied changes from c55dabf731ea4d3fcb287e43b157062eb2d425fa
             through b576470ab9bee5e0b1c48de1e78e3e6234254cdb

applied changes from b576470ab9bee5e0b1c48de1e78e3e6234254cdb
             through 5865eb4a45b2c059f8cd82ebd88bcca28ec72bd7

applied changes from 146312f9ab120160d0659f33849ccb95fede1c3f
             through 2fcb5d2cb35c5ba692592e22bc442c3d62000f85

applied changes from cfebb2730668c41870ff696f157ddd68175aa0f3
             through e7f1ca64fe26b46544c0f64f082c81a0a9e96f5f

applied changes from 87a81ecce720018f2f6c6d2983c0259ae3c88814
             through 72fffff81de35e7d400bf8b8fb18ba7ed84a6b8c

applied changes from f5e03381162836652532f1495162df4868b7b8cb
             through 48faf08abe024b6ad491a1145e309b36fceda249

applied changes from cd4038a435bd39cc62244d5614b8d94ad689d8bf
             through d03ce5e2bc3aaa6ee963e1ebced007175aaa099f

applied changes from d03ce5e2bc3aaa6ee963e1ebced007175aaa099f
             through f5e03381162836652532f1495162df4868b7b8cb

applied changes from 9e52f5f3fa15ac341c185f72558447f3ff263337
             through 727439d778b7d7f40aa0230cb9be26765e8d50a9

applied changes from cd4038a435bd39cc62244d5614b8d94ad689d8bf
             through 37d10660345bc1f2092492296caa8deaf84744b4

applied changes from d5c8358a1cdfe381e834ab7f86a9e1fb6835e65f
             through 41b4d75b70555daf78b3c5701a59453027ca57e7

applied changes from 41b4d75b70555daf78b3c5701a59453027ca57e7
             through fb945a0cab270a5eaf15d294b8706714e22742c1

applied changes from fb945a0cab270a5eaf15d294b8706714e22742c1
             through 680ead8ac23fbdc99bd7178248a4cdf0bec54307

applied changes from 41b4d75b70555daf78b3c5701a59453027ca57e7
             through 29f8aed19e209a53a63c57cf872bc9f446d84aeb

applied changes from 2996670bdeb36ac63658ea4760a8a1f2e362e703
             through 7595eff42168a97a13aec5a68f05916a862b22df

applied changes from 1273d64fc47b82be9ff2bca00d14e37199bcc026
             through bd625d93706896fbd570aee9b3d53ceb38241a12

applied changes from c27700a33779f1f8f380b0ed0a62756be4b6f17c
             through a66a55b8836e3241bcc5772e499aa7c85d7bef88

applied changes from ed49703095cc1bf4f1938ef4cebcc2d906f5d911
             through ae553a7b1f48faebd22d107832f5827460d5d656

-------------- next part --------------
============================================================
--- ChangeLog	75fbeac2422587141e107c5afd887ead0505ebff
+++ ChangeLog	e78ef208dbb9af06e5105b24fd1399e4cfc4004f
@@ -1,5 +1,23 @@ Pidgin and Finch: The Pimpin' Penguin IM
 Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
+version 2.3.1 (12/??/2007):
+	http://developer.pidgin.im/query?status=closed&milestone=2.3.1
+		NOTE: Due to the way this release was made, it is possible that
+			  bugs marked as fixed in 2.3.1 will not be fixed until the
+			  next release.
+
+	libpurple:
+	* Fixed a number of MSN bugs introduced in 2.3.0, resolving problems
+	  connecting to MSN and random local display name changes
+	* Fixed various problems with loss of status messages when going
+	  or returning from idle on MySpaceIM.
+	* Fixed crashes in XMPP when discovering a clients capabilities
+	* Don't set the current tune title if it's NULL (XMPP/Google Talk)
+	* Don't allow buddies to be manually added to Bonjour
+	* Don't advertise IPv6 on Bonjour because we don't support it
+	* Compile fixes for FreeBSD & Solaris
+
+
 version 2.3.0 (11/24/2007):
 	http://developer.pidgin.im/query?status=closed&milestone=2.3.0
 		NOTE: Some bugs marked fixed in 2.2.1, 2.2.2 or 2.2.3 may not
============================================================
--- configure.ac	317387775061ecad1afb3dcf0c92f725b651a5d5
+++ configure.ac	fc47f894d8f1c37c1cbdb0aea94274510438fb00
@@ -46,8 +46,8 @@ m4_define([purple_minor_version], [3])
 m4_define([purple_lt_current], [3])
 m4_define([purple_major_version], [2])
 m4_define([purple_minor_version], [3])
-m4_define([purple_micro_version], [0])
-m4_define([purple_version_suffix], [])
+m4_define([purple_micro_version], [1])
+m4_define([purple_version_suffix], [devel])
 m4_define([purple_version],
           [purple_major_version.purple_minor_version.purple_micro_version])
 m4_define([purple_display_version], purple_version[]m4_ifdef([purple_version_suffix],[purple_version_suffix]))
@@ -55,8 +55,8 @@ m4_define([gnt_minor_version], [3])
 m4_define([gnt_lt_current], [3])
 m4_define([gnt_major_version], [2])
 m4_define([gnt_minor_version], [3])
-m4_define([gnt_micro_version], [0])
-m4_define([gnt_version_suffix], [])
+m4_define([gnt_micro_version], [1])
+m4_define([gnt_version_suffix], [devel])
 m4_define([gnt_version],
           [gnt_major_version.gnt_minor_version.gnt_micro_version])
 m4_define([gnt_display_version], gnt_version[]m4_ifdef([gnt_version_suffix],[gnt_version_suffix]))
@@ -328,7 +328,7 @@ AC_ARG_ENABLE(consoleui, [AC_HELP_STRING
 	enable_gtkui="$enableval", enable_gtkui="yes")
 AC_ARG_ENABLE(consoleui, [AC_HELP_STRING([--disable-consoleui],
 		[compile without console user interface])],
-	enable_consoleui=$enableval, enable_consoleui=yes)
+	[enable_consoleui=$enableval force_finch=$enableval], [enable_consoleui=yes force_finch=no])
 
 dnl #######################################################################
 dnl # Check for GTK+ 2.0 and other things used by the GTK UI
@@ -383,7 +383,7 @@ You must have the GTK+ 2.0 development h
 		AC_MSG_ERROR([
 
 You must have the GTK+ 2.0 development headers installed to compile Pidgin.
-If you only want to build Finch then specify --disable-gtkui when running configure.
+If you want to build only Finch then specify --disable-gtkui when running configure.
 ])])
 
 	AC_SUBST(GTK_CFLAGS)
@@ -622,6 +622,14 @@ fi
 	fi
 fi
 
+if test "x$force_finch" = "xyes" -a "x$enable_consoleui" != "xyes"; then
+	AC_MSG_ERROR([
+
+Finch will not be built. You need to install ncursesw (or ncurses) and its development headers.
+
+])
+fi
+
 AC_SUBST(GNT_LIBS)
 AC_SUBST(GNT_CFLAGS)
 AM_CONDITIONAL(ENABLE_GNT, test "x$enable_consoleui" = "xyes")
============================================================
--- finch/finch.c	d7088fc88382845c3dbfdbd80ab1f8fbe3b5dfe1
+++ finch/finch.c	9eb561dd105aec13a349fd7a9a6032b3c6e6e549
@@ -297,7 +297,6 @@ init_libpurple(int argc, char **argv)
 	if (opt_version) {
 		/* Translators may want to transliterate the name.
 		 It is not to be translated. */
-		gnt_quit();
 		printf("%s %s\n", _("Finch"), DISPLAY_VERSION);
 		return 0;
 	}
@@ -418,8 +417,6 @@ int main(int argc, char *argv[])
 	g_set_application_name(_("Finch"));
 #endif
 
-	gnt_init();
-
 	if (gnt_start(&argc, &argv)) {
 		gnt_main();
 
============================================================
--- finch/libgnt/configure.ac	4c3746782d70d12c930d6e5aa73851291c7112d2
+++ finch/libgnt/configure.ac	d7da202e8ed6df143b1beca5907f34e7d02474e3
@@ -27,8 +27,8 @@ m4_define([gnt_minor_version], [3])
 m4_define([gnt_lt_current], [3])
 m4_define([gnt_major_version], [2])
 m4_define([gnt_minor_version], [3])
-m4_define([gnt_micro_version], [0])
-m4_define([gnt_version_suffix], [])
+m4_define([gnt_micro_version], [1])
+m4_define([gnt_version_suffix], [devel])
 m4_define([gnt_version],
           [gnt_major_version.gnt_minor_version.gnt_micro_version])
 m4_define([gnt_display_version], gnt_version[]m4_ifdef([gnt_version_suffix],[gnt_version_suffix]))
============================================================
--- finch/libgnt/gntmain.c	5b60093a6933caeb119be331d322d3ee025f4b20
+++ finch/libgnt/gntmain.c	ae1e93f80c3cdbfcc6c451ee1e7c85d81cbf945b
@@ -21,7 +21,7 @@
  */
 
 #define _GNU_SOURCE
-#if defined(__APPLE__) || defined(__unix__)
+#if (defined(__APPLE__) || defined(__unix__)) && !defined(__FreeBSD__)
 #define _XOPEN_SOURCE_EXTENDED
 #endif
 
============================================================
--- finch/libgnt/gntwm.c	e9067557d773b963285eb7247a26f512852ad2c0
+++ finch/libgnt/gntwm.c	51cf3d1d4afb82c656791e313cf2c0b45b9bde00
@@ -21,7 +21,7 @@
  */
 
 #define _GNU_SOURCE
-#if defined(__APPLE__) || defined(__unix__)
+#if (defined(__APPLE__) || defined(__unix__)) && !defined(__FreeBSD__)
 #define _XOPEN_SOURCE_EXTENDED
 #endif
 
============================================================
--- libpurple/Makefile.am	2112ccec7c2eda63afa57cf4f0c7bbff8347dc42
+++ libpurple/Makefile.am	fb4d8727ecc906ce6a12693a0e4486da802a9997
@@ -156,7 +156,7 @@ dbus_exported = dbus-useful.h dbus-defin
 
 dbus_exported = dbus-useful.h dbus-define-api.h account.h blist.h buddyicon.h \
                 connection.h conversation.h core.h ft.h log.h notify.h prefs.h roomlist.h \
-                savedstatuses.h status.h server.h util.h xmlnode.h
+                savedstatuses.h status.h server.h util.h xmlnode.h prpl.h
 
 purple_build_coreheaders = $(addprefix $(srcdir)/, $(purple_coreheaders)) \
 		$(purple_builtheaders)
============================================================
--- libpurple/certificate.c	7a5f333abd5b8481d5aa1ec7589fd6a0e8e1b1ca
+++ libpurple/certificate.c	71082eb0ec224f4575b4e6a8e43e063e06e9b9a0
@@ -1758,7 +1758,6 @@ purple_certificate_register_pool(PurpleC
 gboolean
 purple_certificate_register_pool(PurpleCertificatePool *pool)
 {
-	gboolean success = FALSE;
 	g_return_val_if_fail(pool, FALSE);
 	g_return_val_if_fail(pool->scheme_name, FALSE);
 	g_return_val_if_fail(pool->name, FALSE);
@@ -1771,46 +1770,42 @@ purple_certificate_register_pool(PurpleC
 
 	/* Initialize the pool if needed */
 	if (pool->init) {
+		gboolean success;
+
 		success = pool->init();
-	} else {
-		success = TRUE;
+		if (!success)
+			return FALSE;
 	}
-	
-	if (success) {
-		/* Register the Pool */
-		cert_pools = g_list_prepend(cert_pools, pool);
 
-		/* TODO: Emit a signal that the pool got registered */
+	/* Register the Pool */
+	cert_pools = g_list_prepend(cert_pools, pool);
 
-		PURPLE_DBUS_REGISTER_POINTER(pool, PurpleCertificatePool);
-		purple_signal_register(pool, /* Signals emitted from pool */
-				       "certificate-stored",
-				       purple_marshal_VOID__POINTER_POINTER,
-				       NULL, /* No callback return value */
-				       2,    /* Two non-data arguments */
-				       purple_value_new(PURPLE_TYPE_SUBTYPE,
-							PURPLE_SUBTYPE_CERTIFICATEPOOL),
-				       purple_value_new(PURPLE_TYPE_STRING));
+	/* TODO: Emit a signal that the pool got registered */
 
-		purple_signal_register(pool, /* Signals emitted from pool */
-				       "certificate-deleted",
-				       purple_marshal_VOID__POINTER_POINTER,
-				       NULL, /* No callback return value */
-				       2,    /* Two non-data arguments */
-				       purple_value_new(PURPLE_TYPE_SUBTYPE,
-							PURPLE_SUBTYPE_CERTIFICATEPOOL),
-				       purple_value_new(PURPLE_TYPE_STRING));
+	PURPLE_DBUS_REGISTER_POINTER(pool, PurpleCertificatePool);
+	purple_signal_register(pool, /* Signals emitted from pool */
+			       "certificate-stored",
+			       purple_marshal_VOID__POINTER_POINTER,
+			       NULL, /* No callback return value */
+			       2,    /* Two non-data arguments */
+			       purple_value_new(PURPLE_TYPE_SUBTYPE,
+						PURPLE_SUBTYPE_CERTIFICATEPOOL),
+			       purple_value_new(PURPLE_TYPE_STRING));
 
+	purple_signal_register(pool, /* Signals emitted from pool */
+			       "certificate-deleted",
+			       purple_marshal_VOID__POINTER_POINTER,
+			       NULL, /* No callback return value */
+			       2,    /* Two non-data arguments */
+			       purple_value_new(PURPLE_TYPE_SUBTYPE,
+						PURPLE_SUBTYPE_CERTIFICATEPOOL),
+			       purple_value_new(PURPLE_TYPE_STRING));
 
-		purple_debug_info("certificate",
-			  "CertificatePool %s registered\n",
-			  pool->name);
-		return TRUE;
-	} else {
-		return FALSE;
-	}
-	
-	/* Control does not reach this point */
+	purple_debug_info("certificate",
+		  "CertificatePool %s registered\n",
+		  pool->name);
+
+	return TRUE;
 }
 
 gboolean
============================================================
--- libpurple/plugins/ssl/ssl-gnutls.c	c02ee7f053bf0d96e5134b95a7e426e4d97c6e52
+++ libpurple/plugins/ssl/ssl-gnutls.c	b1e7f1444a472264f44af466a4063697f2158a44
@@ -512,9 +512,8 @@ x509_import_from_file(const gchar * file
 	dt.data = (unsigned char *) buf;
 	dt.size = buf_sz;
 
-	/* Perform the conversion */
-	crt = x509_import_from_datum(dt,
-				     GNUTLS_X509_FMT_PEM); // files should be in PEM format
+	/* Perform the conversion; files should be in PEM format */
+	crt = x509_import_from_datum(dt, GNUTLS_X509_FMT_PEM);
 
 	/* Cleanup */
 	g_free(buf);
============================================================
--- libpurple/protocols/bonjour/bonjour.c	eda33f3853fc4c25c2067eadf365f6ce0cb161da
+++ libpurple/protocols/bonjour/bonjour.c	961e8c5acba0264e7e2a9e9ecf0d1b0225bae9fe
@@ -43,14 +43,6 @@
 #include "buddy.h"
 #include "bonjour_ft.h"
 
-/*
- * TODO: Should implement an add_buddy callback that removes the buddy
- *       from the local list.  Bonjour manages buddies for you, and
- *       adding someone locally by hand is stupid.  Or, maybe even better,
- *       if a PRPL does not have an add_buddy callback then do not allow
- *       users to add buddies.
- */
-
 static char *default_firstname;
 static char *default_lastname;
 static char *default_hostname;
@@ -260,6 +252,25 @@ bonjour_set_status(PurpleAccount *accoun
 	g_free(stripped);
 }
 
+/*
+ * The add_buddy callback removes the buddy from the local list.
+ * Bonjour manages buddies for you, and adding someone locally by
+ * hand is stupid.  Perhaps we should change libpurple not to allow adding
+ * if there is no add_buddy callback.
+ */
+static void
+bonjour_fake_add_buddy(PurpleConnection *pc, PurpleBuddy *buddy, PurpleGroup *group) {
+	purple_debug_error("bonjour", "Buddy '%s' manually added; removing.  "
+				      "Bonjour buddies must be discovered and not manually added.\n",
+			   purple_buddy_get_name(buddy));
+
+	/* I suppose we could alert the user here, but it seems unnecessary. */
+
+	/* If this causes problems, it can be moved to an idle callback */
+	purple_blist_remove_buddy(buddy);
+}
+
+
 static void bonjour_remove_buddy(PurpleConnection *pc, PurpleBuddy *buddy, PurpleGroup *group) {
 	if (buddy->proto_data) {
 		bonjour_buddy_delete(buddy->proto_data);
@@ -303,7 +314,7 @@ bonjour_convo_closed(PurpleConnection *c
 	PurpleBuddy *buddy = purple_find_buddy(connection->account, who);
 	BonjourBuddy *bb;
 
-	if (buddy == NULL)
+	if (buddy == NULL || buddy->proto_data == NULL)
 	{
 		/*
 		 * This buddy is not in our buddy list, and therefore does not really
@@ -370,6 +381,11 @@ bonjour_tooltip_text(PurpleBuddy *buddy,
 	if (message != NULL)
 		purple_notify_user_info_add_pair(user_info, _("Message"), message);
 
+	if (bb == NULL) {
+		purple_debug_error("bonjour", "Got tooltip request for a buddy without protocol data.\n");
+		return;
+	}
+
 	/* Only show first/last name if there is a nickname set (to avoid duplication) */
 	if (bb->nick != NULL) {
 		if (bb->first != NULL)
@@ -425,7 +441,7 @@ static PurplePluginProtocolInfo prpl_inf
 	bonjour_set_status,                                      /* set_status */
 	NULL,                                                    /* set_idle */
 	NULL,                                                    /* change_passwd */
-	NULL,                                                    /* add_buddy */
+	bonjour_fake_add_buddy,                                  /* add_buddy */
 	NULL,                                                    /* add_buddies */
 	bonjour_remove_buddy,                                    /* remove_buddy */
 	NULL,                                                    /* remove_buddies */
============================================================
--- libpurple/protocols/bonjour/issues.txt	5873164504cdae2f2e05435542b939b3d908d194
+++ libpurple/protocols/bonjour/issues.txt	64f4a0ee1bfdb31b61fd102da2ed7b779d85558e
@@ -1,6 +1,5 @@
 ==========================================
 ============= Known issues ===============
 ==========================================
 
-* File transfers
 * Typing notifications
============================================================
--- libpurple/protocols/bonjour/jabber.c	968694131fdb8095e1f46886ccaf4efe7c3a34d7
+++ libpurple/protocols/bonjour/jabber.c	d5513158e2d3c0eef3c29dfebfeebee75f801672
@@ -19,6 +19,9 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
+
+#include "internal.h"
+
 #ifndef _WIN32
 #include <net/if.h>
 #include <sys/ioctl.h>
@@ -33,7 +36,6 @@
 #include <unistd.h>
 #include <fcntl.h>
 
-#include "internal.h"
 #include "network.h"
 #include "eventloop.h"
 #include "connection.h"
@@ -618,7 +620,7 @@ bonjour_jabber_start(BonjourJabber *data
 	}
 
 	memset(&my_addr, 0, sizeof(struct sockaddr_in));
-	my_addr.sin_family = PF_INET;
+	my_addr.sin_family = AF_INET;
 
 	/* Attempt to find a free port */
 	bind_successful = FALSE;
============================================================
--- libpurple/protocols/bonjour/mdns_avahi.c	5cd991c2ee38f86b764210de978cbc1f48c8a796
+++ libpurple/protocols/bonjour/mdns_avahi.c	03c3c9bf354d71b0c4f82b07d072e2256f7f43e9
@@ -155,7 +155,7 @@ _browser_callback(AvahiServiceBrowser *b
 			/* Make sure it isn't us */
 			if (purple_utf8_strcasecmp(name, account->username) != 0) {
 				if (!avahi_service_resolver_new(avahi_service_browser_get_client(b),
-						interface, protocol, name, type, domain, AVAHI_PROTO_UNSPEC,
+						interface, protocol, name, type, domain, AVAHI_PROTO_INET,
 						0, _resolver_callback, account)) {
 					purple_debug_warning("bonjour", "_browser_callback -- Error initiating resolver: %s\n",
 						avahi_strerror(avahi_client_errno(avahi_service_browser_get_client(b))));
@@ -315,14 +315,14 @@ gboolean _mdns_publish(BonjourDnsSd *dat
 		case PUBLISH_START:
 			publish_result = avahi_entry_group_add_service_strlst(
 				idata->group, AVAHI_IF_UNSPEC,
-				AVAHI_PROTO_UNSPEC, 0,
+				AVAHI_PROTO_INET, 0,
 				purple_account_get_username(data->account),
 				ICHAT_SERVICE, NULL, NULL, data->port_p2pj, lst);
 			break;
 		case PUBLISH_UPDATE:
 			publish_result = avahi_entry_group_update_service_txt_strlst(
 				idata->group, AVAHI_IF_UNSPEC,
-				AVAHI_PROTO_UNSPEC, 0,
+				AVAHI_PROTO_INET, 0,
 				purple_account_get_username(data->account),
 				ICHAT_SERVICE, NULL, lst);
 			break;
@@ -354,7 +354,7 @@ gboolean _mdns_browse(BonjourDnsSd *data
 
 	g_return_val_if_fail(idata != NULL, FALSE);
 
-	idata->sb = avahi_service_browser_new(idata->client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, ICHAT_SERVICE, NULL, 0, _browser_callback, data->account);
+	idata->sb = avahi_service_browser_new(idata->client, AVAHI_IF_UNSPEC, AVAHI_PROTO_INET, ICHAT_SERVICE, NULL, 0, _browser_callback, data->account);
 	if (!idata->sb) {
 
 		purple_debug_error("bonjour",
@@ -400,7 +400,7 @@ gboolean _mdns_set_buddy_icon_data(Bonjo
 				purple_account_get_username(data->account));
 
 		ret = avahi_entry_group_add_record(idata->buddy_icon_group, AVAHI_IF_UNSPEC,
-			AVAHI_PROTO_UNSPEC, flags, svc_name,
+			AVAHI_PROTO_INET, flags, svc_name,
 			AVAHI_DNS_CLASS_IN, AVAHI_DNS_TYPE_NULL, 120, avatar_data, avatar_len);
 
 		g_free(svc_name);
@@ -486,7 +486,7 @@ void _mdns_retrieve_buddy_icon(BonjourBu
 
 	name = g_strdup_printf("%s." ICHAT_SERVICE "local", buddy->name);
 	idata->buddy_icon_rec_browser = avahi_record_browser_new(session_idata->client, AVAHI_IF_UNSPEC,
-		AVAHI_PROTO_UNSPEC, name, AVAHI_DNS_CLASS_IN, AVAHI_DNS_TYPE_NULL, 0,
+		AVAHI_PROTO_INET, name, AVAHI_DNS_CLASS_IN, AVAHI_DNS_TYPE_NULL, 0,
 		_buddy_icon_record_cb, buddy);
 	g_free(name);
 
============================================================
--- libpurple/protocols/irc/parse.c	9689a5d850a6fe49e76a9f79f29846fffd18e7b2
+++ libpurple/protocols/irc/parse.c	24918c19b53c5d6aea472d0ff6df5fd8713e0ede
@@ -64,7 +64,7 @@ static struct _irc_msg {
 	{ "318", "nt:", irc_msg_endwhois },	/* End of WHOIS			*/
 	{ "319", "nn:", irc_msg_whois },	/* Whois channels		*/
 	{ "320", "nn:", irc_msg_whois },	/* Whois (fn ident)		*/
-	{ "314", "nnvvv:", irc_msg_whois },	/* Whowas user			*/
+	{ "314", "nnnvv:", irc_msg_whois },	/* Whowas user			*/
 	{ "369", "nt:", irc_msg_endwhois },	/* End of WHOWAS		*/
 	{ "321", "*", irc_msg_list },		/* Start of list		*/
 	{ "322", "ncv:", irc_msg_list },	/* List.			*/
============================================================
--- libpurple/protocols/jabber/caps.c	0f200abbdb34bb03989084dfb24deb3d64fe13bd
+++ libpurple/protocols/jabber/caps.c	ce2b1c9933e7c617f55ff2da3801ada27fcb0c36
@@ -257,18 +257,23 @@ static JabberCapsClientInfo *jabber_caps
 
 /* this function assumes that all information is available locally */
 static JabberCapsClientInfo *jabber_caps_collect_info(const char *node, const char *ver, GList *ext) {
-	JabberCapsClientInfo *result = g_new0(JabberCapsClientInfo, 1);
+	JabberCapsClientInfo *result;
 	JabberCapsKey *key = g_new0(JabberCapsKey, 1);
 	JabberCapsValue *caps;
 	GList *iter;
-	
+
 	key->node = (char *)node;
 	key->ver = (char *)ver;
-	
+
 	caps = g_hash_table_lookup(capstable,key);
-	
+
 	g_free(key);
-	
+
+	if (caps == NULL)
+		return NULL;
+
+	result = g_new0(JabberCapsClientInfo, 1);
+
 	/* join all information */
 	for(iter = caps->identities; iter; iter = g_list_next(iter)) {
 		JabberCapsIdentity *id = iter->data;
============================================================
--- libpurple/protocols/jabber/google.c	23297cd56eef2e284e28e32d5713b401a7c90091
+++ libpurple/protocols/jabber/google.c	a0d13b8f6207182f5fc8f10066881688229d698c
@@ -532,6 +532,6 @@ char *jabber_google_presence_outgoing(Pu
 
 char *jabber_google_presence_outgoing(PurpleStatus *tune)
 {
-	char *ret = g_strdup_printf("♫ %s", purple_status_get_attr_string(tune, PURPLE_TUNE_TITLE));
-	return ret;
+	const char *attr = purple_status_get_attr_string(tune, PURPLE_TUNE_TITLE);
+	return attr ? g_strdup_printf("♫ %s", attr) : g_strdup("");
 }
============================================================
--- libpurple/protocols/jabber/presence.c	244be4e1a8a142434cae293487e2814f770094f7
+++ libpurple/protocols/jabber/presence.c	b1c201c40e38e907e2563e547d977239ad8d4bc1
@@ -99,8 +99,6 @@ void jabber_presence_send(PurpleAccount 
 {
 	PurpleConnection *gc = NULL;
 	JabberStream *js = NULL;
-	gboolean disconnected;
-	int primitive;
 	xmlnode *presence, *x, *photo;
 	char *stripped = NULL;
 	JabberBuddyState state;
@@ -108,23 +106,27 @@ void jabber_presence_send(PurpleAccount 
 	const char *artist = NULL, *title = NULL, *source = NULL, *uri = NULL, *track = NULL;
 	int length = -1;
 	gboolean allowBuzz;
-	PurplePresence *p = purple_account_get_presence(account);
+	PurplePresence *p;
 	PurpleStatus *tune;
 
+	if (purple_account_is_disconnected(account))
+		return;
+
+	p = purple_account_get_presence(account);
 	if (NULL == status) {
 		status = purple_presence_get_active_status(p);
 	}
 
-	if(!purple_status_is_active(status))
-		return;
+	if (purple_status_is_exclusive(status)) {
+		/* An exclusive status can't be deactivated. You should just
+		 * activate some other exclusive status. */
+		if (!purple_status_is_active(status))
+			return;
+	} else {
+		/* Work with the exclusive status. */
+		status = purple_presence_get_active_status(p);
+	}
 
-	disconnected = purple_account_is_disconnected(account);
-
-	if(disconnected)
-		return;
-
-	primitive = purple_status_type_get_primitive(purple_status_get_type(status));
-
 	gc = purple_account_get_connection(account);
 	js = gc->proto_data;
 
@@ -374,23 +376,26 @@ static void jabber_presence_set_capabili
 static void jabber_presence_set_capabilities(JabberCapsClientInfo *info, gpointer user_data) {
 	JabberPresenceCapabilities *userdata = user_data;
 	GList *iter;
-	
+
 	if(userdata->jbr->caps)
 		jabber_caps_free_clientinfo(userdata->jbr->caps);
 	userdata->jbr->caps = info;
-	
-	for(iter = info->features; iter; iter = g_list_next(iter)) {
-		if(!strcmp((const char*)iter->data, "http://jabber.org/protocol/commands")) {
-			JabberIq *iq = jabber_iq_new_query(userdata->js, JABBER_IQ_GET, "http://jabber.org/protocol/disco#items");
-			xmlnode *query = xmlnode_get_child_with_namespace(iq->node,"query","http://jabber.org/protocol/disco#items");
-			xmlnode_set_attrib(iq->node, "to", userdata->from);
-			xmlnode_set_attrib(query, "node", "http://jabber.org/protocol/commands");
-			
-			jabber_iq_set_callback(iq, jabber_adhoc_disco_result_cb, NULL);
-			jabber_iq_send(iq);
-			break;
+
+	if (info) {
+		for(iter = info->features; iter; iter = g_list_next(iter)) {
+			if(!strcmp((const char*)iter->data, "http://jabber.org/protocol/commands")) {
+				JabberIq *iq = jabber_iq_new_query(userdata->js, JABBER_IQ_GET, "http://jabber.org/protocol/disco#items");
+				xmlnode *query = xmlnode_get_child_with_namespace(iq->node,"query","http://jabber.org/protocol/disco#items");
+				xmlnode_set_attrib(iq->node, "to", userdata->from);
+				xmlnode_set_attrib(query, "node", "http://jabber.org/protocol/commands");
+
+				jabber_iq_set_callback(iq, jabber_adhoc_disco_result_cb, NULL);
+				jabber_iq_send(iq);
+				break;
+			}
 		}
 	}
+
 	g_free(userdata->from);
 	g_free(userdata);
 }
============================================================
--- libpurple/protocols/msn/notification.c	676f7706c7955caf650894a4fab205d179155300
+++ libpurple/protocols/msn/notification.c	40e305f3fe0c683ee05afa2125c7abd2ccebb7d7
@@ -1181,14 +1181,27 @@ rea_cmd(MsnCmdProc *cmdproc, MsnCommand 
 static void
 rea_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
 {
-	/* TODO: This might be for us too */
-
 	MsnSession *session;
+	PurpleAccount *account;
 	PurpleConnection *gc;
 	const char *friendly;
+	char *username;
 
 	session = cmdproc->session;
-	gc = session->account->gc;
+	account = session->account;
+	username = g_strdup(purple_normalize(account,
+						purple_account_get_username(account)));
+
+	/* Only set display name if our *own* friendly name changed! */
+	if (strcmp(username, purple_normalize(account, cmd->params[2])))
+	{
+		g_free(username);
+		return;
+	}
+
+	g_free(username);
+
+	gc = account->gc;
 	friendly = purple_url_decode(cmd->params[3]);
 
 	purple_connection_set_display_name(gc, friendly);
============================================================
--- libpurple/protocols/msnp9/msn.c	8a2a52639186e41cc15927c380d16fbf97aaa490
+++ libpurple/protocols/msnp9/msn.c	bd5f30fcf5fc40abee97ce8f75d41ac953a577ed
@@ -1920,7 +1920,7 @@ msn_got_photo(PurpleUtilFetchUrlData *ur
 		purple_debug_warning("msn", "invalid connection. ignoring buddy photo info.\n");
 		g_free(stripped);
 		g_free(url_buffer);
-		g_free(user_info);
+		purple_notify_user_info_destroy(user_info);
 		g_free(info_data->name);
 		g_free(info_data);
 		g_free(photo_url_text);
============================================================
--- libpurple/protocols/msnp9/nexus.c	70d0ba8752f9b33cda58265abab0c45ea76519eb
+++ libpurple/protocols/msnp9/nexus.c	448cdbc53485623d080dd54ad33f60147ba379ce
@@ -338,7 +338,7 @@ login_connect_cb(gpointer data, PurpleSs
 		g_strdup(purple_url_encode(purple_account_get_username(session->account)));
 
 	password =
-		g_strndup(purple_url_encode(purple_connection_get_password(session->account->gc)), 16);
+		g_strdup(purple_url_encode(purple_connection_get_password(session->account->gc)));
 
 	ctint = strtoul((char *)g_hash_table_lookup(nexus->challenge_data, "ct"), NULL, 10) + 200;
 
============================================================
--- libpurple/protocols/msnp9/notification.c	dd690580185c00b68db4240fd22732b5e3770c36
+++ libpurple/protocols/msnp9/notification.c	ee83db2707a80aea2a2bfa6453a4a5dba6b2117b
@@ -235,6 +235,8 @@ usr_cmd(MsnCmdProc *cmdproc, MsnCommand 
 		/* OK */
 		const char *friendly = purple_url_decode(cmd->params[3]);
 
+		session->passport_info.verified = atoi(cmd->params[4]);
+
 		purple_connection_set_display_name(gc, friendly);
 
 		msn_session_set_login_step(session, MSN_LOGIN_STEP_SYN);
@@ -780,14 +782,27 @@ rea_cmd(MsnCmdProc *cmdproc, MsnCommand 
 static void
 rea_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
 {
-	/* TODO: This might be for us too */
-
 	MsnSession *session;
+	PurpleAccount *account;
 	PurpleConnection *gc;
 	const char *friendly;
+	char *username;
 
 	session = cmdproc->session;
-	gc = session->account->gc;
+	account = session->account;
+	username = g_strdup(purple_normalize(account,
+						purple_account_get_username(account)));
+
+	/* Only set display name if our *own* friendly name changed! */
+	if (strcmp(username, purple_normalize(account, cmd->params[2])))
+	{
+		g_free(username);
+		return;
+	}
+
+	g_free(username);
+
+	gc = account->gc;
 	friendly = purple_url_decode(cmd->params[3]);
 
 	purple_connection_set_display_name(gc, friendly);
============================================================
--- libpurple/protocols/msnp9/session.h	d5bec9bc0a92062231a3af894739157d9a8766c1
+++ libpurple/protocols/msnp9/session.h	dfa5899b4e3af635d628382342b68851745022d3
@@ -114,7 +114,7 @@ struct _MsnSession
 		char *file;
 		char *client_ip;
 		int client_port;
-
+		int verified;
 	} passport_info;
 };
 
============================================================
--- libpurple/protocols/msnp9/user.c	b166fe2436a48a3a6ddabeaa6491a1daba57b6c5
+++ libpurple/protocols/msnp9/user.c	92a67c2d9914c87de46146f76f97a1bd8fed8258
@@ -126,16 +126,23 @@ msn_user_set_friendly_name(MsnUser *user
 msn_user_set_friendly_name(MsnUser *user, const char *name)
 {
 	MsnCmdProc *cmdproc;
+	MsnSession *session;
+	const char *encoded;
 
 	g_return_if_fail(user != NULL);
 
-	if (user->friendly_name && strcmp(user->friendly_name, name)) {
+	encoded = purple_url_encode(name);
+	session = user->userlist->session;
+
+	if (user->friendly_name && strcmp(user->friendly_name, name)
+		&& (strlen(encoded) < 387) && session->passport_info.verified &&
+		(user->list_op & MSN_LIST_FL_OP)) {
 		/* copy the new name to the server list, but only when new */
 		/* should we check this more thoroughly? */
-		cmdproc = user->userlist->session->notification->cmdproc;
+		cmdproc = session->notification->cmdproc;
 		msn_cmdproc_send(cmdproc, "REA", "%s %s",
 						 user->passport,
-						 purple_url_encode(name));
+						 encoded);
 	}
 
 	g_free(user->friendly_name);
============================================================
--- libpurple/protocols/myspace/myspace.c	7c59b709b52ea365e6a86fb6a645ccf810d3d7b9
+++ libpurple/protocols/myspace/myspace.c	e3ca8584f367127ce0ad10203e8117f475173e0f
@@ -1047,15 +1047,18 @@ msim_set_status(PurpleAccount *account, 
 msim_set_status(PurpleAccount *account, PurpleStatus *status)
 {
 	PurpleStatusType *type;
+	PurplePresence *pres;
 	MsimSession *session;
 	guint status_code;
-	gchar *statstring;
+	const gchar *message;
+	gchar *stripped;
 
 	session = (MsimSession *)account->gc->proto_data;
 
 	g_return_if_fail(MSIM_SESSION_VALID(session));
 
 	type = purple_status_get_type(status);
+	pres = purple_status_get_presence(status);
 
 	switch (purple_status_type_get_primitive(type)) {
 		case PURPLE_STATUS_AVAILABLE:
@@ -1083,16 +1086,20 @@ msim_set_status(PurpleAccount *account, 
 			break;
 	}
 
-	statstring = (gchar *)purple_status_get_attr_string(status, "message");
+	message = purple_status_get_attr_string(status, "message");
 
-	if (!statstring) {
-		statstring = "";
-	}
+	/* Status strings are plain text. */
+	if (message != NULL)
+		stripped = purple_markup_strip_html(message);
+	else
+		stripped = g_strdup("");
 
-	/* Status strings are plain text. */
-	statstring = purple_markup_strip_html(statstring);
+	msim_set_status_code(session, status_code, stripped);
 
-	msim_set_status_code(session, status_code, statstring);
+	/* If we should be idle, set that status. Time is irrelevant here. */
+	if (purple_presence_is_idle(pres) && status_code != MSIM_STATUS_CODE_OFFLINE_OR_HIDDEN)
+		msim_set_idle(account->gc, 1);
+
 }
 
 /** Go idle. */
@@ -1100,6 +1107,7 @@ msim_set_idle(PurpleConnection *gc, int 
 msim_set_idle(PurpleConnection *gc, int time)
 {
 	MsimSession *session;
+	PurpleStatus *status;
 
 	g_return_if_fail(gc != NULL);
 
@@ -1107,16 +1115,30 @@ msim_set_idle(PurpleConnection *gc, int 
 
 	g_return_if_fail(MSIM_SESSION_VALID(session));
 
+	status = purple_account_get_active_status(session->account);
+
 	if (time == 0) {
 		/* Going back from idle. In msim, idle is mutually exclusive 
 		 * from the other states (you can only be away or idle, but not
-		 * both, for example), so by going non-idle I go online.
+		 * both, for example), so by going non-idle I go back to what
+		 * libpurple says I should be.
 		 */
-		/* TODO: find out how to keep old status string? */
-		msim_set_status_code(session, MSIM_STATUS_CODE_ONLINE, g_strdup(""));
+		msim_set_status(session->account, status);
 	} else {
+		const gchar *message;
+		gchar *stripped;
+
+		/* Set the idle message to the status message from the real
+		 * current status.
+		 */
+		message = purple_status_get_attr_string(status, "message");
+		if (message != NULL)
+			stripped = purple_markup_strip_html(message);
+		else
+			stripped = g_strdup("");
+
 		/* msim doesn't support idle time, so just go idle */
-		msim_set_status_code(session, MSIM_STATUS_CODE_IDLE, g_strdup(""));
+		msim_set_status_code(session, MSIM_STATUS_CODE_IDLE, stripped);
 	}
 }
 
@@ -1894,7 +1916,7 @@ msim_incoming_status(MsimSession *sessio
 		purple_debug_info("msim", "msim_status: found buddy %s\n", username);
 	}
 
-	if (status_headline) {
+	if (status_headline && strcmp(status_headline, "") != 0) {
 		/* The status headline is plaintext, but libpurple treats it as HTML,
 		 * so escape any HTML characters to their entity equivalents. */
 		status_headline_escaped = g_markup_escape_text(status_headline, strlen(status_headline));
============================================================
--- libpurple/prpl.c	81d8dcb3b154836fc2ad42d35f6a905e3241004b
+++ libpurple/prpl.c	0949bb9d1629db6a498bb1da3fc532329c2704a0
@@ -258,8 +258,8 @@ purple_prpl_change_account_status(Purple
 								PurpleStatus *old_status, PurpleStatus *new_status)
 {
 	g_return_if_fail(account    != NULL);
-	g_return_if_fail(old_status != NULL);
 	g_return_if_fail(new_status != NULL);
+	g_return_if_fail(!purple_status_is_exclusive(new_status) || old_status != NULL);
 
 	do_prpl_change_account_status(account, old_status, new_status);
 
============================================================
--- libpurple/xmlnode.c	70ea5575d11fa21ed040d3c7bdbcb71b2f32d17a
+++ libpurple/xmlnode.c	c75c4e9728a2d97dffe3409ef58302d1df1e6ea5
@@ -303,7 +303,7 @@ const char *xmlnode_get_prefix(xmlnode *
 
 const char *xmlnode_get_prefix(xmlnode *node)
 {
-	g_return_val_if_fail(node != NULL, NULL);                                   
+	g_return_val_if_fail(node != NULL, NULL);
 	return node->prefix;
 }
 
@@ -346,6 +346,9 @@ xmlnode_free(xmlnode *node)
 	g_free(node->data);
 	g_free(node->xmlns);
 
+	if(node->namespace_map)
+		g_hash_table_destroy(node->namespace_map);
+
 	PURPLE_DBUS_UNREGISTER_POINTER(node);
 	g_free(node);
 }
============================================================
--- pidgin/gtkscrollbook.c	5a53af6d62a64b4ca8b24af84decf0161fb1dbcc
+++ pidgin/gtkscrollbook.c	ae0527657ed6d97d2b6b4a560aba8dda7467e608
@@ -146,15 +146,13 @@ pidgin_scroll_book_add(GtkContainer *con
 static void
 pidgin_scroll_book_add(GtkContainer *container, GtkWidget *widget)
 {
-	GList *children;
 	PidginScrollBook *scroll_book;
 
 	g_return_if_fail(GTK_IS_WIDGET (widget));
 	g_return_if_fail (widget->parent == NULL);
 
 	scroll_book = PIDGIN_SCROLL_BOOK(container);
-	children = scroll_book->children;
-	children = g_list_append(children, widget);
+	scroll_book->children = g_list_append(scroll_book->children, widget);
 	gtk_widget_show(widget);
 	gtk_notebook_append_page(GTK_NOTEBOOK(PIDGIN_SCROLL_BOOK(container)->notebook), widget, NULL);
 	page_count_change_cb(PIDGIN_SCROLL_BOOK(container));
@@ -176,10 +174,10 @@ pidgin_scroll_book_remove(GtkContainer *
 		child = children->data;
 		if (child == widget) {
 			gtk_widget_unparent (widget);
-			children = g_list_remove_link (scroll_book->children, children);
-			g_list_free(children);
+			scroll_book->children = g_list_delete_link(scroll_book->children, children);
 			break;
 		}
+		children = children->next;
 	}
 
 	page = gtk_notebook_page_num(GTK_NOTEBOOK(PIDGIN_SCROLL_BOOK(container)->notebook), widget);
@@ -194,7 +192,9 @@ pidgin_scroll_book_forall(GtkContainer *
 			   GtkCallback callback,
 			   gpointer callback_data)
 {
+#if 0
 	GList *children;
+#endif
 	PidginScrollBook *scroll_book;
 
 	g_return_if_fail(GTK_IS_CONTAINER(container));
@@ -206,6 +206,7 @@ pidgin_scroll_book_forall(GtkContainer *
 		(*callback)(scroll_book->notebook, callback_data);
 	}
 
+#if 0
 	children = scroll_book->children;
 
 	while (children) {
@@ -214,6 +215,7 @@ pidgin_scroll_book_forall(GtkContainer *
 		children = children->next;
 		(*callback)(child, callback_data);
 	}
+#endif
 }
 
 static void
============================================================
--- pidgin/plugins/pidginrc.c	e11616e622d706c4e5f2ec9d376699a603f4ded7
+++ pidgin/plugins/pidginrc.c	48ae157fd08c4e356899bb202d8c897ec639699e
@@ -494,7 +494,7 @@ purplerc_get_config_frame(PurplePlugin *
 	gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
 
 	tmp = g_strdup_printf(_("Write settings to %s%sgtkrc-2.0"),
-	                      homepath, G_DIR_SEPARATOR_S);
+	                      homepath, G_DIR_SEPARATOR_S ".purple" G_DIR_SEPARATOR_S);
 	check = gtk_button_new_with_label(tmp);
 	g_free(tmp);
 	gtk_box_pack_start(GTK_BOX(hbox), check, FALSE, FALSE, 0);
============================================================
--- pidgin/plugins/timestamp.c	327c567426f9bac36e17fe26f032d90c9bcdc2c7
+++ pidgin/plugins/timestamp.c	2f1c0759e10b2f1f43897930d2913c3184d39cf4
@@ -49,11 +49,17 @@ timestamp_display(PurpleConversation *co
 	const char *mdate;
 	int y, height;
 	GdkRectangle rect;
-	
+
 	/* display timestamp */
 	mdate = purple_utf8_strftime(then == 0 ? "%H:%M" : "\n%H:%M",
 		localtime(&now));
 	gtk_text_buffer_get_end_iter(buffer, &iter);
+
+	if (gtk_text_tag_table_lookup(gtk_text_buffer_get_tag_table(buffer), "TIMESTAMP") == NULL)
+		gtk_text_buffer_create_tag(buffer, "TIMESTAMP",
+			"foreground", "#888888", "justification", GTK_JUSTIFY_CENTER,
+			"weight", PANGO_WEIGHT_BOLD, NULL);
+
 	gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, mdate,
 		strlen(mdate), "TIMESTAMP", NULL);
 
@@ -95,17 +101,9 @@ timestamp_new_convo(PurpleConversation *
 static void
 timestamp_new_convo(PurpleConversation *conv)
 {
-	PidginConversation *gtk_conv = PIDGIN_CONVERSATION(conv);
-	GtkTextBuffer *buffer;
-
 	if (!g_list_find(purple_get_conversations(), conv))
 		return;
 
-	buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtk_conv->imhtml));
-	gtk_text_buffer_create_tag(buffer, "TIMESTAMP",
-		"foreground", "#888888", "justification", GTK_JUSTIFY_CENTER,
-		"weight", PANGO_WEIGHT_BOLD, NULL);
-
 	purple_conversation_set_data(conv, "timestamp-last", GINT_TO_POINTER(0));
 }
 


More information about the Commits mailing list