[Gossip-dev] ANNOUNCE: Gossip 0.13

Paul van Tilburg paul at luon.net
Thu Aug 3 12:11:09 CEST 2006


On Thu, Aug 03, 2006 at 09:49:56AM +0200, Richard Hult wrote:
> [...] The next thing to do is to do a diff between 0.12.x and
> 0.13 to see what changed.
> 
> I will try to look into this tonight. It would really help if you could
> try gossip from a date in the middle of 0.12 and 0.13, to see when it
> happened (maybe even half it again once or twice). Or do you already
> know when it started happening?

I have performed a binary search on the period from the 0.12 (July 5) until
the 0.13 release (July 31). The results:

gossip-20060705 ok
gossip-20060715 ok
gossip-20060720 ok
gossip-20060721 not ok
gossip-20060722 not ok
gossip-20060724 not ok

I have attached a cleaned up diff of the changes between 2006-05-20 and
2006-07-21 to this mail.  Unfortunately it was a day in which a lot was
done on the Gossip tree so the diff is quite large.

Regards,
Paul

-- 
Student @ Eindhoven                         | email: paul at luon.net
University of Technology, The Netherlands   | JID: paul at luon.net
>>> Using the Power of Debian GNU/Linux <<< | GnuPG key ID: 0x50064181
-------------- next part --------------
diff -Nabur gossip-20060720-ok/ChangeLog gossip-20060721-notok/ChangeLog
--- gossip-20060720-ok/ChangeLog	2006-07-19 12:13:43.000000000 +0200
+++ gossip-20060721-notok/ChangeLog	2006-07-20 16:50:56.000000000 +0200
@@ -1,3 +1,106 @@
+2006-07-20  Richard Hult  <richard at imendio.com>
+
+	* src/gossip-main.c:
+	* src/gossip-ui-utils.c: Move setting the window icon here.
+	
+2006-07-20  Richard Hult  <richard at imendio.com>
+
+	* protocols/jabber/Makefile.am: Remove unsed bits.
+	* protocols/jabber/gossip-jabber-ft.c: Add backend ifdefs.
+
+	* src/gossip-add-contact-window.c: Fix build.
+
+2006-07-20  Richard Hult  <richard at imendio.com>
+
+	* src/gossip-avatar-image.c: Add backend ifdefs.
+
+2006-07-20  Richard Hult  <richard at imendio.com>
+
+	* src/gossip-image-chooser.c: Add backend ifdefs.
+
+2006-07-20  Richard Hult  <richard at imendio.com>
+
+	* src/gossip-ui-utils.c: Add gossip_link_button_new().
+        * src/gossip-subscription-dialog.c:
+        * src/gossip-contact-info-dialog.c: Use it here.
+
+2006-07-20  Richard Hult  <richard at imendio.com>
+
+        * src/gossip-main.c: Only use gnome program when available.
+
+        * src/gossip-transport-add-window.c:
+	* src/gossip-transport-accounts-window.c: 
+	* src/gossip-accounts-dialog.c: Remove unused includes.
+	
+	* src/gossip-new-account-window.c: Protect with HAVE_GNOME until
+	we have GtkAssistant. Remove unused includes.
+
+2006-07-20  Richard Hult  <richard at imendio.com>
+
+        * src/gossip-cell-renderer-text.c: Simplify a bit and try to get
+	the cell always show two lines... probably won't help.
+
+2006-07-20  Richard Hult  <richard at imendio.com>
+
+        * src/gossip-contact-groups.c: Remove unused includes.
+	* src/gossip-throbber.c: Use G_DEFINE_TYPE, remove gnome includes.
+	* src/gossip-geometry.c: Tweak the positioning so that it won't
+	put windows outside the screen.
+
+2006-07-20  Richard Hult  <richard at imendio.com>
+
+        * src/gossip-status-presets.c: Remove unused includes and clean up
+	a bit.
+
+2006-07-20  Richard Hult  <richard at imendio.com>
+
+        * src/gossip-vcard-dialog.c: Only use the thumbnail stuff with
+	GNOME (should probably remove it completely...). Remove unused
+	includes.
+
+        * src/gossip-about-dialog.c: Make the authors etc info static.
+
+	* configure.ac: Fix the gnome backend checks.
+	* src/Makefile.am: Use backend flags.
+	* src/gossip-main.c: Work a bit better without dbus.
+
+2006-07-20  Richard Hult  <richard at imendio.com>
+
+	* libgossip/gossip-utils.[ch]: Remove sha.
+	
+	* libgossip/gossip-account-manager.c:
+	* libgossip/gossip-chatroom-manager.c: Don't include gnome-vfs,
+	it's not used here.
+
+2006-07-20  Richard Hult  <richard at imendio.com>
+
+	* configure.ac: Remove gcrypt check and fix the xss check.
+
+2006-07-20  Richard Hult  <richard at imendio.com>
+
+	* configure.ac: Make the lack of xss non-fatal.
+
+	* protocols/jabber/Makefile.am:
+	* protocols/jabber/gossip-jabber.c: (jabber_set_presence),
+	(jabber_contact_is_avatar_latest): Use gossip_sha.
+
+	* src/gossip-idle.c: Use HAVE_XSS.
+	
+2006-07-20  Richard Hult  <richard at imendio.com>
+
+	* src/gossip-theme-manager.c: (theme_manager_apply_theme_clean):
+	Tweak the size of the lines for the header.
+
+	* src/gossip-idle.c: Dummy implementation for xss-less systems.
+
+	* src/gossip-sound.c: Protect with HAVE_GNOME for now.
+	
+2006-07-20  Richard Hult  <richard at imendio.com>
+
+	* src/gossip-log.c: Put escaping/unescaping in functions so that we
+	can easily change the implementation (I doubt that they are needed
+	actually).
+
 2006-07-19  Richard Hult  <richard at imendio.com>
 
 	* src/gossip-ui-utils.c: Include the gnome includes when
diff -Nabur gossip-20060720-ok/config.h.in gossip-20060721-notok/config.h.in
--- gossip-20060720-ok/config.h.in	2006-08-03 11:15:06.000000000 +0200
+++ gossip-20060721-notok/config.h.in	2006-08-03 11:39:21.000000000 +0200
@@ -69,6 +69,9 @@
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
 
+/* Define if we have xss */
+#undef HAVE_XSS
+
 /* ISO codes prefix */
 #undef ISO_CODES_PREFIX
 
diff -Nabur gossip-20060720-ok/configure.ac gossip-20060721-notok/configure.ac
--- gossip-20060720-ok/configure.ac	2006-07-18 20:20:36.000000000 +0200
+++ gossip-20060721-notok/configure.ac	2006-07-20 12:11:22.000000000 +0200
@@ -50,13 +50,25 @@
 if test "x$ac_backend" = xgnome; then
    AC_DEFINE(HAVE_GNOME, 1, [whether to use the GNOME backend])
    gconf_pkgconfig=gconf-2.0
+   gnome_vfs_pkgconfig=gnome-vfs-2.0
+   libgnomeui_pkgconfig=libgnomeui-2.0
+   BACKEND_CFLAGS=
+   BACKEND_LDFLAGS=
 elif test "x$ac_backend" = xcocoa; then
    AC_DEFINE(HAVE_COCOA, 1, [whether to use the Cocoa backend])
    gconf_pkgconfig=
+   gnome_vfs_pkgconfig=
+   libgnomeui_pkgconfig=
+   AM_CONDITIONAL(GCONF_SCHEMAS_INSTALL, false)
+   BACKEND_CFLAGS="-xobjective-c"
+   BACKEND_LDFLAGS="-framework AppKit -lobjc"
 else
    AC_MSG_ERROR([Incorrect backend])
 fi
 
+AC_SUBST(BACKEND_CFLAGS)
+AC_SUBST(BACKEND_LDFLAGS)
+
 AM_CONDITIONAL(HAVE_GNOME, test x$ac_backend = xgnome)
 AM_CONDITIONAL(HAVE_COCOA, test x$ac_backend = xcocoa)
 
@@ -175,7 +187,6 @@
    libxml-2.0 >= $LIBXML_REQUIRED
    glib-2.0 >= $GLIB_REQUIRED
    gobject-2.0
-   gnome-vfs-2.0 >= $LIBGNOMEVFS_REQUIRED
    $gconf_pkgconfig
 ])
 
@@ -187,11 +198,12 @@
    gtk+-2.0 >= $GTK_REQUIRED
    libglade-2.0 >= $LIBGLADE_REQUIRED 
    loudmouth-1.0 >= $LOUDMOUTH_REQUIRED
-   libgnomeui-2.0 >= $LIBGNOME_REQUIRED
    $iso_codes_pkgconfig
    $dbus_pkgconfig
    $galago_pkgconfig
    $libnotify_pkgconfig
+   $libgnomeui_pkgconfig
+   $gnome_vfs_pkgconfig
 ])
 
 PKG_CHECK_MODULES(GOSSIP_JABBER,
@@ -199,8 +211,8 @@
    glib-2.0 >= $GLIB_REQUIRED
    gobject-2.0
    loudmouth-1.0 >= $LOUDMOUTH_REQUIRED
-   gnome-vfs-2.0 >= $LIBGNOMEVFS_REQUIRED
    libxml-2.0 >= $LIBXML_REQUIRED
+   $gnome_vfs_pkgconfig
 ])
 
 if test x$have_dbus = xyes -a x$have_galago = xyes; then
@@ -234,28 +246,18 @@
 		  PANEL_VER="-DUSE_OLDER_PANEL_APPLET")
 AC_SUBST(PANEL_VER)
 
-dnl -----------------------------------------------------------
-dnl Check for libgcrypt
-dnl -----------------------------------------------------------
-AC_PATH_PROG(LIBGCRYPT_CONFIG, libgcrypt-config, no)
-if test x"$LIBGCRYPT_CONFIG" = xno; then
-   AC_MSG_ERROR([gcrypt not found on system])
-else
-   LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags`
-   LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs`
-
-   GOSSIP_JABBER_CFLAGS="$GOSSIP_JABBER_CFLAGS $LIBGCRYPT_CFLAGS"
-   GOSSIP_JABBER_LDFLAGS="$GOSSIP_JABBER_LDFLAGS $LIBGCRYPT_LDFLAGS"
-fi
-
 
 dnl -----------------------------------------------------------
 dnl Check for the XScreenSaver extension (used for autoaway)
 dnl -----------------------------------------------------------
-x_libs="$X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS"
 have_xss="no"
 
-AC_CHECK_FUNC(XScreenSaverQueryInfo, [
+# Only check for XSS under GNOME, it doesn't make sense to find it
+# when we're not using X (like on OSX).
+if test x$ac_backend = xgnome; then
+   x_libs="$X_PRE_LIBS $X_LIBS -lX11 $X_EXTRA_LIBS"
+
+   AC_CHECK_FUNC(XScreenSaverQueryInfo, [
    have_xss="yes"], [
    save_LIBS=$LIBS
    LIBS="$LIBS $X_PRE_LIBS $X_LIBS -lXss -lXext -lX11"
@@ -263,6 +265,7 @@
    [
       have_xss="yes"
       XSS_LIBS="$X_PRE_LIBS $X_LIBS -lXss -lXext -lX11"
+	 AC_DEFINE(HAVE_XSS, 1, [Define if we have xss])
    ], 
    [
       LIBS=$save_LIBS
@@ -271,14 +274,12 @@
       [
          have_xss="yes"
          XSS_LIBS="$X_PRE_LIBS $X_LIBS -lXext -lX11"],[])
+	    AC_DEFINE(HAVE_XSS, 1, [Define if we have xss])
       ])
       LIBS=$save_LIBS
    ])
 
-AC_SUBST(XSS_LIBS)
-
-if test "x$have_xss" = "xno"; then
-   AC_MSG_ERROR([Couldn't find XScreenSaver extension.])
+   AC_SUBST(XSS_LIBS)
 fi
 
 
@@ -347,5 +348,6 @@
 echo "Galago:   $have_galago"
 echo "ASpell:   $have_aspell"
 echo "Notify:   $have_libnotify"
+echo "XSS:      $have_xss (only with GNOME)"
 echo "Peekaboo: $have_peekaboo (requires DBUS & Galago)"
 echo
diff -Nabur gossip-20060720-ok/libgossip/Makefile.am gossip-20060721-notok/libgossip/Makefile.am
--- gossip-20060720-ok/libgossip/Makefile.am	2006-07-18 19:15:24.000000000 +0200
+++ gossip-20060721-notok/libgossip/Makefile.am	2006-07-20 12:05:38.000000000 +0200
@@ -4,7 +4,7 @@
 	-DPROTOCOL_DIR=\""$(libdir)/gossip/protocols"\" \
 	-DDTDDIR=\"$(datadir)/gossip\"			\
 	-I$(top_srcdir)/protocols/jabber                \
-	$(LIBGOSSIP_CFLAGS) $(WARN_CFLAGS)
+	$(LIBGOSSIP_CFLAGS) $(WARN_CFLAGS) $(BACKEND_CFLAGS)
 
 noinst_LTLIBRARIES = libgossip.la
 
diff -Nabur gossip-20060720-ok/libgossip/gossip-account-manager.c gossip-20060721-notok/libgossip/gossip-account-manager.c
--- gossip-20060720-ok/libgossip/gossip-account-manager.c	2006-07-05 21:48:34.000000000 +0200
+++ gossip-20060721-notok/libgossip/gossip-account-manager.c	2006-07-20 11:49:58.000000000 +0200
@@ -22,7 +22,6 @@
 #include <string.h>
 #include <sys/types.h>
 #include <sys/stat.h>
-#include <libgnomevfs/gnome-vfs.h>
 #include <libxml/parser.h>
 #include <libxml/tree.h>
 
diff -Nabur gossip-20060720-ok/libgossip/gossip-chatroom-manager.c gossip-20060721-notok/libgossip/gossip-chatroom-manager.c
--- gossip-20060720-ok/libgossip/gossip-chatroom-manager.c	2006-07-05 21:48:34.000000000 +0200
+++ gossip-20060721-notok/libgossip/gossip-chatroom-manager.c	2006-07-20 11:49:59.000000000 +0200
@@ -20,8 +20,8 @@
 
 #include <config.h>
 #include <string.h>
-
-#include <libgnomevfs/gnome-vfs.h>
+#include <sys/types.h>
+#include <sys/stat.h>
 #include <libxml/parser.h>
 #include <libxml/tree.h>
 
diff -Nabur gossip-20060720-ok/libgossip/gossip-utils.c gossip-20060721-notok/libgossip/gossip-utils.c
--- gossip-20060720-ok/libgossip/gossip-utils.c	2006-07-18 20:12:07.000000000 +0200
+++ gossip-20060721-notok/libgossip/gossip-utils.c	2006-07-20 11:49:52.000000000 +0200
@@ -421,31 +421,3 @@
 
 	return rv;
 }
-
-
-gchar *
-gossip_sha1_string (const guchar *data,
-		    gsize         len)
-{
-#if 0
-	gchar  *hash_string;
-	gchar  *p;
-	guchar  hash[20];
-	gint    i;
-	
-	if (data == NULL || len < 1) {
-		return g_strdup("");
-	}
-	
-	gcry_md_hash_buffer (GCRY_MD_SHA1, hash, data, (size_t) len);
-	hash_string = g_malloc (sizeof (gchar) * 41);
-	p = hash_string;
-
-	for (i = 0; i < 20; i++, p += 2) {
-		snprintf (p, 3, "%02x", hash[i]);
-	}
-
-	return hash_string;
-#endif
-	return g_strdup ("");
-}
diff -Nabur gossip-20060720-ok/libgossip/gossip-utils.h gossip-20060721-notok/libgossip/gossip-utils.h
--- gossip-20060720-ok/libgossip/gossip-utils.h	2006-05-24 21:22:12.000000000 +0200
+++ gossip-20060721-notok/libgossip/gossip-utils.h	2006-07-20 11:49:58.000000000 +0200
@@ -23,7 +23,6 @@
 
 #include <libxml/parser.h>
 #include <libxml/tree.h>
-#include <gcrypt.h>
 
 #include "gossip-account.h"
 #include "gossip-presence.h"
@@ -71,7 +70,5 @@
 				      gsize           *len);
 gchar *  gossip_base64_encode        (const guchar    *data,
 				      gsize            len);
-gchar *  gossip_sha1_string          (const guchar    *data,
-				      gsize            len);
 
 #endif /*  __GOSSIP_UTILS_H__ */
diff -Nabur gossip-20060720-ok/protocols/jabber/Makefile.am gossip-20060721-notok/protocols/jabber/Makefile.am
--- gossip-20060720-ok/protocols/jabber/Makefile.am	2006-02-26 18:41:04.000000000 +0100
+++ gossip-20060721-notok/protocols/jabber/Makefile.am	2006-07-20 16:42:55.000000000 +0200
@@ -26,12 +26,14 @@
 	gossip-jabber-utils.h			\
 	gossip-jid.c                            \
 	gossip-jid.h                            \
-	gossip-transport-accounts.c             \
-	gossip-transport-accounts.h             \
-	gossip-transport-discover.c             \
-	gossip-transport-discover.h             \
-	gossip-transport-protocol.c             \
-	gossip-transport-protocol.h             \
-	gossip-transport-register.c             \
-	gossip-transport-register.h
+	gossip-sha.c                            \
+	gossip-sha.h
 
+#	gossip-transport-accounts.c             \
+#	gossip-transport-accounts.h             \
+#	gossip-transport-discover.c             \
+#	gossip-transport-discover.h             \
+#	gossip-transport-protocol.c             \
+#	gossip-transport-protocol.h             \
+#	gossip-transport-register.c             \
+#	gossip-transport-register.h
diff -Nabur gossip-20060720-ok/protocols/jabber/gossip-jabber-ft.c gossip-20060721-notok/protocols/jabber/gossip-jabber-ft.c
--- gossip-20060720-ok/protocols/jabber/gossip-jabber-ft.c	2006-06-17 15:52:55.000000000 +0200
+++ gossip-20060721-notok/protocols/jabber/gossip-jabber-ft.c	2006-07-20 16:42:55.000000000 +0200
@@ -19,12 +19,13 @@
  */
 
 #include <config.h>
-
 #include <string.h>
 #include <stdlib.h>
-
 #include <loudmouth/loudmouth.h>
+
+#ifdef HAVE_GNOME
 #include <libgnomevfs/gnome-vfs.h>
+#endif
 
 #include "gossip-jabber-ft.h"
 #include "gossip-jabber-private.h"
@@ -336,22 +337,16 @@
 			    gchar       **file_size,
 			    gchar       **mime_type)
 {
-	GnomeVFSFileInfo file_info;
+#ifdef HAVE_GNOME
+	GnomeVFSFileInfo *file_info;
 	GnomeVFSResult   result;
-	/*  	GnomeVFSURI      *uri;  */
 
 	DEBUG_MSG (("ProtocolFT: Getting file info for URI:'%s'", uri));
 
-	/*  	uri = gnome_vfs_uri_new (file_name); */
-
-	/* 	if (!gnome_vfs_uri_exists (uri)) { */
-	/* 		DEBUG_MSG (("ProtocolFT: URI:'%s' does not exist", file_name)); */
-	/* 		gnome_vfs_uri_unref (uri); */
-	/* 		return; */
-	/* 	} */
+	file_info = gnome_vfs_file_info_new ();
 
 	result = gnome_vfs_get_file_info (uri,
-					  &file_info, 
+					  file_info, 
 					  GNOME_VFS_FILE_INFO_DEFAULT);
 
 	if (result != GNOME_VFS_OK) {
@@ -360,11 +355,11 @@
 	}
 	
 	if (file_name) {
-		*file_name = g_strdup (file_info.name);
+		*file_name = g_strdup (file_info->name);
 	}
 
 	if (file_size) {
-		*file_size = g_strdup_printf ("%d", (guint)file_info.size);
+		*file_size = g_strdup_printf ("%d", (guint) file_info->size);
 	}
 
 	if (mime_type) {
@@ -378,9 +373,11 @@
 		} 
 	}
 
-	gnome_vfs_file_info_unref (&file_info);
+	gnome_vfs_file_info_unref (file_info);
 	
 	return TRUE;
+#endif
+	return FALSE;
 }
 
 static gchar *
diff -Nabur gossip-20060720-ok/protocols/jabber/gossip-jabber.c gossip-20060721-notok/protocols/jabber/gossip-jabber.c
--- gossip-20060720-ok/protocols/jabber/gossip-jabber.c	2006-07-18 19:15:25.000000000 +0200
+++ gossip-20060721-notok/protocols/jabber/gossip-jabber.c	2006-07-20 11:25:27.000000000 +0200
@@ -19,7 +19,6 @@
  */
 
 #include <config.h>
-
 #include <stdlib.h>
 #include <string.h>
 #include <glib/gi18n.h>
@@ -29,7 +28,6 @@
 #include <libgossip/gossip-contact.h>
 #include <libgossip/gossip-debug.h>
 #include <libgossip/gossip-vcard.h>
-#include <libgossip/gossip-utils.h>
 #include <libgossip/gossip-chatroom-provider.h>
 #include <libgossip/gossip-ft-provider.h>
 
@@ -41,6 +39,7 @@
 #include "gossip-transport-accounts.h"
 #include "gossip-jabber.h"
 #include "gossip-jabber-private.h"
+#include "gossip-sha.h"
 
 #define DEBUG_DOMAIN "Jabber"
 
@@ -1508,7 +1507,7 @@
 
 	contact = gossip_jabber_get_own_contact (jabber);
 	avatar = gossip_contact_get_avatar (contact, &avatar_size);
-	sha1 = gossip_sha1_string (avatar, avatar_size);
+	sha1 = gossip_sha_hash (avatar, avatar_size);
 
 	gossip_debug (DEBUG_DOMAIN, "Setting presence to:'%s', status:'%s', "
 		      "priority:'%s' sha1:'%s' avatar_size:%" G_GSIZE_FORMAT " avatar:%p", 
@@ -1837,7 +1836,7 @@
 		}	
 
 		avatar = gossip_contact_get_avatar (contact, &avatar_size);
-		sha1 = gossip_sha1_string (avatar, avatar_size);
+		sha1 = gossip_sha_hash (avatar, avatar_size);
 		
 		same = g_ascii_strcasecmp (sha1, avatar_node->value) == 0;
 		g_free (sha1);
diff -Nabur gossip-20060720-ok/protocols/jabber/gossip-sha.c gossip-20060721-notok/protocols/jabber/gossip-sha.c
--- gossip-20060720-ok/protocols/jabber/gossip-sha.c	1970-01-01 01:00:00.000000000 +0100
+++ gossip-20060721-notok/protocols/jabber/gossip-sha.c	2006-07-20 11:11:14.000000000 +0200
@@ -0,0 +1,625 @@
+/*-
+ * Copyright (c) 2001, 2002 Allan Saddi <allan at saddi.com>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+/*
+ * Define WORDS_BIGENDIAN if compiling on a big-endian architecture.
+ *
+ * Define SHA1_TEST to test the implementation using the NIST's
+ * sample messages. The output should be:
+ *
+ *   a9993e36 4706816a ba3e2571 7850c26c 9cd0d89d
+ *   84983e44 1c3bd26e baae4aa1 f95129e5 e54670f1
+ *   34aa973c d4c4daa4 f61eeb2b dbad2731 6534016f
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif /* HAVE_CONFIG_H */
+
+#include <string.h>
+#include <stdio.h>
+#include <glib.h>
+
+#include "gossip-sha.h"
+
+#define SHA1_HASH_SIZE 20
+
+/* Hash size in 32-bit words */
+#define SHA1_HASH_WORDS 5
+
+struct _SHA1Context {
+  guint64 totalLength;
+  guint32 hash[SHA1_HASH_WORDS];
+  guint32 bufferLength;
+  union {
+    guint32 words[16];
+    guint8 bytes[64];
+  } buffer;
+};
+
+typedef struct _SHA1Context SHA1Context;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void SHA1Init (SHA1Context *sc);
+void SHA1Update (SHA1Context *sc, const void *udata, guint32 len);
+void SHA1Final (SHA1Context *sc, guint8 hash[SHA1_HASH_SIZE]);
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifndef lint
+static const char rcsid[] =
+	"$Id: gossip-sha.c,v 1.1 2006/07/20 09:11:14 rhult Exp $";
+#endif /* !lint */
+
+#define ROTL(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
+#define ROTR(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
+
+#define F_0_19(x, y, z) ((z) ^ ((x) & ((y) ^ (z))))
+#define F_20_39(x, y, z) ((x) ^ (y) ^ (z))
+#define F_40_59(x, y, z) (((x) & ((y) | (z))) | ((y) & (z)))
+#define F_60_79(x, y, z) ((x) ^ (y) ^ (z))
+
+#define DO_ROUND(F, K) { \
+  temp = ROTL(a, 5) + F(b, c, d) + e + *(W++) + K; \
+  e = d; \
+  d = c; \
+  c = ROTL(b, 30); \
+  b = a; \
+  a = temp; \
+}
+
+#define K_0_19 0x5a827999L
+#define K_20_39 0x6ed9eba1L
+#define K_40_59 0x8f1bbcdcL
+#define K_60_79 0xca62c1d6L
+
+#ifndef RUNTIME_ENDIAN
+
+#ifdef WORDS_BIGENDIAN
+
+#define BYTESWAP(x) (x)
+#define BYTESWAP64(x) (x)
+
+#else /* WORDS_BIGENDIAN */
+
+#define BYTESWAP(x) ((ROTR((x), 8) & 0xff00ff00L) | \
+		     (ROTL((x), 8) & 0x00ff00ffL))
+#define BYTESWAP64(x) _byteswap64(x)
+
+static inline guint64 _byteswap64(guint64 x)
+{
+  guint32 a = x >> 32;
+  guint32 b = (guint32) x;
+  return ((guint64) BYTESWAP(b) << 32) | (guint64) BYTESWAP(a);
+}
+
+#endif /* WORDS_BIGENDIAN */
+
+#else /* !RUNTIME_ENDIAN */
+
+static int littleEndian;
+
+#define BYTESWAP(x) _byteswap(x)
+#define BYTESWAP64(x) _byteswap64(x)
+
+#define _BYTESWAP(x) ((ROTR((x), 8) & 0xff00ff00L) | \
+		      (ROTL((x), 8) & 0x00ff00ffL))
+#define _BYTESWAP64(x) __byteswap64(x)
+
+static inline guint64 __byteswap64(guint64 x)
+{
+  guint32 a = x >> 32;
+  guint32 b = (guint32) x;
+  return ((guint64) _BYTESWAP(b) << 32) | (guint64) _BYTESWAP(a);
+}
+
+static inline guint32 _byteswap(guint32 x)
+{
+  if (!littleEndian)
+    return x;
+  else
+    return _BYTESWAP(x);
+}
+
+static inline guint64 _byteswap64(guint64 x)
+{
+  if (!littleEndian)
+    return x;
+  else
+    return _BYTESWAP64(x);
+}
+
+static inline void setEndian(void)
+{
+  union {
+    guint32 w;
+    guint8 b[4];
+  } endian;
+
+  endian.w = 1L;
+  littleEndian = endian.b[0] != 0;
+}
+
+#endif /* !RUNTIME_ENDIAN */
+
+static const guint8 padding[64] = {
+  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+void
+SHA1Init (SHA1Context *sc)
+{
+#ifdef RUNTIME_ENDIAN
+  setEndian ();
+#endif /* RUNTIME_ENDIAN */
+
+#ifdef G_OS_WIN32
+  sc->totalLength = 0L;
+#else
+  sc->totalLength = 0LL;
+#endif
+  sc->hash[0] = 0x67452301L;
+  sc->hash[1] = 0xefcdab89L;
+  sc->hash[2] = 0x98badcfeL;
+  sc->hash[3] = 0x10325476L;
+  sc->hash[4] = 0xc3d2e1f0L;
+  sc->bufferLength = 0L;
+}
+
+static void
+burnStack (int size)
+{
+  char buf[128];
+
+  memset (buf, 0, sizeof (buf));
+  size -= sizeof (buf);
+  if (size > 0)
+    burnStack (size);
+}
+
+static void
+SHA1Guts (SHA1Context *sc, const guint32 *cbuf)
+{
+  guint32 buf[80];
+  guint32 *W, *W3, *W8, *W14, *W16;
+  guint32 a, b, c, d, e, temp;
+  int i;
+
+  W = buf;
+
+  for (i = 15; i >= 0; i--) {
+    *(W++) = BYTESWAP(*cbuf);
+    cbuf++;
+  }
+
+  W16 = &buf[0];
+  W14 = &buf[2];
+  W8 = &buf[8];
+  W3 = &buf[13];
+
+  for (i = 63; i >= 0; i--) {
+    *W = *(W3++) ^ *(W8++) ^ *(W14++) ^ *(W16++);
+    *W = ROTL(*W, 1);
+    W++;
+  }
+
+  a = sc->hash[0];
+  b = sc->hash[1];
+  c = sc->hash[2];
+  d = sc->hash[3];
+  e = sc->hash[4];
+
+  W = buf;
+
+#ifndef SHA1_UNROLL
+#define SHA1_UNROLL 20
+#endif /* !SHA1_UNROLL */
+
+#if SHA1_UNROLL == 1
+  for (i = 19; i >= 0; i--)
+    DO_ROUND(F_0_19, K_0_19);
+
+  for (i = 19; i >= 0; i--)
+    DO_ROUND(F_20_39, K_20_39);
+
+  for (i = 19; i >= 0; i--)
+    DO_ROUND(F_40_59, K_40_59);
+
+  for (i = 19; i >= 0; i--)
+    DO_ROUND(F_60_79, K_60_79);
+#elif SHA1_UNROLL == 2
+  for (i = 9; i >= 0; i--) {
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+  }
+
+  for (i = 9; i >= 0; i--) {
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+  }
+
+  for (i = 9; i >= 0; i--) {
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+  }
+
+  for (i = 9; i >= 0; i--) {
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+  }
+#elif SHA1_UNROLL == 4
+  for (i = 4; i >= 0; i--) {
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+  }
+
+  for (i = 4; i >= 0; i--) {
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+  }
+
+  for (i = 4; i >= 0; i--) {
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+  }
+
+  for (i = 4; i >= 0; i--) {
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+  }
+#elif SHA1_UNROLL == 5
+  for (i = 3; i >= 0; i--) {
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+  }
+
+  for (i = 3; i >= 0; i--) {
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+  }
+
+  for (i = 3; i >= 0; i--) {
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+  }
+
+  for (i = 3; i >= 0; i--) {
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+  }
+#elif SHA1_UNROLL == 10
+  for (i = 1; i >= 0; i--) {
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+    DO_ROUND(F_0_19, K_0_19);
+  }
+
+  for (i = 1; i >= 0; i--) {
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+    DO_ROUND(F_20_39, K_20_39);
+  }
+
+  for (i = 1; i >= 0; i--) {
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+    DO_ROUND(F_40_59, K_40_59);
+  }
+
+  for (i = 1; i >= 0; i--) {
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+    DO_ROUND(F_60_79, K_60_79);
+  }
+#elif SHA1_UNROLL == 20
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+  DO_ROUND(F_0_19, K_0_19);
+
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+  DO_ROUND(F_20_39, K_20_39);
+
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+  DO_ROUND(F_40_59, K_40_59);
+
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+  DO_ROUND(F_60_79, K_60_79);
+#else /* SHA1_UNROLL */
+#error SHA1_UNROLL must be 1, 2, 4, 5, 10 or 20!
+#endif
+
+  sc->hash[0] += a;
+  sc->hash[1] += b;
+  sc->hash[2] += c;
+  sc->hash[3] += d;
+  sc->hash[4] += e;
+}
+
+void
+SHA1Update (SHA1Context *sc, const void *udata, guint32 len)
+{
+  guint32 bufferBytesLeft;
+  guint32 bytesToCopy;
+  int needBurn = 0;
+  guint8 *data = (guint8 *)udata;
+
+#ifdef SHA1_FAST_COPY
+  if (sc->bufferLength) {
+    bufferBytesLeft = 64L - sc->bufferLength;
+
+    bytesToCopy = bufferBytesLeft;
+    if (bytesToCopy > len)
+      bytesToCopy = len;
+
+    memcpy (&sc->buffer.bytes[sc->bufferLength], data, bytesToCopy);
+
+    sc->totalLength += bytesToCopy * 8L;
+
+    sc->bufferLength += bytesToCopy;
+    data += bytesToCopy;
+    len -= bytesToCopy;
+
+    if (sc->bufferLength == 64L) {
+      SHA1Guts (sc, sc->buffer.words);
+      needBurn = 1;
+      sc->bufferLength = 0L;
+    }
+  }
+
+  while (len > 63) {
+    sc->totalLength += 512L;
+
+    SHA1Guts (sc, data);
+    needBurn = 1;
+
+    data += 64L;
+    len -= 64L;
+  }
+
+  if (len) {
+    memcpy (&sc->buffer.bytes[sc->bufferLength], data, len);
+
+    sc->totalLength += len * 8L;
+
+    sc->bufferLength += len;
+  }
+#else /* SHA1_FAST_COPY */
+  while (len) {
+    bufferBytesLeft = 64L - sc->bufferLength;
+
+    bytesToCopy = bufferBytesLeft;
+    if (bytesToCopy > len)
+      bytesToCopy = len;
+
+    memcpy (&sc->buffer.bytes[sc->bufferLength], data, bytesToCopy);
+
+    sc->totalLength += bytesToCopy * 8L;
+
+    sc->bufferLength += bytesToCopy;
+    data += bytesToCopy;
+    len -= bytesToCopy;
+
+    if (sc->bufferLength == 64L) {
+      SHA1Guts (sc, sc->buffer.words);
+      needBurn = 1;
+      sc->bufferLength = 0L;
+    }
+  }
+#endif /* SHA1_FAST_COPY */
+
+  if (needBurn)
+    burnStack (sizeof (guint32[86]) + sizeof (guint32 *[5]) + sizeof (int));
+}
+
+void
+SHA1Final (SHA1Context *sc, guint8 hash[SHA1_HASH_SIZE])
+{
+  guint32 bytesToPad;
+  guint64 lengthPad;
+  int i;
+
+  bytesToPad = 120L - sc->bufferLength;
+  if (bytesToPad > 64L)
+    bytesToPad -= 64L;
+
+  lengthPad = BYTESWAP64(sc->totalLength);
+
+  SHA1Update (sc, padding, bytesToPad);
+  SHA1Update (sc, &lengthPad, 8L);
+
+  if (hash) {
+    for (i = 0; i < SHA1_HASH_WORDS; i++) {
+#ifdef SHA1_FAST_COPY
+      *((guint32 *) hash) = BYTESWAP(sc->hash[i]);
+#else /* SHA1_FAST_COPY */
+      hash[0] = (guint8) (sc->hash[i] >> 24);
+      hash[1] = (guint8) (sc->hash[i] >> 16);
+      hash[2] = (guint8) (sc->hash[i] >> 8);
+      hash[3] = (guint8) sc->hash[i];
+#endif /* SHA1_FAST_COPY */
+      hash += 4;
+    }
+  }
+}
+
+#ifdef G_OS_WIN32
+#define snprintf _snprintf
+#endif
+
+gchar *
+gossip_sha_hash (const gchar *str, gsize len)
+{
+        static gchar  ret_val[41];
+        SHA1Context   ctx;
+        guint8         hash[SHA1_HASH_SIZE];
+        gchar        *ch;
+        guint          i;
+        
+        SHA1Init (&ctx);
+        SHA1Update (&ctx, str, len);
+        SHA1Final (&ctx, hash);
+
+        ch = ret_val;
+
+        for (i = 0; i < SHA1_HASH_SIZE; ++i) {
+                snprintf (ch, 3, "%02x", hash[i]);
+                ch += 2;
+        }
+
+        return g_strdup (ret_val);
+}
diff -Nabur gossip-20060720-ok/protocols/jabber/gossip-sha.h gossip-20060721-notok/protocols/jabber/gossip-sha.h
--- gossip-20060720-ok/protocols/jabber/gossip-sha.h	1970-01-01 01:00:00.000000000 +0100
+++ gossip-20060721-notok/protocols/jabber/gossip-sha.h	2006-07-20 11:11:14.000000000 +0200
@@ -0,0 +1,29 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2003 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GOSSIP_SHA_H__
+#define __GOSSIP_SHA_H__
+
+#include <glib.h>
+
+gchar * gossip_sha_hash (const gchar *str,
+			 gsize        len);
+
+#endif /* __GOSSIP_SHA_H__ */
diff -Nabur gossip-20060720-ok/src/Makefile.am gossip-20060721-notok/src/Makefile.am
--- gossip-20060720-ok/src/Makefile.am	2006-06-22 02:32:46.000000000 +0200
+++ gossip-20060721-notok/src/Makefile.am	2006-07-20 12:11:26.000000000 +0200
@@ -13,7 +13,7 @@
 	-DSTYLESHEETDIR=\"$(datadir)/gossip\"		\
 	-DDTDDIR=\"$(datadir)/gossip\"			\
 	-DDBUS_API_SUBJECT_TO_CHANGE			\
-	$(GOSSIP_CFLAGS) $(WARN_CFLAGS)
+	$(GOSSIP_CFLAGS) $(WARN_CFLAGS) $(BACKEND_CFLAGS)
 
 dbus_binding_sources = gossip-dbus.xml
 
@@ -93,7 +93,7 @@
 gossip_LDADD = $(GOSSIP_LIBS) $(XSS_LIBS)					\
 	$(top_builddir)/libgossip/libgossip.la
 
-gossip_LDFLAGS = -export-dynamic
+gossip_LDFLAGS = -export-dynamic $(BACKEND_LDFLAGS)
 
 dtddir = $(datadir)/gossip
 dtd_DATA = 									\
diff -Nabur gossip-20060720-ok/src/gossip-about-dialog.c gossip-20060721-notok/src/gossip-about-dialog.c
--- gossip-20060720-ok/src/gossip-about-dialog.c	2006-07-19 11:59:27.000000000 +0200
+++ gossip-20060721-notok/src/gossip-about-dialog.c	2006-07-20 12:55:40.000000000 +0200
@@ -31,7 +31,7 @@
 					   const gchar     *link,
 					   gpointer         data);
 
-const char *authors[] = {
+static const char *authors[] = {
 	"Mikael Hallendal",
 	"Richard Hult",
 	"Martyn Russell",
@@ -40,19 +40,19 @@
 	NULL
 };
 
-const char *documenters[] = {
+static const char *documenters[] = {
 	"Daniel Taylor",
 	"Keywan Najafi Tonekaboni",
 	"Brian Pepple",
 	NULL
 };
 
-const char *artists[] = {
+static const char *artists[] = {
 	"Daniel Taylor",
 	NULL
 };
 
-const char *license[] = {
+static const char *license[] = {
 	N_("Gossip is free software; you can redistribute it and/or modify "
 	   "it under the terms of the GNU General Public License as published by "
 	   "the Free Software Foundation; either version 2 of the License, or "
diff -Nabur gossip-20060720-ok/src/gossip-accounts-dialog.c gossip-20060721-notok/src/gossip-accounts-dialog.c
--- gossip-20060720-ok/src/gossip-accounts-dialog.c	2006-07-05 21:48:35.000000000 +0200
+++ gossip-20060721-notok/src/gossip-accounts-dialog.c	2006-07-20 15:47:08.000000000 +0200
@@ -22,13 +22,10 @@
 #include <ctype.h>
 #include <string.h>
 #include <stdlib.h>
-
 #include <gtk/gtk.h>
 #include <glade/glade.h>
 #include <glib/gi18n.h>
 
-#include <loudmouth/loudmouth.h>
-
 #include <libgossip/gossip-account.h>
 #include <libgossip/gossip-protocol.h>
 #include <libgossip/gossip-utils.h>
diff -Nabur gossip-20060720-ok/src/gossip-add-contact-window.c gossip-20060721-notok/src/gossip-add-contact-window.c
--- gossip-20060720-ok/src/gossip-add-contact-window.c	2006-06-14 22:12:10.000000000 +0200
+++ gossip-20060721-notok/src/gossip-add-contact-window.c	2006-07-20 16:44:27.000000000 +0200
@@ -21,9 +21,12 @@
 #include <config.h>
 #include <string.h>
 #include <gtk/gtk.h>
-#include <libgnomeui/gnome-druid.h>
 #include <glib/gi18n.h>
 
+#ifdef HAVE_GNOME
+#include <libgnomeui/gnome-druid.h>
+#endif
+
 #include <libgossip/gossip-utils.h>
 
 #include "gossip-account-chooser.h"
@@ -82,6 +85,8 @@
 	COL_SYS_COUNT
 };
 
+#ifdef HAVE_GNOME
+
 static void           add_contact_window_setup_systems                (GList            *accounts,
 								       GossipAddContact *window);
 static gboolean       add_contact_window_complete_group_idle          (GossipAddContact *window);
@@ -692,3 +697,14 @@
 
 	gtk_widget_show (window->window);
 }
+
+#else 
+
+void
+gossip_add_contact_window_show (GtkWindow     *parent,
+				GossipContact *contact)
+{
+}
+
+#endif
+
diff -Nabur gossip-20060720-ok/src/gossip-avatar-image.c gossip-20060721-notok/src/gossip-avatar-image.c
--- gossip-20060720-ok/src/gossip-avatar-image.c	2006-06-20 19:49:32.000000000 +0200
+++ gossip-20060721-notok/src/gossip-avatar-image.c	2006-07-20 16:27:15.000000000 +0200
@@ -23,9 +23,12 @@
 #include <glib/gi18n.h>
 #include <gdk/gdkkeysyms.h>
 #include <gdk/gdk.h>
-#include <gdk/gdkx.h>
 #include <gtk/gtk.h>
 
+#ifdef HAVE_GNOME
+#include <gdk/gdkx.h>
+#endif
+
 #include "gossip-avatar-image.h"
 
 #define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
@@ -117,6 +120,7 @@
 	G_OBJECT_CLASS (gossip_avatar_image_parent_class)->finalize (object);
 }
 
+#ifdef HAVE_GNOME
 static GdkFilterReturn
 avatar_image_filter_func (GdkXEvent  *gdkxevent,
 			  GdkEvent   *event,
@@ -142,10 +146,12 @@
 	
 	return GDK_FILTER_CONTINUE;
 }
+#endif
 
 static void
 avatar_image_add_filter (GossipAvatarImage *avatar_image)
 {
+#ifdef HAVE_GNOME
 	Window     window;
 	GdkWindow *gdkwindow;
 	gint       mask;
@@ -167,12 +173,15 @@
 	gdk_error_trap_pop ();
 	
 	gdk_window_add_filter (NULL, avatar_image_filter_func, avatar_image);
+#endif
 }
 
 static void
 avatar_image_remove_filter (GossipAvatarImage *avatar_image)
 {
+#ifdef HAVE_GNOME
 	gdk_window_remove_filter (NULL, avatar_image_filter_func, avatar_image);
+#endif
 }
 
 static GdkPixbuf *
diff -Nabur gossip-20060720-ok/src/gossip-cell-renderer-text.c gossip-20060721-notok/src/gossip-cell-renderer-text.c
--- gossip-20060720-ok/src/gossip-cell-renderer-text.c	2006-06-10 20:40:15.000000000 +0200
+++ gossip-20060721-notok/src/gossip-cell-renderer-text.c	2006-07-20 14:47:53.000000000 +0200
@@ -18,11 +18,8 @@
  * Boston, MA 02111-1307, USA.
  */
 
-#include <string.h>
-
 #include <config.h>
-
-#include <glib/gi18n.h>
+#include <string.h>
 
 #include "gossip-cell-renderer-text.h"
 
@@ -279,8 +276,8 @@
 	PangoAttribute             *attr_color, *attr_style, *attr_size;
 	GtkStyle                   *style;
 	GdkColor                    color;
+	const gchar                *status;
 	gchar                      *str;
-	gboolean                    show_status = FALSE;
 
 	priv = cell->priv;
 
@@ -298,15 +295,6 @@
 		return;
 	}
 
-	if (!priv->is_group && (priv->status && strlen (priv->status) > 0)) {
-		show_status = TRUE;
-	} 
-
-	str = g_strdup_printf ("%s%s%s", 
-			       priv->name, 
-			       !show_status ? "" : "\n",
-			       !show_status ? "" : priv->status);
-
  	style = gtk_widget_get_style (widget);
 	color = style->text_aa[GTK_STATE_NORMAL];
 
@@ -325,10 +313,19 @@
    	}   
 
 	attr_size = pango_attr_size_new (pango_font_description_get_size (style->font_desc) / 1.2);
+
 	attr_size->start_index = attr_style->start_index;
 	attr_size->end_index = -1;
 	pango_attr_list_insert (attr_list, attr_size);
 
+	if (!priv->status || !priv->status[0]) {
+		status = "";
+	} else {
+		status = priv->status;
+	}
+	
+	str = g_strdup_printf ("%s\n%s", priv->name, status);
+
 	g_object_set (cell,
 		      "visible", TRUE,
 		      "weight", PANGO_WEIGHT_NORMAL,
@@ -336,9 +333,8 @@
 		      "attributes", attr_list,
 		      NULL);
       
-	pango_attr_list_unref (attr_list);
-
 	g_free (str);
+	pango_attr_list_unref (attr_list);
 }
 
 GtkCellRenderer * 
diff -Nabur gossip-20060720-ok/src/gossip-chatrooms-window.c gossip-20060721-notok/src/gossip-chatrooms-window.c
--- gossip-20060720-ok/src/gossip-chatrooms-window.c	2006-06-21 23:02:58.000000000 +0200
+++ gossip-20060721-notok/src/gossip-chatrooms-window.c	2006-07-20 16:28:03.000000000 +0200
@@ -23,7 +23,6 @@
 #include <stdio.h>
 #include <gtk/gtk.h>
 #include <glade/glade.h>
-#include <libgnome/gnome-config.h>
 #include <glib.h>
 #include <glib/gi18n.h>
 
diff -Nabur gossip-20060720-ok/src/gossip-contact-groups.c gossip-20060721-notok/src/gossip-contact-groups.c
--- gossip-20060720-ok/src/gossip-contact-groups.c	2006-07-05 23:58:10.000000000 +0200
+++ gossip-20060721-notok/src/gossip-contact-groups.c	2006-07-20 13:41:17.000000000 +0200
@@ -19,12 +19,11 @@
  */
 
 #include <config.h>
-
 #include <string.h>
-
+#include <sys/types.h>
+#include <sys/stat.h>
 #include <glib.h>
 #include <glib/gi18n.h>
-#include <libgnomevfs/gnome-vfs.h>
 #include <libxml/parser.h>
 #include <libxml/tree.h>
 
diff -Nabur gossip-20060720-ok/src/gossip-contact-info-dialog.c gossip-20060721-notok/src/gossip-contact-info-dialog.c
--- gossip-20060720-ok/src/gossip-contact-info-dialog.c	2006-07-05 17:15:09.000000000 +0200
+++ gossip-20060721-notok/src/gossip-contact-info-dialog.c	2006-07-20 16:12:04.000000000 +0200
@@ -23,13 +23,13 @@
 #include <glade/glade.h>
 #include <gtk/gtk.h>
 #include <glib/gi18n.h>
-#include <libgnomeui/gnome-href.h>
 
 #include <libgossip/gossip-contact.h>
 #include <libgossip/gossip-session.h>
 
 #include "gossip-app.h"
 #include "gossip-avatar-image.h"
+#include "gossip-ui-utils.h"
 #include "gossip-contact-info-dialog.h"
 
 typedef struct {
@@ -313,8 +313,7 @@
 		show_personal = TRUE;
 
 		link = g_strdup_printf ("mailto:%s", str);
-		
-		href = gnome_href_new (link, str);
+		href = gossip_link_button_new (link, str);
 
 		alignment = gtk_alignment_new (0, 1, 0, 0.5);
 		gtk_container_add (GTK_CONTAINER (alignment), href);
@@ -340,7 +339,7 @@
 
 		show_personal = TRUE;
 
-		href = gnome_href_new (str, str);
+		href = gossip_link_button_new (str, str);
 
 		alignment = gtk_alignment_new (0, 1, 0, 0.5);
 		gtk_container_add (GTK_CONTAINER (alignment), href);
diff -Nabur gossip-20060720-ok/src/gossip-edit-chatroom-dialog.c gossip-20060721-notok/src/gossip-edit-chatroom-dialog.c
--- gossip-20060720-ok/src/gossip-edit-chatroom-dialog.c	2006-06-10 20:53:35.000000000 +0200
+++ gossip-20060721-notok/src/gossip-edit-chatroom-dialog.c	2006-07-20 16:28:45.000000000 +0200
@@ -22,7 +22,6 @@
 #include <string.h>
 #include <stdio.h>
 #include <glade/glade.h>
-#include <libgnome/gnome-config.h>
 #include <glib.h>
 #include <glib/gi18n.h>
 
diff -Nabur gossip-20060720-ok/src/gossip-edit-groups-dialog.c gossip-20060721-notok/src/gossip-edit-groups-dialog.c
--- gossip-20060720-ok/src/gossip-edit-groups-dialog.c	2006-05-26 19:02:07.000000000 +0200
+++ gossip-20060721-notok/src/gossip-edit-groups-dialog.c	2006-07-20 16:29:30.000000000 +0200
@@ -22,7 +22,6 @@
 #include <string.h>
 #include <gtk/gtk.h>
 #include <glib/gi18n.h>
-#include <loudmouth/loudmouth.h>
 
 #include "gossip-app.h"
 #include "gossip-edit-groups-dialog.h"
diff -Nabur gossip-20060720-ok/src/gossip-geometry.c gossip-20060721-notok/src/gossip-geometry.c
--- gossip-20060720-ok/src/gossip-geometry.c	2006-07-05 23:58:10.000000000 +0200
+++ gossip-20060721-notok/src/gossip-geometry.c	2006-07-20 13:41:17.000000000 +0200
@@ -19,9 +19,7 @@
  */
 
 #include <config.h>
-
 #include <sys/stat.h>
-
 #include <glib.h>
 
 #include <libgossip/gossip-chatroom.h>
@@ -69,13 +67,10 @@
 	GError      *error = NULL;
 	GKeyFile    *key_file;
 	const gchar *id;
-
 	gchar       *filename;
-
 	GdkScreen   *screen;
 	gint         max_width;
 	gint         max_height;
-
 	gchar       *content;
 	gsize        length;
 	gchar       *str;
@@ -99,12 +94,12 @@
 	max_width = gdk_screen_get_width (screen);
 	max_height = gdk_screen_get_height (screen);
 
-	x = CLAMP (x, 0, max_width);
-	y = CLAMP (y, 0, max_height);
-
 	w = CLAMP (w, 100, max_width);
 	h = CLAMP (h, 100, max_height);
 
+	x = CLAMP (x, 0, max_width - w);
+	y = CLAMP (y, 0, max_height - h);
+
 	str = g_strdup_printf (GEOMETRY_FORMAT, x, y, w, h);
 	
 	key_file = g_key_file_new ();
@@ -218,13 +213,10 @@
 {
 	GError    *error = NULL;
 	GKeyFile  *key_file;
-
 	gchar     *filename;
-
 	GdkScreen *screen;
 	gint       max_width;
 	gint       max_height;
-
 	gchar     *content;
 	gsize      length;
 	gchar     *str;
@@ -236,11 +228,11 @@
 	max_width = gdk_screen_get_width (screen);
 	max_height = gdk_screen_get_height (screen);
 
-	x = CLAMP (x, 0, max_width);
-	y = CLAMP (y, 0, max_height);
+	w = CLAMP (w, 0, max_width);
+	h = CLAMP (h, 0, max_height);
 
-	w = CLAMP (w, 100, max_width);
-	h = CLAMP (h, 100, max_height);
+	x = CLAMP (x, 0, max_width - w);
+	y = CLAMP (y, 0, max_height - h);
 
 	str = g_strdup_printf (GEOMETRY_FORMAT, x, y, w, h);
 	
diff -Nabur gossip-20060720-ok/src/gossip-idle.c gossip-20060721-notok/src/gossip-idle.c
--- gossip-20060720-ok/src/gossip-idle.c	2004-04-21 02:04:26.000000000 +0200
+++ gossip-20060721-notok/src/gossip-idle.c	2006-07-20 11:25:28.000000000 +0200
@@ -21,10 +21,14 @@
 #include <config.h>
 #include <time.h>
 #include <stdlib.h>
+
+#ifdef HAVE_XSS
 #include <X11/Xlib.h>
 #include <X11/Xutil.h>
 #include <X11/extensions/scrnsaver.h>
 #include <gdk/gdkx.h>
+#endif
+
 #include <gdk/gdk.h>
 #include "gossip-idle.h"
 
@@ -33,6 +37,7 @@
 gint32
 gossip_idle_get_seconds (void)
 {
+#ifdef HAVE_XSS
 	static gboolean          inited = FALSE;
 	static XScreenSaverInfo *ss_info = NULL;
 	gint                     event_base;
@@ -61,6 +66,10 @@
 	timestamp = time (NULL);
 
 	return idle;
+#else
+	/* Pretend we are never idle for now. */
+	return 5;
+#endif
 }
 
 void
diff -Nabur gossip-20060720-ok/src/gossip-image-chooser.c gossip-20060721-notok/src/gossip-image-chooser.c
--- gossip-20060720-ok/src/gossip-image-chooser.c	2006-07-05 23:58:10.000000000 +0200
+++ gossip-20060721-notok/src/gossip-image-chooser.c	2006-07-20 16:15:18.000000000 +0200
@@ -22,14 +22,15 @@
  */
 
 #include <config.h>
-
 #include <string.h>
-
 #include <glib/gi18n.h>
 #include <gtk/gtkimage.h>
 #include <gtk/gtkbutton.h>
 #include <gtk/gtkdnd.h>
+
+#ifdef HAVE_GNOME
 #include <libgnomevfs/gnome-vfs-ops.h>
+#endif
 
 #include <libgossip/gossip-debug.h>
 
@@ -434,6 +435,7 @@
 	target_type = gdk_atom_name (selection_data->target);
 
 	if (!strcmp (target_type, URI_LIST_TYPE)) {
+#ifdef HAVE_GNOME
 		GnomeVFSHandle   *handle;
 		GnomeVFSResult    result;
 		GnomeVFSFileInfo  info;
@@ -474,10 +476,10 @@
 			}
 
 			gnome_vfs_close (handle);
-
 		}
 
 		g_free (uri);
+#endif
 	}
 
 	gtk_drag_finish (context, handled, FALSE, time);
diff -Nabur gossip-20060720-ok/src/gossip-log.c gossip-20060721-notok/src/gossip-log.c
--- gossip-20060720-ok/src/gossip-log.c	2006-07-18 19:15:26.000000000 +0200
+++ gossip-20060721-notok/src/gossip-log.c	2006-07-20 10:46:54.000000000 +0200
@@ -53,22 +53,14 @@
 #include <glib/gi18n.h>
 #include <glib/gstdio.h>
 
-#ifdef USE_GNOMEVFS_FOR_URL
-#include <libgnomevfs/gnome-vfs.h>
-#else
-#include <libgnome/gnome-url.h>
-#endif
-
-#include <libgnomevfs/gnome-vfs-utils.h>
-#include <libxslt/xslt.h>
-#include <libxslt/transform.h>
-#include <libxslt/xsltutils.h>
-#include "libexslt/exslt.h"
-
 #include <libgossip/gossip-debug.h>
 #include <libgossip/gossip-message.h>
 #include <libgossip/gossip-utils.h>
 
+#ifdef HAVE_GNOME
+#include <libgnomevfs/gnome-vfs-utils.h>
+#endif
+
 #include "gossip-app.h"
 #include "gossip-log.h"
 
@@ -115,6 +107,8 @@
 	gchar         *date;
 };
 
+static gchar *         log_escape                              (const gchar    *str);
+static gchar *         log_unescape                            (const gchar    *str);
 static void            log_handlers_notify_foreach             (GossipLogMessageFunc   func,
 								HandlerData           *data,
 								GList                **list);
@@ -154,6 +148,26 @@
 static GHashTable *contact_files = NULL;
 static GHashTable *message_handlers = NULL;
 
+static gchar *
+log_escape (const gchar *str)
+{
+#ifdef HAVE_GNOME
+	return gnome_vfs_escape_host_and_path_string (str);
+#else
+	return g_strdup (str);
+#endif
+}
+
+static gchar *
+log_unescape (const gchar *str)
+{
+#ifdef HAVE_GNOME
+	return gnome_vfs_unescape_string_for_display (str);
+#else
+	return g_strdup (str);
+#endif
+}
+
 static void
 log_handler_free (HandlerData *data)
 {
@@ -637,12 +651,12 @@
 	}
 	
 	account_id = gossip_account_get_id (account);
-	account_id_escaped = gnome_vfs_escape_host_and_path_string (account_id);
+	account_id_escaped = log_escape (account_id);
 
 	log_check_dir (&log_directory);
 
 	contact_id = gossip_contact_get_id (contact);
-	contact_id_escaped = gnome_vfs_escape_host_and_path_string (contact_id);
+	contact_id_escaped = log_escape (contact_id);
 	
 	basename = g_strconcat (date, LOG_FILENAME_SUFFIX, NULL);
 	filename = g_build_filename (log_directory,
@@ -703,12 +717,12 @@
 	}
 	
 	account_id = gossip_account_get_id (account);
-	account_id_escaped = gnome_vfs_escape_host_and_path_string (account_id);
+	account_id_escaped = log_escape (account_id);
 
 	log_check_dir (&log_directory);
 
 	chatroom_id = gossip_chatroom_get_id_str (chatroom);
-	chatroom_id_escaped = gnome_vfs_escape_host_and_path_string (chatroom_id);
+	chatroom_id_escaped = log_escape (chatroom_id);
 	
 	basename = g_strconcat (date, LOG_FILENAME_SUFFIX, NULL);
 	filename = g_build_filename (log_directory,
@@ -765,7 +779,7 @@
 		    gossip_account_get_id (account)); 
 
 	account_id = gossip_account_get_id (account);
-	account_id_escaped = gnome_vfs_escape_host_and_path_string (account_id);
+	account_id_escaped = log_escape (account_id);
 
 	log_check_dir (&log_directory);
 
@@ -951,7 +965,6 @@
 	return ok;
 }
 
-
 GList *
 gossip_log_get_contacts (GossipAccount *account)
 {
@@ -973,7 +986,7 @@
 	}
 
 	account_id = gossip_account_get_id (account);
-	account_id_escaped = gnome_vfs_escape_host_and_path_string (account_id);
+	account_id_escaped = log_escape (account_id);
 
 	directory = g_build_path (G_DIR_SEPARATOR_S, 
 				  log_directory, 
@@ -1001,7 +1014,7 @@
 			continue;
 		}
 
- 		filename_unescaped = gnome_vfs_unescape_string_for_display (filename);
+ 		filename_unescaped = log_unescape (filename);
 		contact = log_get_contact (account, filename_unescaped);
 		g_free (filename_unescaped);
 
@@ -1040,7 +1053,7 @@
 	}
 
 	account_id = gossip_account_get_id (account);
-	account_id_escaped = gnome_vfs_escape_host_and_path_string (account_id);
+	account_id_escaped = log_escape (account_id);
 
 	directory = g_build_path (G_DIR_SEPARATOR_S, 
 				  log_directory, 
@@ -1071,7 +1084,7 @@
 
 		g_free (full);
 		
- 		filename_unescaped = gnome_vfs_unescape_string_for_display (filename);
+ 		filename_unescaped = log_unescape (filename);
 		chatroom = log_get_chatroom_from_filename (account, filename_unescaped);
 
 		g_free (filename_unescaped);
@@ -1126,10 +1139,10 @@
 	}
 
 	account_id = gossip_account_get_id (account);
-	account_id_escaped = gnome_vfs_escape_host_and_path_string (account_id);
+	account_id_escaped = log_escape (account_id);
 
 	contact_id = gossip_contact_get_id (contact);
-	contact_id_escaped = gnome_vfs_escape_host_and_path_string (contact_id);
+	contact_id_escaped = log_escape (contact_id);
 
 	directory = g_build_path (G_DIR_SEPARATOR_S, 
 				  log_directory, 
@@ -1560,10 +1573,10 @@
 	}
 
 	account_id = gossip_account_get_id (account);
-	account_id_escaped = gnome_vfs_escape_host_and_path_string (account_id);
+	account_id_escaped = log_escape (account_id);
 
 	chatroom_id = gossip_chatroom_get_id_str (chatroom);
-	chatroom_id_escaped = gnome_vfs_escape_host_and_path_string (chatroom_id);
+	chatroom_id_escaped = log_escape (chatroom_id);
 	
 	directory = g_build_path (G_DIR_SEPARATOR_S, 
 				  log_directory, 
diff -Nabur gossip-20060720-ok/src/gossip-main.c gossip-20060721-notok/src/gossip-main.c
--- gossip-20060720-ok/src/gossip-main.c	2006-07-05 23:19:48.000000000 +0200
+++ gossip-20060721-notok/src/gossip-main.c	2006-07-20 16:50:56.000000000 +0200
@@ -21,15 +21,18 @@
 #include <config.h>
 #include <string.h>
 #include <stdlib.h>
-
-#include <gtk/gtkwidget.h>
-#include <gtk/gtkwindow.h>
-#include <gtk/gtkmain.h>
+#include <gtk/gtk.h>
+#include <glib.h>
 #include <glib/gi18n.h>
-#include <glib/goption.h>
 
+#ifdef HAVE_GNOME
 #include <libgnome/gnome-program.h>
 #include <libgnomeui/gnome-ui-init.h>
+#endif
+
+#include <libgossip/gossip-account-manager.h>
+#include <libgossip/gossip-account.h>
+#include <libgossip/gossip-session.h>
 
 #ifdef HAVE_DBUS
 #include "gossip-dbus.h"
@@ -39,13 +42,8 @@
 #include "gossip-galago.h"
 #endif
 
-#include <libgossip/gossip-account-manager.h>
-#include <libgossip/gossip-account.h>
-#include <libgossip/gossip-session.h>
-
 #include "gossip-preferences.h"
 #include "gossip-stock.h"
-#include "gossip-dbus.h"
 #include "gossip-app.h"
 
 #define GNOME_PARAM_GOPTION_CONTEXT "goption-context"
@@ -58,7 +56,9 @@
 int
 main (int argc, char *argv[])
 {
+#ifdef HAVE_GNOME
 	GnomeProgram         *program;
+#endif
 	GossipSession        *session;
 	GossipAccountManager *account_manager;
 	GossipAccount        *account = NULL;
@@ -91,6 +91,9 @@
 	context = g_option_context_new (_("- Gossip Instant Messenger"));
 	g_option_context_add_main_entries (context, options, GETTEXT_PACKAGE);	
 
+	g_set_application_name (PACKAGE_NAME);
+
+#ifdef HAVE_GNOME
 	program = gnome_program_init ("gossip", PACKAGE_VERSION,
 				      LIBGNOMEUI_MODULE,
                                       argc, argv,
@@ -98,9 +101,15 @@
 				      GNOME_PARAM_GOPTION_CONTEXT, context,
 				      GNOME_PARAM_HUMAN_READABLE_NAME, PACKAGE_NAME,
 				      NULL);
+#else
+	gtk_init_with_args (&argc, &argv,
+			    _("- Gossip Instant Messenger"),
+			    options,
+			    GETTEXT_PACKAGE,
+			    NULL);
+#endif
 
-	g_set_application_name (PACKAGE_NAME);
-	gtk_window_set_default_icon_name ("gossip");
+	gossip_window_set_default_icon_name ("gossip");
 
 	/* Get all accounts. */
  	account_manager = gossip_account_manager_new (NULL);
@@ -187,7 +196,9 @@
 
 	gossip_stock_finalize ();
 
+#ifdef HAVE_GNOME
 	g_object_unref (program);
+#endif
 
 	return EXIT_SUCCESS;
 }
diff -Nabur gossip-20060720-ok/src/gossip-new-account-window.c gossip-20060721-notok/src/gossip-new-account-window.c
--- gossip-20060720-ok/src/gossip-new-account-window.c	2006-03-18 20:04:10.000000000 +0100
+++ gossip-20060721-notok/src/gossip-new-account-window.c	2006-07-20 15:47:08.000000000 +0200
@@ -21,11 +21,11 @@
 #include <config.h>
 #include <string.h>
 #include <ctype.h>
+#include <glib/gi18n.h>
 
+#ifdef HAVE_GNOME
 #include <libgnomeui/gnome-druid.h>
-#include <libgnome/gnome-config.h>
-#include <glib/gi18n.h>
-#include <loudmouth/loudmouth.h>
+#endif
 
 #include <libgossip/gossip-protocol.h>
 
@@ -97,7 +97,7 @@
 
 } GossipNewAccountWindow;
 
-
+#ifdef HAVE_GNOME
 static gboolean new_account_window_progress_pulse_cb   (GtkWidget               *progressbar);
 static void     new_account_window_register_cb         (GossipResult             result, 
 							GError                  *error,
@@ -652,6 +652,7 @@
 
 	g_free (window);
 }
+#endif
 
 gboolean
 gossip_new_account_window_is_needed (void)
@@ -683,6 +684,7 @@
 void
 gossip_new_account_window_show (GtkWindow *parent)
 {
+#ifdef HAVE_GNOME
 	GossipNewAccountWindow *window;
 	GossipAccountType       type;
 	GladeXML               *glade;
@@ -814,4 +816,5 @@
 		window->gtk_main_started = TRUE;
 		gtk_main ();
 	}
+#endif
 }
diff -Nabur gossip-20060720-ok/src/gossip-new-chatroom-dialog.c gossip-20060721-notok/src/gossip-new-chatroom-dialog.c
--- gossip-20060720-ok/src/gossip-new-chatroom-dialog.c	2006-07-09 15:01:05.000000000 +0200
+++ gossip-20060721-notok/src/gossip-new-chatroom-dialog.c	2006-07-20 16:30:00.000000000 +0200
@@ -23,7 +23,6 @@
 #include <stdio.h>
 #include <gtk/gtk.h>
 #include <glade/glade.h>
-#include <libgnome/gnome-config.h>
 #include <glib.h>
 #include <glib/gi18n.h>
 
diff -Nabur gossip-20060720-ok/src/gossip-private-chat.c gossip-20060721-notok/src/gossip-private-chat.c
--- gossip-20060720-ok/src/gossip-private-chat.c	2006-07-18 19:15:26.000000000 +0200
+++ gossip-20060721-notok/src/gossip-private-chat.c	2006-07-20 16:33:43.000000000 +0200
@@ -25,7 +25,6 @@
 #include <gtk/gtk.h>
 #include <glade/glade.h>
 #include <glib/gi18n.h>
-#include <libgnomeui/gnome-href.h>
 
 #include <libgossip/gossip-debug.h>
 #include <libgossip/gossip-message.h>
diff -Nabur gossip-20060720-ok/src/gossip-sound.c gossip-20060721-notok/src/gossip-sound.c
--- gossip-20060720-ok/src/gossip-sound.c	2006-07-18 19:15:26.000000000 +0200
+++ gossip-20060721-notok/src/gossip-sound.c	2006-07-20 10:54:33.000000000 +0200
@@ -19,8 +19,11 @@
  */
 
 #include <config.h>
+
+#ifdef HAVE_GNOME
 #include <libgnome/gnome-sound.h>
 #include <libgnome/gnome-triggers.h>
+#endif
 
 #include <libgossip/gossip-session.h>
 #include <libgossip/gossip-debug.h>
@@ -193,6 +196,7 @@
 		return;
 	}
 
+#ifdef HAVE_GNOME
 	switch (sound) {
 	case GOSSIP_SOUND_CHAT:
 		gossip_debug (DEBUG_DOMAIN, "Triggering 'Chat' event.");
@@ -210,6 +214,7 @@
 		gossip_debug (DEBUG_DOMAIN, "Unknown sound type.");
 		return;
 	}
+#endif
 }		
 
 void 
diff -Nabur gossip-20060720-ok/src/gossip-status-presets.c gossip-20060721-notok/src/gossip-status-presets.c
--- gossip-20060720-ok/src/gossip-status-presets.c	2006-06-30 18:06:37.000000000 +0200
+++ gossip-20060721-notok/src/gossip-status-presets.c	2006-07-20 13:34:10.000000000 +0200
@@ -20,12 +20,11 @@
  */
 
 #include <config.h>
-
+#include <sys/types.h>
+#include <sys/stat.h>
 #include <string.h>
-
 #include <glib.h>
 #include <glib/gi18n.h>
-#include <libgnomevfs/gnome-vfs.h>
 #include <libxml/parser.h>
 #include <libxml/tree.h>
 
@@ -67,14 +66,11 @@
 	}
 
 	dir = g_build_filename (g_get_home_dir (), ".gnome2", PACKAGE_NAME, NULL);
-	if (!g_file_test (dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) {
 		g_mkdir_with_parents (dir, S_IRUSR | S_IWUSR | S_IXUSR);
-	}
-
 	file_with_path = g_build_filename (dir, STATUS_PRESETS_XML_FILENAME, NULL);
 	g_free (dir);
 
-	if (g_file_test(file_with_path, G_FILE_TEST_EXISTS)) {
+	if (g_file_test (file_with_path, G_FILE_TEST_EXISTS)) {
 		status_presets_file_parse (file_with_path);
 	}
 	
@@ -189,10 +185,7 @@
 	gint        count[4] = { 0, 0, 0, 0};
 
 	dir = g_build_filename (g_get_home_dir (), ".gnome2", PACKAGE_NAME, NULL);
-	if (!g_file_test (dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) {
 		g_mkdir_with_parents (dir, S_IRUSR | S_IWUSR | S_IXUSR);
-	}
-
 	file = g_build_filename (dir, STATUS_PRESETS_XML_FILENAME, NULL);
 	g_free (dir);
 
diff -Nabur gossip-20060720-ok/src/gossip-subscription-dialog.c gossip-20060721-notok/src/gossip-subscription-dialog.c
--- gossip-20060720-ok/src/gossip-subscription-dialog.c	2006-07-05 23:58:10.000000000 +0200
+++ gossip-20060721-notok/src/gossip-subscription-dialog.c	2006-07-20 16:12:04.000000000 +0200
@@ -19,10 +19,8 @@
  */
 
 #include <string.h>
-
 #include <gtk/gtk.h>
 #include <glib/gi18n.h>
-#include <libgnomeui/libgnomeui.h>
 
 #include <libgossip/gossip-debug.h>
 #include <libgossip/gossip-protocol.h>
@@ -344,7 +342,7 @@
 		GtkWidget *href;
 		GtkWidget *alignment;
 
-		href = gnome_href_new (url, url);
+		href = gossip_link_button_new (url, url);
 
 		alignment = gtk_alignment_new (0, 1, 0, 0.5);
 		gtk_container_add (GTK_CONTAINER (alignment), href);
diff -Nabur gossip-20060720-ok/src/gossip-theme-manager.c gossip-20060721-notok/src/gossip-theme-manager.c
--- gossip-20060720-ok/src/gossip-theme-manager.c	2006-07-18 19:15:26.000000000 +0200
+++ gossip-20060721-notok/src/gossip-theme-manager.c	2006-07-20 10:54:33.000000000 +0200
@@ -614,13 +614,13 @@
 	
 	tag = theme_manager_init_tag_by_name (table, "fancy-line-top-self");
 	g_object_set (tag,
-		      "size", 1,
+		      "size", 1 * PANGO_SCALE,
 		      "paragraph-background", ELEGANT_LINE,
 		      NULL);
 	
 	tag = theme_manager_init_tag_by_name (table, "fancy-line-bottom-self");
 	g_object_set (tag,
-		      "size", 2,
+		      "size", 1 * PANGO_SCALE,
 		      NULL);
 	
 	tag = theme_manager_init_tag_by_name (table, "fancy-action-self");
@@ -653,13 +653,13 @@
 	
 	tag = theme_manager_init_tag_by_name (table, "fancy-line-top-other");
 	g_object_set (tag,
-		      "size", 1,
+		      "size", 1 * PANGO_SCALE,
 		      "paragraph-background", ELEGANT_LINE,
 		      NULL);
 	
 	tag = theme_manager_init_tag_by_name (table, "fancy-line-bottom-other");
 	g_object_set (tag,
-		      "size", 2,
+		      "size", 1 * PANGO_SCALE,
 		      NULL);
 		
 	tag = theme_manager_init_tag_by_name (table, "fancy-action-other");
diff -Nabur gossip-20060720-ok/src/gossip-throbber.c gossip-20060721-notok/src/gossip-throbber.c
--- gossip-20060720-ok/src/gossip-throbber.c	2006-07-02 11:52:12.000000000 +0200
+++ gossip-20060721-notok/src/gossip-throbber.c	2006-07-20 13:41:17.000000000 +0200
@@ -21,13 +21,8 @@
 
 #include <config.h>
 #include <math.h>
-
 #include <gdk-pixbuf/gdk-pixbuf.h>
-#include <gtk/gtksignal.h>
-#include <glib/gi18n.h>
-#include <libgnome/gnome-macros.h>
-#include <libgnome/gnome-util.h>
-#include <gtk/gtkicontheme.h>
+#include <gtk/gtk.h>
 
 #include "gossip-throbber.h"
 
@@ -55,7 +50,7 @@
 						    GossipThrobber *throbber);
 static void gossip_throbber_remove_update_callback (GossipThrobber *throbber);
 
-GNOME_CLASS_BOILERPLATE (GossipThrobber, gossip_throbber, GtkEventBox, GTK_TYPE_EVENT_BOX)
+G_DEFINE_TYPE (GossipThrobber, gossip_throbber, GTK_TYPE_EVENT_BOX)
 
 static gboolean
 is_throbbing (GossipThrobber *throbber)
@@ -103,7 +98,7 @@
 }
 
 static void
-gossip_throbber_instance_init (GossipThrobber *throbber)
+gossip_throbber_init (GossipThrobber *throbber)
 {
 	GtkWidget *widget = GTK_WIDGET (throbber);
 	
@@ -218,7 +213,7 @@
 	
 	throbber = GOSSIP_THROBBER (widget);
 	
-	GNOME_CALL_PARENT (GTK_WIDGET_CLASS, map, (widget));
+	GTK_WIDGET_CLASS (gossip_throbber_parent_class)->map (widget);
 	throbber->details->ready = TRUE;
 }
 
@@ -460,7 +455,7 @@
 
 	g_free (throbber->details);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (gossip_throbber_parent_class)->finalize (object);
 }
 
 static void
diff -Nabur gossip-20060720-ok/src/gossip-transport-accounts-window.c gossip-20060721-notok/src/gossip-transport-accounts-window.c
--- gossip-20060720-ok/src/gossip-transport-accounts-window.c	2006-02-25 01:07:50.000000000 +0100
+++ gossip-20060721-notok/src/gossip-transport-accounts-window.c	2006-07-20 15:47:07.000000000 +0200
@@ -22,7 +22,7 @@
 #include <string.h>
 #include <gtk/gtk.h>
 #include <glib/gi18n.h>
-#include <loudmouth/loudmouth.h>
+
 #include "gossip-app.h"
 #include "gossip-stock.h"
 #include "gossip-add-contact.h"
diff -Nabur gossip-20060720-ok/src/gossip-transport-add-window.c gossip-20060721-notok/src/gossip-transport-add-window.c
--- gossip-20060720-ok/src/gossip-transport-add-window.c	2006-02-25 01:07:50.000000000 +0100
+++ gossip-20060721-notok/src/gossip-transport-add-window.c	2006-07-20 15:47:07.000000000 +0200
@@ -23,7 +23,7 @@
 #include <gtk/gtk.h>
 #include <libgnomeui/gnome-druid.h>
 #include <glib/gi18n.h>
-#include <loudmouth/loudmouth.h>
+
 #include "gossip-utils.h"
 #include "gossip-app.h"
 #include "gossip-transport-discover.h"
diff -Nabur gossip-20060720-ok/src/gossip-ui-utils.c gossip-20060721-notok/src/gossip-ui-utils.c
--- gossip-20060720-ok/src/gossip-ui-utils.c	2006-07-19 12:13:44.000000000 +0200
+++ gossip-20060721-notok/src/gossip-ui-utils.c	2006-07-20 16:50:56.000000000 +0200
@@ -31,6 +31,7 @@
 
 #ifdef HAVE_GNOME
 #include <libgnome/gnome-url.h>
+#include <libgnomeui/gnome-href.h>
 #elif defined (HAVE_COCOA)
 #include <Cocoa/Cocoa.h>
 #endif
@@ -1360,3 +1361,33 @@
 {
 }
 #endif
+
+/* FIXME: Replace with GtkLinkButton in 2.10. */
+GtkWidget *
+gossip_link_button_new (const gchar *url,
+			const gchar *title)
+{
+#ifdef HAVE_GNOME
+	return gnome_href_new (url, title);
+#else
+	return gtk_label_new (title);
+#endif
+}
+
+void
+gossip_window_set_default_icon_name (const gchar *name)
+{
+#ifdef HAVE_GNOME
+	gtk_window_set_default_icon_name (name);
+#elif defined(HAVE_COCOA)
+	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
+	/* FIXME: Do this in a proper way at some point, probably in GTK+? */
+	NSImage *image = [[NSImage alloc] initWithContentsOfFile:
+			  @PREFIX"/share/icons/hicolor/48x48/apps/gossip.png"];
+	[NSApp setApplicationIconImage: image];
+	[image release];
+	
+	[pool release];
+#endif
+}
diff -Nabur gossip-20060720-ok/src/gossip-ui-utils.h gossip-20060721-notok/src/gossip-ui-utils.h
--- gossip-20060720-ok/src/gossip-ui-utils.h	2006-07-19 12:06:46.000000000 +0200
+++ gossip-20060721-notok/src/gossip-ui-utils.h	2006-07-20 16:50:56.000000000 +0200
@@ -104,7 +104,11 @@
 /* Windows */
 gboolean   gossip_window_get_is_visible             (GtkWindow           *window);
 void       gossip_window_present                    (GtkWindow           *window);
+void       gossip_window_set_default_icon_name      (const gchar         *name);
 
 void       gossip_url_show                          (const char          *url);
 
+GtkWidget *gossip_link_button_new                   (const gchar         *url,
+						     const gchar         *title);
+
 #endif /*  __GOSSIP_UI_UTILS_H__ */
diff -Nabur gossip-20060720-ok/src/gossip-vcard-dialog.c gossip-20060721-notok/src/gossip-vcard-dialog.c
--- gossip-20060720-ok/src/gossip-vcard-dialog.c	2006-07-18 19:15:26.000000000 +0200
+++ gossip-20060721-notok/src/gossip-vcard-dialog.c	2006-07-20 13:12:18.000000000 +0200
@@ -24,10 +24,11 @@
 #include <gtk/gtk.h> 
 #include <glade/glade.h>
 #include <glib/gi18n.h>
-#include <libgnomeui/gnome-href.h>
+
+#ifdef HAVE_GNOME
 #include <libgnomeui/libgnomeui.h>  
 #include <libgnomevfs/gnome-vfs-mime-utils.h>
-#include <loudmouth/loudmouth.h>
+#endif
 
 #include <libgossip/gossip-debug.h>
 #include <libgossip/gossip-conf.h>
@@ -89,7 +90,9 @@
 
 	gint       last_account_selected;
 
+#ifdef HAVE_GNOME
 	GnomeThumbnailFactory *thumbs;
+#endif
 } GossipVCardDialog;
 
 static void     vcard_dialog_avatar_chooser_response_cb (GtkWidget         *widget,
@@ -223,6 +226,7 @@
 	gtk_widget_show (chooser_dialog);
 }
 
+#ifdef HAVE_GNOME
 static GdkPixbuf *
 vcard_dialog_scale_down_to_width (GdkPixbuf *pixbuf, gint wanted_width)
 {
@@ -245,11 +249,13 @@
 
 	return g_object_ref (pixbuf);
 }
+#endif
 
 static void 
 vcard_dialog_avatar_update_preview_cb (GtkFileChooser    *chooser,
 				       GossipVCardDialog *dialog) 
 {
+#ifdef HAVE_GNOME
 	gchar *uri;
 
 	uri = gtk_file_chooser_get_preview_uri (chooser);
@@ -261,7 +267,8 @@
 		gchar     *mime_type;
 
 		if (!dialog->thumbs) {
-			dialog->thumbs = gnome_thumbnail_factory_new (GNOME_THUMBNAIL_SIZE_NORMAL);
+			dialog->thumbs =
+				gnome_thumbnail_factory_new (GNOME_THUMBNAIL_SIZE_NORMAL);
 		}
 		
 		mime_type = gnome_vfs_get_mime_type (uri);
@@ -286,6 +293,7 @@
 	}
 
 	gtk_file_chooser_set_preview_widget_active (chooser, TRUE);
+#endif
 }
 
 static void


More information about the Gossip-dev mailing list