changeset 16730:8eed567eee39

propagate from branch 'im.pidgin.pidgin' (head 15e8fddee885a9fd505a14ff31f33608aebc8e28) to branch 'im.pidgin.finch.workspaces' (head a77bce57064ffb1489711ce04e2c0363661f652d)
author Richard Nelson <wabz@pidgin.im>
date Mon, 30 Apr 2007 12:02:15 +0000
parents a73c9decc420 (diff) 3af867ef5a15 (current diff)
children 3c3fc1432a01
files finch/libgnt/Makefile.am
diffstat 131 files changed, 1228 insertions(+), 191 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog.API	Sun Apr 29 01:09:18 2007 +0000
+++ b/ChangeLog.API	Mon Apr 30 12:02:15 2007 +0000
@@ -164,14 +164,23 @@
 	* gaim_gtk_buddy_icon_get_scale_size() was changed to accept an
 	  additional parameter which is used to determine what kind of
 	  scaling should be done, if any.
-    * purple_request_input(), purple_request_choice(),
-      purple_request_choice_varg(), purple_request_action(),
-      purple_request_action_varg(), purple_request_fields(),
-      purple_request_yes_no(), purple_request_ok_cancel(),
-      purple_request_accept_cancel(), purple_request_file(), and
-      purple_request_folder() was changed to accept account, who, and
-      conversation parameters for associating the request with an account, a
-      buddy, or a conversation.
+	* purple_request_input(), purple_request_choice(),
+	  purple_request_choice_varg(), purple_request_action(),
+	  purple_request_action_varg(), purple_request_fields(),
+	  purple_request_yes_no(), purple_request_ok_cancel(),
+	  purple_request_accept_cancel(), purple_request_file(), and
+	  purple_request_folder() was changed to accept account, who, and
+	  conversation parameters for associating the request with an account, a
+	  buddy, or a conversation.
+	* Significant changes to the buddy icon and imgstore APIs.  If you
+	  were using any of it, it's best to look at the header files or
+	  Doxygen documentation, but here are some significant changes:
+	    purple_buddy_icon_new() now takes ownership of ("frees") icon_data
+	    purple_buddy_icon_set_data(): likewise for data
+	    purple_buddy_icon_set_for_user(): likewise for data
+	    purple_buddy_icon_set_for_user() now takes a checksum parameter
+	    purple_imgstore_add() was renamed to purple_imgstore_add_with_id()
+	      which takes ownership of data
 
 	Removed:
 	* gaim_gtk_sound_{get,set}_mute() (replaced by the /gaim/gtk/sound/mute
--- a/Makefile.am	Sun Apr 29 01:09:18 2007 +0000
+++ b/Makefile.am	Mon Apr 30 12:02:15 2007 +0000
@@ -26,7 +26,7 @@
 	cp pidgin.spec $(distdir)
 	rm $(distdir)/config.h
 
-distcheck-hook: libpurple/plugins/perl/common/Purple.pm pidgin/plugins/perl/common/GtkUI.pm
+distcheck-hook: libpurple/plugins/perl/common/Purple.pm pidgin/plugins/perl/common/Pidgin.pm
 #	cp libpurple/plugins/perl/common/Gaim.pm $(distdir)/libpurple/plugins/perl/common
 
 appsdir = $(datadir)/applications
--- a/Makefile.mingw	Sun Apr 29 01:09:18 2007 +0000
+++ b/Makefile.mingw	Mon Apr 30 12:02:15 2007 +0000
@@ -92,7 +92,7 @@
 	$(MAKE) -C $(PURPLE_PO_TOP) -f $(MINGW_MAKEFILE) clean
 	$(MAKE) -C $(PIDGIN_TOP) -f $(MINGW_MAKEFILE) clean
 	$(MAKE) -C $(PURPLE_TOP) -f $(MINGW_MAKEFILE) clean
-	rm -f $(PIDGIN_CONFIG_H) VERSION pidgin*.exe
+	rm -f $(PIDGIN_CONFIG_H) ./VERSION pidgin*.exe
 
 uninstall:
 	rm -rf $(PURPLE_INSTALL_PERLMOD_DIR) $(PIDGIN_INSTALL_PLUGINS_DIR) $(PURPLE_INSTALL_PO_DIR) $(PIDGIN_INSTALL_DIR) $(PIDGIN_INSTALL_DIR).release
--- a/NEWS	Sun Apr 29 01:09:18 2007 +0000
+++ b/NEWS	Mon Apr 30 12:02:15 2007 +0000
@@ -1,6 +1,17 @@
 Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
-2.0.0:
+2.0.0beta7 (4/29/2007):
+	Sean: Beta 7. The final beta. A few major changes from beta6. For
+	starters, we have some new names. That's pretty cool. We have a new
+	logo, to go along with it. And a lot of great icons! As Nathan mentions
+	below, we're totally back in the open now, having a signed agreement
+	from AOL that puts us in the clear. We all really regret having to go
+	completely dark for so long. Anyway, unlike betas1-6, which were of
+	normal release quality, this one is actually beta quality. There are
+	a few significant known issues, and a lot of changes that need a lot
+	of real-world testing. So, if you'd like to help us out, give it a
+	whirl, and let us know if you run into any major issues.
+
 	Nathan:  So, the secret is out now.  We renamed to Pidgin.  I'd just
 	like to apologize to everyone we've had to keep in the dark for the
 	last however-many months.  I know it looked like development slowed
@@ -12,13 +23,35 @@
 	I was.  Scared, that is).  The bottom line is that we're out in the
 	open again, and fully plan to stay that way.  We're also opening up
 	the mail archives from the secretive past few months.  You can scan
-	though them if you want, or I can summarize.  "Are the lawyers done
+	through them if you want, or I can summarize.  "Are the lawyers done
 	yet?  No.  Now?  No.  How about now?  No."  All lawyer jokes aside,
 	I'm grateful to our legal team for crossing all the 't's and dotting
 	all the lowercase 'j's to get us the deal we got.  Anyways, thanks
 	for your patience, and on to 2.0.1!
 
-2.0.0beta6 (1/17/2006):
+	Gary: Well my silence, and our silence has ended.  Finally the name
+	change is over and done with and we can go back to a normal dev
+	cycle.  Now if I can just get myself back onto a normal dev cycle,
+	but that's another story all together.
+
+	Ethan: Not to be too "me-too", but I have to say that I'm really
+	excited about the project's new name and identity, and glad to be
+	out of the legal mess.  We're pushing beta 7 with all of the
+	branding and organizational changes that have been going on for
+	the last few months, so there are likely to be some snags --
+	please help us out by trying beta 7, searching for any bugs you
+	find in the bug tracker at http://developer.pidgin.im/, and
+	documenting them if they are unknown or you can provide new
+	information.  Help us make 2.0.0 final a release to be remembered
+	(in a good way)!  I'd like to give huge thanks to all of the
+	developers, our steadfast supporters, the crazy patch writers, and
+	everyone else who has made this transition to Pidgin possible, and
+	the improvements that go along with it.  I'd like to extend a
+	special thanks to Sean, for leading us through the legal issues
+	and taking care of all of the paperwork and overhead that no one
+	wants to deal with.
+
+2.0.0beta6 (1/17/2007):
 	Sean: Barring any seriously major new issues, we expect this to be
 	the final beta release before 2.0.0. This has a bunch of cool UI
 	changes, some Google Talk features, a bunch new plugins, and other
--- a/configure.ac	Sun Apr 29 01:09:18 2007 +0000
+++ b/configure.ac	Mon Apr 30 12:02:15 2007 +0000
@@ -1,24 +1,67 @@
 dnl Process this file with autoconf to produce a configure script.
 AC_PREREQ([2.50])
 
-# Making releases:
-#   purple_micro_version += 1
-# if any functions have been added:
+# UPDATING VERSION NUMBERS FOR RELEASES
+#
+# purple_micro_version += 1
+#
+# If any functions have been added to libpurple, Pidgin, or Finch:
 #   purple_micro_version = 0
 #   purple_minor_version += 1
-# if backwards compatibility has been broken
-#   purple_minor_version = 0
+#   purple_lt_current += 1
+#
+# If backwards compatibility has been broken in libpurple, Pidgin, or Finch:
 #   purple_micro_version = 0
+#   purple_minor_version = 0
 #   purple_major_version += 1;
+#   purple_lt_current += 1
 #
+# purple_version_suffix should be similar to one of the following:
+#   For beta releases:          [beta2]
+#   For code under development: [devel]
+#   For production releases:    []
+#
+#
+# If any code has changed in libgnt:
+#   gnt_micro_version += 1
+#
+# If any functions have been added to libgnt:
+#   gnt_micro_version = 0
+#   gnt_minor_version += 1
+#   gnt_lt_current += 1
+#
+# If backwards compatibility has been broken in libgnt:
+#   gnt_micro_version = 0
+#   gnt_minor_version = 0
+#   gnt_major_version += 1;
+#   gnt_lt_current += 1
+#
+# gnt_version_suffix should be similar to one of the following:
+#   For beta releases:          [beta2]
+#   For code under development: [devel]
+#   For production releases:    []
+#
+# Make sure to update finch/libgnt/configure.ac with libgnt version changes.
+#
+m4_define([purple_lt_current], [0])
 m4_define([purple_major_version], [2])
 m4_define([purple_minor_version], [0])
 m4_define([purple_micro_version], [0])
-m4_define([purple_version_suffix], [devel])
+m4_define([purple_version_suffix], [beta7])
 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]))
 
+m4_define([gnt_lt_current], [0])
+m4_define([gnt_major_version], [1])
+m4_define([gnt_minor_version], [0])
+m4_define([gnt_micro_version], [0])
+m4_define([gnt_version_suffix], [beta7])
+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]))
+
+
 AC_INIT([pidgin], [purple_display_version], [devel@pidgin.im])
 
 AC_CANONICAL_SYSTEM
@@ -35,12 +78,20 @@
 AC_SUBST(PURPLE_MICRO_VERSION)
 AC_SUBST(PURPLE_VERSION)
 
-m4_define([lt_current], [m4_eval(100 * purple_major_version + purple_minor_version)])
-m4_define([lt_age], [purple_minor_version])
-m4_define([lt_revision], [purple_micro_version])
-LT_VERSION_INFO="lt_current:lt_revision:lt_age"
-AC_SUBST(LT_VERSION_INFO)
+PURPLE_LT_VERSION_INFO="purple_lt_current:purple_micro_version:purple_minor_version"
+AC_SUBST(PURPLE_LT_VERSION_INFO)
 
+GNT_MAJOR_VERSION=gnt_major_version
+GNT_MINOR_VERSION=gnt_minor_version
+GNT_MICRO_VERSION=gnt_micro_version
+GNT_VERSION=[gnt_display_version]
+AC_SUBST(GNT_MAJOR_VERSION)
+AC_SUBST(GNT_MINOR_VERSION)
+AC_SUBST(GNT_MICRO_VERSION)
+AC_SUBST(GNT_VERSION)
+
+GNT_LT_VERSION_INFO="gnt_lt_current:gnt_micro_version:gnt_minor_version"
+AC_SUBST(GNT_LT_VERSION_INFO)
 
 AC_DEFINE(PIDGIN_NAME, "Pidgin", [The user-visible application name])
 
@@ -677,6 +728,7 @@
 	GADU_LIBS="$GADU_LIBS -lgadu"
 	AC_CHECK_LIB(gadu, gg_libgadu_version, [gadu_libs=yes], , $GADU_LIBS)
 fi
+GADU_CFLAGS=`echo $GADU_CFLAGS |$sedpath 's/-Wall//'`
 
 if test "x$gadu_libs" = "xyes"; then
 	AC_MSG_CHECKING(for libgadu GPL compatibility)
--- a/doc/Makefile.am	Sun Apr 29 01:09:18 2007 +0000
+++ b/doc/Makefile.am	Mon Apr 30 12:02:15 2007 +0000
@@ -21,6 +21,7 @@
 	gtklog-signals.dox \
 	gtkimhtml-signals.dox \
 	gtkrc-2.0 \
+	imgstore-signals.dox \
 	log-signals.dox \
 	notify-signals.dox \
 	pidgin.1.in \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/imgstore-signals.dox	Mon Apr 30 12:02:15 2007 +0000
@@ -0,0 +1,24 @@
+/** @page imgstore-signals Image Store Signals
+
+ @signals
+  @signal image-deleting
+ @endsignals
+
+ <hr>
+
+ @signaldef image-deleting
+  @signalproto
+char *(*image_deleting)(const PurpleStoredImage *img);
+  @endsignalproto
+  @signaldesc
+   Emitted when a PurpleStoredImage is about to be destroyed.  This allows
+   for what amounts to weak references.  Code can hold onto a pointer to
+   the PurpleStoredImage without actually "holding" a reference.  They can
+   then use a signal handler to let them know when their img is about to
+   be destroyed.
+  @param img The image about to be destroyed.
+  @note It's not possible to purple_imgstore_ref() img to save it.
+ @endsignaldef
+
+*/
+// vim: syntax=c tw=75 et
--- a/doc/pidgin.1.in	Sun Apr 29 01:09:18 2007 +0000
+++ b/doc/pidgin.1.in	Mon Apr 30 12:02:15 2007 +0000
@@ -570,6 +570,8 @@
 
 Our crazy patch writers include:
 
+John 'rekkanoryo' Bailey
+.br
 Ka-Hing 'javabsp' Cheung
 .br
 Sadrul Habib Chowdhury
--- a/finch/finch.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/finch/finch.c	Mon Apr 30 12:02:15 2007 +0000
@@ -59,7 +59,13 @@
 	finch_prefs_init,
 	debug_init,
 	gnt_ui_init,
-	gnt_ui_uninit
+	gnt_ui_uninit,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurpleCoreUiOps *
@@ -149,7 +155,13 @@
 	g_source_remove,
 	gnt_input_add,
 	g_source_remove,
-	NULL /* input_get_error */
+	NULL, /* input_get_error */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurpleEventLoopUiOps *
@@ -291,7 +303,7 @@
 			char *text = g_strdup_printf(_(
 				"%s encountered errors migrating your settings "
 				"from %s to %s. Please investigate and complete the "
-				"migration by hand."), _("Finch"),
+				"migration by hand. Please report this error at http://developer.pidgin.im"), _("Finch"),
 				old, purple_user_dir());
 
 			g_free(old);
--- a/finch/gntblist.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/finch/gntblist.c	Mon Apr 30 12:02:15 2007 +0000
@@ -1699,8 +1699,17 @@
 
 	newmessage = gnt_entry_get_text(GNT_ENTRY(ggblist->statustext));
 	item = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(ggblist->status));
-	g_return_val_if_fail(item->type == STATUS_PRIMITIVE, FALSE);
-	newprim = item->u.prim;
+
+	switch (item->type) {
+		case STATUS_PRIMITIVE:
+			newprim = item->u.prim;
+			break;
+		case STATUS_SAVED_POPULAR:
+			newprim = purple_savedstatus_get_type(item->u.saved);
+			break;
+		default:
+			goto end;  /* 'New' or 'Saved' is selected, but this should never happen. */
+	}
 
 	if (newprim != prim || ((message && !newmessage) ||
 				(!message && newmessage) ||
@@ -1718,6 +1727,7 @@
 	}
 
 	gnt_box_give_focus_to_child(GNT_BOX(ggblist->window), ggblist->tree);
+end:
 	if (ggblist->typing)
 		g_source_remove(ggblist->typing);
 	ggblist->typing = 0;
--- a/finch/gntconv.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/finch/gntconv.h	Mon Apr 30 12:02:15 2007 +0000
@@ -49,6 +49,7 @@
 	GntWidget *tv;            /* text-view */
 	GntWidget *menu;          /* future use */
 	GntWidget *info;
+	void *pad;
 
 	union
 	{
@@ -60,11 +61,14 @@
 struct _FinchConvChat
 {
 	GntWidget *userlist;       /* the userlist */
+	void *pad1;
+	void *pad2;
 };
 
 struct _FinchConvIm
 {
 	void *nothing_for_now;
+	void *something_for_later;
 };
 
 /**
--- a/finch/gntdebug.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/finch/gntdebug.c	Mon Apr 30 12:02:15 2007 +0000
@@ -95,7 +95,13 @@
 static PurpleDebugUiOps uiops =
 {
 	finch_debug_print,
-	finch_debug_is_enabled
+	finch_debug_is_enabled,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 PurpleDebugUiOps *finch_debug_get_ui_ops()
--- a/finch/gntft.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/finch/gntft.c	Mon Apr 30 12:02:15 2007 +0000
@@ -498,7 +498,13 @@
 	finch_xfer_add_xfer,
 	finch_xfer_update_progress,
 	finch_xfer_cancel_local,
-	finch_xfer_cancel_remote
+	finch_xfer_cancel_remote,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 /**************************************************************************
--- a/finch/gntidle.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/finch/gntidle.c	Mon Apr 30 12:02:15 2007 +0000
@@ -35,7 +35,13 @@
 
 static PurpleIdleUiOps ui_ops =
 {
-	finch_get_idle_time
+	finch_get_idle_time,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 PurpleIdleUiOps *
--- a/finch/libgnt/Makefile.am	Sun Apr 29 01:09:18 2007 +0000
+++ b/finch/libgnt/Makefile.am	Mon Apr 30 12:02:15 2007 +0000
@@ -78,7 +78,7 @@
 	$(libgnt_la_headers)
 
 libgnt_la_DEPENDENCIES = 
-libgnt_la_LDFLAGS = -export-dynamic
+libgnt_la_LDFLAGS = -export-dynamic -version_info $(GNT_LT_VERSION_INFO) -no-undefined
 libgnt_la_LIBADD = \
 	$(GLIB_LIBS) \
 	$(GNT_LIBS) \
--- a/finch/libgnt/configure.ac	Sun Apr 29 01:09:18 2007 +0000
+++ b/finch/libgnt/configure.ac	Mon Apr 30 12:02:15 2007 +0000
@@ -1,10 +1,54 @@
 dnl Process this file with autoconf to produce a configure script.
-AC_INIT([libgnt], [0.0.0dev], [devel@pidgin.im])
+AC_PREREQ([2.50])
+
+# UPDATING VERSION NUMBERS FOR RELEASES
+#
+# gnt_micro_version += 1
+#
+# If any functions have been added to libgnt:
+#   gnt_micro_version = 0
+#   gnt_minor_version += 1
+#   gnt_lt_current += 1
+#
+# If backwards compatibility has been broken in libgnt:
+#   gnt_micro_version = 0
+#   gnt_minor_version = 0
+#   gnt_major_version += 1;
+#   gnt_lt_current += 1
+#
+# gnt_version_suffix should be similar to one of the following:
+#   For beta releases:          [beta2]
+#   For code under development: [devel]
+#   For production releases:    []
+#
+# Make sure to update ../../configure.ac with libgnt version changes.
+#
+
+m4_define([gnt_lt_current], [0])
+m4_define([gnt_major_version], [1])
+m4_define([gnt_minor_version], [0])
+m4_define([gnt_micro_version], [0])
+m4_define([gnt_version_suffix], [beta7])
+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]))
+
+AC_INIT([libgnt], [gnt_display_version], [devel@pidgin.im])
 AC_CANONICAL_SYSTEM
 AM_CONFIG_HEADER(config.h)
 AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
 
-AC_PREREQ([2.50])
+GNT_MAJOR_VERSION=gnt_major_version
+GNT_MINOR_VERSION=gnt_minor_version
+GNT_MICRO_VERSION=gnt_micro_version
+GNT_VERSION=[gnt_display_version]
+AC_SUBST(GNT_MAJOR_VERSION)
+AC_SUBST(GNT_MINOR_VERSION)
+AC_SUBST(GNT_MICRO_VERSION)
+AC_SUBST(GNT_VERSION)
+
+GNT_LT_VERSION_INFO="gnt_lt_current:gnt_micro_version:gnt_minor_version"
+AC_SUBST(GNT_LT_VERSION_INFO)
 
 AC_PATH_PROG(sedpath, sed)
 
--- a/finch/plugins/gntclipboard.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/finch/plugins/gntclipboard.c	Mon Apr 30 12:02:15 2007 +0000
@@ -159,6 +159,12 @@
 	NULL,
 	NULL,
 	NULL,
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/finch/plugins/gntgf.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/finch/plugins/gntgf.c	Mon Apr 30 12:02:15 2007 +0000
@@ -378,6 +378,12 @@
 	config_frame,
 	NULL,
 	NULL,
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/finch/plugins/gnthistory.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/finch/plugins/gnthistory.c	Mon Apr 30 12:02:15 2007 +0000
@@ -190,6 +190,12 @@
 	NULL,
 	NULL,
 	NULL,
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/finch/plugins/lastlog.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/finch/plugins/lastlog.c	Mon Apr 30 12:02:15 2007 +0000
@@ -130,6 +130,12 @@
 	NULL,
 	NULL,
 	NULL,
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/libpurple/Makefile.am	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/Makefile.am	Mon Apr 30 12:02:15 2007 +0000
@@ -173,7 +173,7 @@
 libpurple_client_lib = libpurple-client.la
 
 libpurple_client_la_SOURCES = purple-client.c purple-client.h
-
+libpurple_client_la_LDFLAGS = -version-info $(PURPLE_LT_VERSION_INFO) -no-undefined
 libpurple_client_la_LIBADD = $(DBUS_LIBS)
 
 purple-client-bindings.c: dbus-analyze-functions.py $(dbus_exported)
@@ -221,7 +221,7 @@
 	$(dbus_headers)
 
 libpurple_la_DEPENDENCIES = $(STATIC_LINK_LIBS)
-libpurple_la_LDFLAGS = -export-dynamic -version-info $(LT_VERSION_INFO) -no-undefined
+libpurple_la_LDFLAGS = -export-dynamic -version-info $(PURPLE_LT_VERSION_INFO) -no-undefined
 libpurple_la_LIBADD = \
 	$(DBUS_LIBS) \
 	$(GLIB_LIBS) \
--- a/libpurple/Makefile.mingw	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/Makefile.mingw	Mon Apr 30 12:02:15 2007 +0000
@@ -127,7 +127,7 @@
 ##
 clean:
 	rm -f $(OBJECTS) $(RC_SRC)
-	rm -f $(TARGET).dll $(TARGET).dll.a
+	rm -f $(TARGET).dll $(TARGET).dll.a $(PURPLE_VERSION_H)
 	$(MAKE) -C $(PURPLE_PROTOS_TOP) -f $(MINGW_MAKEFILE) clean
 	$(MAKE) -C $(PURPLE_PLUGINS_TOP) -f $(MINGW_MAKEFILE) clean
 
--- a/libpurple/account.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/account.c	Mon Apr 30 12:02:15 2007 +0000
@@ -802,7 +802,7 @@
 
 	xmlnode_free(node);
 
-	purple_buddy_icons_account_loaded_cb();
+	_purple_buddy_icons_account_loaded_cb();
 }
 
 
--- a/libpurple/account.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/account.h	Mon Apr 30 12:02:15 2007 +0000
@@ -66,6 +66,11 @@
 				 const char *alias, const char *message, gboolean on_list, 
 				 GCallback authorize_cb, GCallback deny_cb, void *user_data);
 	void (*close_account_request)(void *ui_handle);
+
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 };
 
 struct _PurpleAccount
--- a/libpurple/blist.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/blist.c	Mon Apr 30 12:02:15 2007 +0000
@@ -607,7 +607,7 @@
 	xmlnode_free(purple);
 
 	/* This tells the buddy icon code to do its thing. */
-	purple_buddy_icons_blist_loaded_cb();
+	_purple_buddy_icons_blist_loaded_cb();
 }
 
 
--- a/libpurple/blist.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/blist.h	Mon Apr 30 12:02:15 2007 +0000
@@ -178,6 +178,11 @@
 	void (*request_add_chat)(PurpleAccount *account, PurpleGroup *group,
 							 const char *alias, const char *name);
 	void (*request_add_group)(void);
+
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 };
 
 #ifdef __cplusplus
--- a/libpurple/buddyicon.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/buddyicon.c	Mon Apr 30 12:02:15 2007 +0000
@@ -208,10 +208,14 @@
 }
 
 static void
-image_deleting_cb(PurpleStoredImage *img, gpointer data)
+image_deleting_cb(const PurpleStoredImage *img, gpointer data)
 {
 	const char *filename = purple_imgstore_get_filename(img);
 
+	/* If there's no filename, it can't be one of our images. */
+	if (filename == NULL)
+		return;
+
 	if (img == g_hash_table_lookup(icon_data_cache, filename))
 	{
 		purple_buddy_icon_data_uncache_file(filename);
@@ -219,7 +223,7 @@
 
 		/* We could make this O(1) by using another hash table, but
 		 * this is probably good enough. */
-		g_hash_table_foreach_remove(pointer_icon_cache, value_equals, img);
+		g_hash_table_foreach_remove(pointer_icon_cache, value_equals, (gpointer)img);
 	}
 }
 
@@ -694,11 +698,13 @@
 	{
 		const char *filename = purple_imgstore_get_filename(img);
 		purple_account_set_string(account, "buddy_icon", filename);
+		purple_account_set_int(account, "buddy_icon_timestamp", time(NULL));
 		ref_filename(filename);
 	}
 	else
 	{
 		purple_account_set_string(account, "buddy_icon", NULL);
+		purple_account_set_int(account, "buddy_icon_timestamp", 0);
 	}
 	unref_filename(old_icon);
 
@@ -721,7 +727,7 @@
 
 	if (old_img)
 		purple_imgstore_unref(old_img);
-	else
+	else if (old_icon)
 	{
 		/* The old icon may not have been loaded into memory.  In that
 		 * case, we'll need to uncache the filename.  The filenames
@@ -733,6 +739,25 @@
 	return img;
 }
 
+time_t
+purple_buddy_icons_get_account_icon_timestamp(PurpleAccount *account)
+{
+	time_t ret;
+
+	g_return_val_if_fail(account != NULL, 0);
+
+	ret = purple_account_get_int(account, "buddy_icon_timestamp", 0);
+
+	/* This deals with migration cases. */
+	if (ret == 0 && purple_account_get_string(account, "buddy_icon", NULL) != NULL)
+	{
+		ret = time(NULL);
+		purple_account_set_int(account, "buddy_icon_timestamp", ret);
+	}
+
+	return ret;
+}
+
 PurpleStoredImage *
 purple_buddy_icons_find_custom_icon(PurpleContact *contact)
 {
@@ -829,7 +854,7 @@
 
 	if (old_img)
 		purple_imgstore_unref(old_img);
-	else
+	else if (old_icon)
 	{
 		/* The old icon may not have been loaded into memory.  In that
 		 * case, we'll need to uncache the filename.  The filenames
@@ -842,7 +867,7 @@
 }
 
 void
-purple_buddy_icon_set_old_icons_dir(const char *dirname)
+_purple_buddy_icon_set_old_icons_dir(const char *dirname)
 {
 	old_icons_dir = g_strdup(dirname);
 }
@@ -887,9 +912,19 @@
 		FILE *file;
 		char *new_filename;
 
-		if (!read_icon_file(path, &icon_data, &icon_len) ||
-		    icon_data == NULL || icon_len > 0)
+		if (!read_icon_file(path, &icon_data, &icon_len))
 		{
+			g_free(path);
+			delete_buddy_icon_settings(node, setting_name);
+			return;
+		}
+
+		if (icon_data == NULL || icon_len <= 0)
+		{
+			/* This really applies to the icon_len check.
+			 * icon_data should never be NULL if
+			 * read_icon_file() returns TRUE. */
+			purple_debug_error("buddyicon", "Empty buddy icon file: %s\n", path);
 			delete_buddy_icon_settings(node, setting_name);
 			g_free(path);
 			return;
@@ -900,8 +935,11 @@
 		new_filename = purple_buddy_icon_data_calculate_filename(icon_data, icon_len);
 		if (new_filename == NULL)
 		{
+			purple_debug_error("buddyicon",
+				"New icon filename is NULL. This should never happen! "
+				"The old filename was: %s\n", path);
 			delete_buddy_icon_settings(node, setting_name);
-			return;
+			g_return_if_reached();
 		}
 
 		path = g_build_filename(dirname, new_filename, NULL);
@@ -967,14 +1005,14 @@
 	}
 	else
 	{
-		/* If the icon is gone, drop the setting... */
+		purple_debug_error("buddyicon", "Old icon file doesn't exist: %s\n", path);
 		delete_buddy_icon_settings(node, setting_name);
 		g_free(path);
 	}
 }
 
 void
-purple_buddy_icons_account_loaded_cb()
+_purple_buddy_icons_account_loaded_cb()
 {
 	const char *dirname = purple_buddy_icons_get_cache_dir();
 	GList *cur;
@@ -999,7 +1037,7 @@
 }
 
 void
-purple_buddy_icons_blist_loaded_cb()
+_purple_buddy_icons_blist_loaded_cb()
 {
 	PurpleBlistNode *node = purple_blist_get_root();
 	const char *dirname = purple_buddy_icons_get_cache_dir();
--- a/libpurple/buddyicon.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/buddyicon.h	Mon Apr 30 12:02:15 2007 +0000
@@ -261,6 +261,19 @@
                                     guchar *icon_data, size_t icon_len);
 
 /**
+ * Returns the timestamp of when the icon was set.
+ *
+ * This is intended for use in protocols that require a timestamp for
+ * buddy icon update reasons.
+ *
+ * @param account The account
+ *
+ * @return The time the icon was set, or 0 if an error occurred.
+ */
+time_t
+purple_buddy_icons_get_account_icon_timestamp(PurpleAccount *account);
+
+/**
  * Returns the custom buddy icon image for a contact.
  *
  * The caller owns a reference to the image in the store, and must dereference
--- a/libpurple/cipher.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/cipher.c	Mon Apr 30 12:02:15 2007 +0000
@@ -339,7 +339,13 @@
 	NULL,			/* set salt */
 	NULL,			/* get salt size */
 	NULL,			/* set key */
-	NULL			/* get key size */
+	NULL,			/* get key size */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 /*******************************************************************************
@@ -588,7 +594,13 @@
 	NULL,                   /* set salt */
 	NULL,                   /* get salt size */
 	NULL,                   /* set key */
-	NULL                    /* get key size */
+	NULL,                   /* get key size */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 /******************************************************************************
@@ -1006,7 +1018,13 @@
 	NULL,                   /* set salt */
 	NULL,                   /* get salt size */
 	des_set_key,		/* set key */
-	NULL                    /* get key size */
+	NULL,                   /* get key size */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 
@@ -1247,7 +1265,13 @@
 	NULL,			/* set salt			*/
 	NULL,			/* get salt size	*/
 	NULL,			/* set key			*/
-	NULL			/* get key size		*/
+	NULL,			/* get key size		*/
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 /*******************************************************************************
--- a/libpurple/cipher.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/cipher.h	Mon Apr 30 12:02:15 2007 +0000
@@ -102,6 +102,11 @@
 
 	/** The get key size function */
 	size_t (*get_key_size)(PurpleCipherContext *context);
+
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 };
 
 #ifdef __cplusplus
--- a/libpurple/connection.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/connection.h	Mon Apr 30 12:02:15 2007 +0000
@@ -71,6 +71,10 @@
 	void (*network_connected)();
 	void (*network_disconnected)();
 
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 } PurpleConnectionUiOps;
 
 struct _PurpleConnection
--- a/libpurple/conversation.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/conversation.h	Mon Apr 30 12:02:15 2007 +0000
@@ -177,6 +177,11 @@
 	void (*custom_smiley_close)(PurpleConversation *conv, const char *smile);
 
 	void (*send_confirm)(PurpleConversation *conv, const char *message);
+
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 };
 
 /**
--- a/libpurple/core.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/core.c	Mon Apr 30 12:02:15 2007 +0000
@@ -285,7 +285,7 @@
 #endif
 	if (g_rename(path, new_name))
 	{
-		purple_debug_error("core", "Error renaming %s to %s: %s\n",
+		purple_debug_error("core", "Error renaming %s to %s: %s. Please report this at http://developer.pidgin.im\n",
 		                   path, new_name, strerror(errno));
 		g_free(new_name);
 		return FALSE;
@@ -298,7 +298,7 @@
 	old_name = g_build_filename(old_base, basename, NULL);
 	if (symlink(new_name, old_name))
 	{
-		purple_debug_warning("core", "Error symlinking %s to %s: %s\n",
+		purple_debug_warning("core", "Error symlinking %s to %s: %s. Please report this at http://developer.pidgin.im\n",
 		                     old_name, new_name, strerror(errno));
 	}
 	g_free(old_name);
@@ -354,7 +354,7 @@
 	{
 		if (g_mkdir(user_dir, S_IRUSR | S_IWUSR | S_IXUSR) == -1)
 		{
-			purple_debug_error("core", "Error creating directory %s: %s\n",
+			purple_debug_error("core", "Error creating directory %s: %s. Please report this at http://developer.pidgin.im\n",
 			                   user_dir, strerror(errno));
 			g_free(status_file);
 			g_free(old_user_dir);
@@ -366,7 +366,7 @@
 	 * incomplete migrations and properly retry. */
 	if (!(fp = g_fopen(status_file, "w")))
 	{
-		purple_debug_error("core", "Error opening file %s for writing: %s\n",
+		purple_debug_error("core", "Error opening file %s for writing: %s. Please report this at http://developer.pidgin.im\n",
 		                   status_file, strerror(errno));
 		g_free(status_file);
 		g_free(old_user_dir);
@@ -378,7 +378,7 @@
 	err = NULL;
 	if (!(dir = g_dir_open(old_user_dir, 0, &err)))
 	{
-		purple_debug_error("core", "Error opening directory %s: %s\n",
+		purple_debug_error("core", "Error opening directory %s: %s. Please report this at http://developer.pidgin.im\n",
 		                   status_file,
 		                   (err ? err->message : "Unknown error"));
 		if (err)
@@ -405,7 +405,7 @@
 
 				if ((linklen = readlink(name, buf, sizeof(buf) - 1) == -1))
 				{
-					purple_debug_error("core", "Error reading symlink %s: %s\n",
+					purple_debug_error("core", "Error reading symlink %s: %s. Please report this at http://developer.pidgin.im\n",
 					                   name, strerror(errno));
 					g_free(name);
 					g_dir_close(dir);
@@ -437,7 +437,7 @@
 				 * guaranteed.  Oh well. */
 				if (symlink(buf, logs_dir))
 				{
-					purple_debug_error("core", "Error symlinking %s to %s: %s\n",
+					purple_debug_error("core", "Error symlinking %s to %s: %s. Please report this at http://developer.pidgin.im\n",
 					                   logs_dir, buf, strerror(errno));
 					g_free(name);
 					g_free(logs_dir);
@@ -474,7 +474,7 @@
 				err = NULL;
 				if (!(icons_dir = g_dir_open(name, 0, &err)))
 				{
-					purple_debug_error("core", "Error opening directory %s: %s\n",
+					purple_debug_error("core", "Error opening directory %s: %s. Please report this at http://developer.pidgin.im\n",
 					                   name,
 					                   (err ? err->message : "Unknown error"));
 					if (err)
@@ -492,7 +492,7 @@
 				{
 					if (g_mkdir(new_icons_dir, S_IRUSR | S_IWUSR | S_IXUSR) == -1)
 					{
-						purple_debug_error("core", "Error creating directory %s: %s\n",
+						purple_debug_error("core", "Error creating directory %s: %s. Please report this at http://developer.pidgin.im\n",
 						                   new_icons_dir, strerror(errno));
 						g_free(new_icons_dir);
 						g_dir_close(icons_dir);
@@ -555,7 +555,7 @@
 
 			if (!(fp = g_fopen(name, "rb")))
 			{
-				purple_debug_error("core", "Error opening file %s for reading: %s\n",
+				purple_debug_error("core", "Error opening file %s for reading: %s. Please report this at http://developer.pidgin.im\n",
 				                   name, strerror(errno));
 				g_free(name);
 				g_dir_close(dir);
@@ -567,7 +567,7 @@
 			new_name = g_build_filename(user_dir, entry, NULL);
 			if (!(new_file = g_fopen(new_name, "wb")))
 			{
-				purple_debug_error("core", "Error opening file %s for writing: %s\n",
+				purple_debug_error("core", "Error opening file %s for writing: %s. Please report this at http://developer.pidgin.im\n",
 				                   new_name, strerror(errno));
 				fclose(fp);
 				g_free(new_name);
@@ -586,7 +586,7 @@
 				size = fread(buf, 1, sizeof(buf), fp);
 				if (size != sizeof(buf) && !feof(fp))
 				{
-					purple_debug_error("core", "Error reading %s: %s\n",
+					purple_debug_error("core", "Error reading %s: %s. Please report this at http://developer.pidgin.im\n",
 					                   name, strerror(errno));
 					fclose(new_file);
 					fclose(fp);
@@ -600,7 +600,7 @@
 
 				if (!fwrite(buf, size, 1, new_file) && ferror(new_file) != 0)
 				{
-					purple_debug_error("core", "Error writing %s: %s\n",
+					purple_debug_error("core", "Error writing %s: %s. Please report this at http://developer.pidgin.im\n",
 					                   new_name, strerror(errno));
 					fclose(new_file);
 					fclose(fp);
@@ -615,7 +615,7 @@
 
 			if (fclose(new_file))
 			{
-				purple_debug_error("core", "Error writing: %s: %s\n",
+				purple_debug_error("core", "Error writing: %s: %s. Please report this at http://developer.pidgin.im\n",
 				                   new_name, strerror(errno));
 			}
 			if (fclose(fp))
@@ -634,14 +634,14 @@
 	/* The migration was successful, so delete the status file. */
 	if (g_unlink(status_file))
 	{
-		purple_debug_error("core", "Error unlinking file %s: %s\n",
+		purple_debug_error("core", "Error unlinking file %s: %s. Please report this at http://developer.pidgin.im\n",
 		                   status_file, strerror(errno));
 		g_free(status_file);
 		return FALSE;
 	}
 
 	old_icons_dir = g_build_filename(old_user_dir, "icons", NULL);
-	purple_buddy_icon_set_old_icons_dir(old_icons_dir);
+	_purple_buddy_icon_set_old_icons_dir(old_icons_dir);
 	g_free(old_icons_dir);
 
 	g_free(old_user_dir);
--- a/libpurple/core.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/core.h	Mon Apr 30 12:02:15 2007 +0000
@@ -33,6 +33,10 @@
 	void (*ui_init)(void);
 	void (*quit)(void);
 
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 } PurpleCoreUiOps;
 
 #ifdef __cplusplus
--- a/libpurple/debug.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/debug.h	Mon Apr 30 12:02:15 2007 +0000
@@ -51,6 +51,11 @@
 				  const char *arg_s);
 	gboolean (*is_enabled)(PurpleDebugLevel level,
 			const char *category);
+
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 } PurpleDebugUiOps;
 
 #ifdef __cplusplus
--- a/libpurple/dnsquery.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/dnsquery.c	Mon Apr 30 12:02:15 2007 +0000
@@ -140,7 +140,7 @@
  * Begin the DNS resolver child process functions.
  */
 #ifdef HAVE_SIGNAL_H
-static void
+G_GNUC_NORETURN static void
 trap_gdb_bug()
 {
 	const char *message =
@@ -158,7 +158,7 @@
 }
 #endif
 
-static void
+G_GNUC_NORETURN static void
 purple_dnsquery_resolver_run(int child_out, int child_in, gboolean show_debug)
 {
 	dns_params_t dns_params;
--- a/libpurple/dnsquery.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/dnsquery.h	Mon Apr 30 12:02:15 2007 +0000
@@ -57,6 +57,11 @@
 	 * resolve_host is not implemented.
 	 */
 	void (*destroy)(PurpleDnsQueryData *query_data);
+
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 } PurpleDnsQueryUiOps;
 
 #ifdef __cplusplus
--- a/libpurple/dnssrv.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/dnssrv.c	Mon Apr 30 12:02:15 2007 +0000
@@ -92,7 +92,7 @@
 
 #ifndef _WIN32
 
-static void
+G_GNUC_NORETURN static void
 resolve(int in, int out)
 {
 	GList *ret = NULL;
--- a/libpurple/eventloop.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/eventloop.h	Mon Apr 30 12:02:15 2007 +0000
@@ -81,6 +81,10 @@
 	 */
 	int (*input_get_error)(int fd, int *error);
 
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 };
 
 /**************************************************************************/
--- a/libpurple/example/nullclient.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/example/nullclient.c	Mon Apr 30 12:02:15 2007 +0000
@@ -107,6 +107,12 @@
 	g_source_remove,
 	glib_input_add,
 	g_source_remove,
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 /*** End of the eventloop functions. ***/
@@ -149,6 +155,12 @@
 	NULL,
 	NULL,
 	null_ui_init,
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/libpurple/ft.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/ft.h	Mon Apr 30 12:02:15 2007 +0000
@@ -77,6 +77,10 @@
 	void (*cancel_local)(PurpleXfer *xfer);
 	void (*cancel_remote)(PurpleXfer *xfer);
 
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 } PurpleXferUiOps;
 
 /**
--- a/libpurple/gaim-compat.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/gaim-compat.h	Mon Apr 30 12:02:15 2007 +0000
@@ -345,7 +345,7 @@
 #define gaim_buddy_icon_update   purple_buddy_icon_update
 
 #define gaim_buddy_icon_set_data(icon, data, len) \
-        purple_buddy_icon_set_protocol_data(icon, g_memdup(data, len), len, NULL);
+        purple_buddy_icon_set_data(icon, g_memdup(data, len), len, NULL);
 
 #define gaim_buddy_icon_get_account   purple_buddy_icon_get_account
 #define gaim_buddy_icon_get_username  purple_buddy_icon_get_username
@@ -353,7 +353,7 @@
 #define gaim_buddy_icon_get_type      purple_buddy_icon_get_extension
 
 #define gaim_buddy_icons_set_for_user(icon, data, len) \
-        purple_buddy_icons_set_for_user(icon, g_memdup(data, len), len)
+        purple_buddy_icons_set_for_user(icon, g_memdup(data, len), len, NULL)
 #define gaim_buddy_icons_find           purple_buddy_icons_find
 #define gaim_buddy_icons_set_caching    purple_buddy_icons_set_caching
 #define gaim_buddy_icons_is_caching     purple_buddy_icons_is_caching
@@ -961,7 +961,8 @@
 
 #define GaimStoredImage  PurpleStoredImage
 
-#define gaim_imgstore_add(data, size, filename) purple_imgstore_add_with_id(g_memdup(data, size), size, filename)
+#define gaim_imgstore_add(data, size, filename) \
+        purple_imgstore_add_with_id(g_memdup(data, size), size, filename)
 #define gaim_imgstore_get           purple_imgstore_find_by_id
 #define gaim_imgstore_get_data      purple_imgstore_get_data
 #define gaim_imgstore_get_size      purple_imgstore_get_size
--- a/libpurple/idle.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/idle.h	Mon Apr 30 12:02:15 2007 +0000
@@ -31,6 +31,11 @@
 typedef struct
 {
 	time_t (*get_time_idle)(void);
+
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 } PurpleIdleUiOps;
 
 #ifdef __cplusplus
--- a/libpurple/imgstore.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/imgstore.c	Mon Apr 30 12:02:15 2007 +0000
@@ -98,7 +98,7 @@
 	return img->size;
 }
 
-const char *purple_imgstore_get_filename(PurpleStoredImage *img)
+const char *purple_imgstore_get_filename(const PurpleStoredImage *img)
 {
 	g_return_val_if_fail(img != NULL, NULL);
 
--- a/libpurple/imgstore.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/imgstore.h	Mon Apr 30 12:02:15 2007 +0000
@@ -110,7 +110,7 @@
  * @return A pointer to the filename, which must not
  *         be freed or modified.
  */
-const char *purple_imgstore_get_filename(PurpleStoredImage *img);
+const char *purple_imgstore_get_filename(const PurpleStoredImage *img);
 
 /**
  * Returns an extension corresponding to the image's file type.
--- a/libpurple/internal.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/internal.h	Mon Apr 30 12:02:15 2007 +0000
@@ -187,17 +187,17 @@
 /* This is for the accounts code to notify the buddy icon code that
  * it's done loading.  We may want to replace this with a signal. */
 void
-purple_buddy_icons_account_loaded_cb(void);
+_purple_buddy_icons_account_loaded_cb(void);
 
 /* This is for the buddy list to notify the buddy icon code that
  * it's done loading.  We may want to replace this with a signal. */
 void
-purple_buddy_icons_blist_loaded_cb(void);
+_purple_buddy_icons_blist_loaded_cb(void);
 
 /* This is for the purple_core_migrate() code to tell the buddy
  * icon subsystem about the old icons directory so it can
  * migrate any icons in use. */
 void
-purple_buddy_icon_set_old_icons_dir(const char *dirname);
+_purple_buddy_icon_set_old_icons_dir(const char *dirname);
 
 #endif /* _PURPLE_INTERNAL_H_ */
--- a/libpurple/log.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/log.h	Mon Apr 30 12:02:15 2007 +0000
@@ -109,6 +109,11 @@
 
 	/* Tests whether a log is deletable */
 	gboolean (*is_deletable)(PurpleLog *log);
+
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 };
 
 /**
--- a/libpurple/notify.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/notify.h	Mon Apr 30 12:02:15 2007 +0000
@@ -171,6 +171,10 @@
 
 	void (*close_notify)(PurpleNotifyType type, void *ui_handle);
 
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 } PurpleNotifyUiOps;
 
 
--- a/libpurple/plugin.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/plugin.h	Mon Apr 30 12:02:15 2007 +0000
@@ -102,6 +102,11 @@
 	void *extra_info;
 	PurplePluginUiInfo *prefs_info; /**< Used by any plugin to display preferences.  If #ui_info has been specified, this will be ignored. */
 	GList *(*actions)(PurplePlugin *plugin, gpointer context);
+
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 };
 
 /**
@@ -115,6 +120,11 @@
 	gboolean (*load)(PurplePlugin *plugin);
 	gboolean (*unload)(PurplePlugin *plugin);
 	void     (*destroy)(PurplePlugin *plugin);
+
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 };
 
 /**
@@ -132,6 +142,11 @@
 	void *extra;                           /**< Plugin-specific data.     */
 	gboolean unloadable;                   /**< Unloadable                */
 	GList *dependent_plugins;              /**< Plugins depending on this */
+
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 };
 
 #define PURPLE_PLUGIN_LOADER_INFO(plugin) \
@@ -142,6 +157,11 @@
 
 	int page_num;                                         /**< Reserved */
 	PurplePluginPrefFrame *frame;                           /**< Reserved */
+
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 };
 
 #define PURPLE_PLUGIN_HAS_PREF_FRAME(plugin) \
--- a/libpurple/plugins/autoaccept.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/plugins/autoaccept.c	Mon Apr 30 12:02:15 2007 +0000
@@ -231,6 +231,12 @@
 	get_plugin_pref_frame,
 	0,
 	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info = {
@@ -258,7 +264,13 @@
 	NULL,					/* ui_info				*/
 	NULL,					/* extra_info			*/
 	&prefs_info,				/* prefs_info			*/
-	NULL					/* actions				*/
+	NULL,					/* actions				*/
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static void
--- a/libpurple/plugins/buddynote.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/plugins/buddynote.c	Mon Apr 30 12:02:15 2007 +0000
@@ -97,7 +97,13 @@
 	NULL,											/**< ui_info		*/
 	NULL,											/**< extra_info		*/
 	NULL,											/**< prefs_info		*/
-	NULL											/**< actions		*/
+	NULL,											/**< actions		*/
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 
--- a/libpurple/plugins/dbus-example.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/plugins/dbus-example.c	Mon Apr 30 12:02:15 2007 +0000
@@ -168,6 +168,12 @@
 	NULL,                                             /**< ui_info        */
 	NULL,                                             /**< extra_info     */
 	NULL,                                       /**< prefs_info     */
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/libpurple/plugins/idle.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/plugins/idle.c	Mon Apr 30 12:02:15 2007 +0000
@@ -327,7 +327,13 @@
 	NULL,
 	NULL,
 	NULL,
-	actions
+	actions,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static void
--- a/libpurple/plugins/joinpart.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/plugins/joinpart.c	Mon Apr 30 12:02:15 2007 +0000
@@ -246,7 +246,13 @@
 static PurplePluginUiInfo prefs_info = {
 	get_plugin_pref_frame,
 	0,   /* page_num (reserved) */
-	NULL /* frame (reserved) */
+	NULL, /* frame (reserved) */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info =
@@ -279,7 +285,13 @@
 	NULL,                                             /**< ui_info        */
 	NULL,                                             /**< extra_info     */
 	&prefs_info,                                      /**< prefs_info     */
-	NULL                                              /**< actions        */
+	NULL,                                             /**< actions        */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static void
--- a/libpurple/plugins/log_reader.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/plugins/log_reader.c	Mon Apr 30 12:02:15 2007 +0000
@@ -2109,7 +2109,13 @@
 static PurplePluginUiInfo prefs_info = {
 	get_plugin_pref_frame,
 	0,   /* page_num (reserved) */
-	NULL /* frame (reserved) */
+	NULL, /* frame (reserved) */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info =
@@ -2145,7 +2151,13 @@
 	NULL,                                             /**< ui_info        */
 	NULL,                                             /**< extra_info     */
 	&prefs_info,                                      /**< prefs_info     */
-	NULL                                              /**< actions        */
+	NULL,                                             /**< actions        */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 PURPLE_INIT_PLUGIN(log_reader, init_plugin, info)
--- a/libpurple/plugins/mono/loader/mono.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/plugins/mono/loader/mono.c	Mon Apr 30 12:02:15 2007 +0000
@@ -194,7 +194,13 @@
 	probe_mono_plugin,
 	load_mono_plugin,
 	unload_mono_plugin,
-	destroy_mono_plugin
+	destroy_mono_plugin,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info =
@@ -220,6 +226,12 @@
 	NULL,
 	&loader_info,
 	NULL,
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/libpurple/plugins/newline.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/plugins/newline.c	Mon Apr 30 12:02:15 2007 +0000
@@ -81,7 +81,13 @@
 	NULL,											/**< ui_info		*/
 	NULL,											/**< extra_info		*/
 	NULL,											/**< prefs_info		*/
-	NULL											/**< actions		*/
+	NULL,											/**< actions		*/
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static void
--- a/libpurple/plugins/offlinemsg.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/plugins/offlinemsg.c	Mon Apr 30 12:02:15 2007 +0000
@@ -199,6 +199,12 @@
 static PurplePluginUiInfo prefs_info = {
 	get_plugin_pref_frame,
 	0,
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
@@ -228,7 +234,13 @@
 	NULL,					/* ui_info				*/
 	NULL,					/* extra_info			*/
 	&prefs_info,				/* prefs_info			*/
-	NULL					/* actions				*/
+	NULL,					/* actions				*/
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static void
--- a/libpurple/plugins/perl/perl.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/plugins/perl/perl.c	Mon Apr 30 12:02:15 2007 +0000
@@ -572,7 +572,13 @@
 	probe_perl_plugin,                                /**< probe          */
 	load_perl_plugin,                                 /**< load           */
 	unload_perl_plugin,                               /**< unload         */
-	destroy_perl_plugin                               /**< destroy        */
+	destroy_perl_plugin,                              /**< destroy        */
+	
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info =
@@ -601,6 +607,12 @@
 	NULL,                                             /**< ui_info        */
 	&loader_info,                                     /**< extra_info     */
 	NULL,
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/libpurple/plugins/psychic.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/plugins/psychic.c	Mon Apr 30 12:02:15 2007 +0000
@@ -9,6 +9,7 @@
 #include "signals.h"
 #include "status.h"
 #include "version.h"
+#include "privacy.h"
 
 #include "plugin.h"
 #include "pluginpref.h"
@@ -47,6 +48,11 @@
     return;
   }
 
+  if(FALSE == purple_privacy_check(acct, name)) {
+    purple_debug_info("psychic", "user %s is blocked", name);
+    return;
+  }
+
   gconv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, name, acct);
   if(! gconv) {
     purple_debug_info("psychic", "no previous conversation exists\n");
@@ -120,6 +126,12 @@
   get_plugin_pref_frame,
   0,    /* page_num (Reserved) */
   NULL, /* frame (Reserved) */
+  
+  /* padding */
+  NULL,
+  NULL,
+  NULL,
+  NULL
 };
 
 
@@ -149,6 +161,12 @@
   NULL,                   /**< extra_info */
   &prefs_info,            /**< prefs_info */
   NULL,                   /**< actions */
+
+  /* padding */
+  NULL,
+  NULL,
+  NULL,
+  NULL
 };
 
 
--- a/libpurple/plugins/ssl/ssl-gnutls.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/plugins/ssl/ssl-gnutls.c	Mon Apr 30 12:02:15 2007 +0000
@@ -208,7 +208,13 @@
 	ssl_gnutls_connect,
 	ssl_gnutls_close,
 	ssl_gnutls_read,
-	ssl_gnutls_write
+	ssl_gnutls_write,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 #endif /* HAVE_GNUTLS */
@@ -270,7 +276,13 @@
 	NULL,                                             /**< ui_info        */
 	NULL,                                             /**< extra_info     */
 	NULL,                                             /**< prefs_info     */
-	NULL                                              /**< actions        */
+	NULL,                                             /**< actions        */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static void
--- a/libpurple/plugins/ssl/ssl-nss.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/plugins/ssl/ssl-nss.c	Mon Apr 30 12:02:15 2007 +0000
@@ -359,7 +359,13 @@
 	ssl_nss_connect,
 	ssl_nss_close,
 	ssl_nss_read,
-	ssl_nss_write
+	ssl_nss_write,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 #endif /* HAVE_NSS */
@@ -422,7 +428,13 @@
 	NULL,                                             /**< ui_info        */
 	NULL,                                             /**< extra_info     */
 	NULL,                                             /**< prefs_info     */
-	NULL                                              /**< actions        */
+	NULL,                                             /**< actions        */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static void
--- a/libpurple/plugins/ssl/ssl.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/plugins/ssl/ssl.c	Mon Apr 30 12:02:15 2007 +0000
@@ -107,6 +107,12 @@
 	NULL,                                             /**< ui_info        */
 	NULL,                                             /**< extra_info     */
 	NULL,
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/libpurple/plugins/statenotify.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/plugins/statenotify.c	Mon Apr 30 12:02:15 2007 +0000
@@ -124,7 +124,13 @@
 {
 	get_plugin_pref_frame,
 	0,   /* page_num (Reserved) */
-	NULL /* frame (Reserved) */
+	NULL, /* frame (Reserved) */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info =
@@ -157,6 +163,12 @@
 	NULL,                                             /**< ui_info        */
 	NULL,                                             /**< extra_info     */
 	&prefs_info,                                      /**< prefs_info     */
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/libpurple/plugins/tcl/tcl.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/plugins/tcl/tcl.c	Mon Apr 30 12:02:15 2007 +0000
@@ -399,6 +399,12 @@
 	tcl_load_plugin,
 	tcl_unload_plugin,
 	tcl_destroy_plugin,
+
+	/* pidgin */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo tcl_info =
@@ -424,6 +430,12 @@
 	NULL,
 	&tcl_loader_info,
 	NULL,
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/libpurple/privacy.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/privacy.h	Mon Apr 30 12:02:15 2007 +0000
@@ -53,6 +53,10 @@
 	void (*deny_added)(PurpleAccount *account, const char *name);
 	void (*deny_removed)(PurpleAccount *account, const char *name);
 
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 } PurplePrivacyUiOps;
 
 /**
--- a/libpurple/protocols/bonjour/bonjour.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/protocols/bonjour/bonjour.c	Mon Apr 30 12:02:15 2007 +0000
@@ -405,6 +405,12 @@
 	NULL,                                                    /* whiteboard_prpl_ops */
 	NULL,                                                    /* send_raw */
 	NULL,                                                    /* roomlist_room_serialize */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info =
@@ -435,6 +441,12 @@
 	NULL,                                             /**< ui_info        */
 	&prpl_info,                                       /**< extra_info     */
 	NULL,                                             /**< prefs_info     */
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/libpurple/protocols/gg/gg.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/protocols/gg/gg.c	Mon Apr 30 12:02:15 2007 +0000
@@ -2123,6 +2123,12 @@
 	NULL,				/* whiteboard_prpl_ops */
 	NULL,				/* send_raw */
 	NULL,				/* roomlist_room_serialize */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 /* }}} */
 
@@ -2153,7 +2159,13 @@
 	NULL,				/* ui_info */
 	&prpl_info,			/* extra_info */
 	NULL,				/* prefs_info */
-	ggp_actions			/* actions */
+	ggp_actions,			/* actions */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 /* }}} */
 
--- a/libpurple/protocols/irc/irc.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/protocols/irc/irc.c	Mon Apr 30 12:02:15 2007 +0000
@@ -862,6 +862,12 @@
 	NULL,					/* whiteboard_prpl_ops */
 	irc_send_raw,			/* send_raw */
 	NULL,					/* roomlist_room_serialize */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static gboolean load_plugin (PurplePlugin *plugin) {
@@ -904,7 +910,13 @@
 	NULL,                                             /**< ui_info        */
 	&prpl_info,                                       /**< extra_info     */
 	NULL,                                             /**< prefs_info     */
-	irc_actions
+	irc_actions,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static void _init_plugin(PurplePlugin *plugin)
--- a/libpurple/protocols/jabber/auth.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/protocols/jabber/auth.c	Mon Apr 30 12:02:15 2007 +0000
@@ -819,7 +819,7 @@
 		} else {
 			response = xmlnode_new("response");
 			xmlnode_set_namespace(response, "urn:ietf:params:xml:ns:xmpp-sasl");
-			if (c_out) {
+			if (clen > 0) {
 				enc_out = purple_base64_encode((unsigned char*)c_out, clen);
 				xmlnode_insert_data(response, enc_out, -1);
 				g_free(enc_out);
--- a/libpurple/protocols/jabber/libxmpp.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/protocols/jabber/libxmpp.c	Mon Apr 30 12:02:15 2007 +0000
@@ -108,6 +108,12 @@
 	NULL,							/* whiteboard_prpl_ops */
 	jabber_prpl_send_raw,			/* send_raw */
 	jabber_roomlist_room_serialize, /* roomlist_room_serialize */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static gboolean load_plugin(PurplePlugin *plugin)
@@ -170,7 +176,13 @@
 	NULL,                                             /**< ui_info        */
 	&prpl_info,                                       /**< extra_info     */
 	NULL,                                             /**< prefs_info     */
-	jabber_actions
+	jabber_actions,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static void
--- a/libpurple/protocols/msn/msn.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/protocols/msn/msn.c	Mon Apr 30 12:02:15 2007 +0000
@@ -2069,6 +2069,12 @@
 	NULL,					/* whiteboard_prpl_ops */
 	NULL,					/* send_raw */
 	NULL,					/* roomlist_room_serialize */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info =
@@ -2099,7 +2105,13 @@
 	NULL,                                             /**< ui_info        */
 	&prpl_info,                                       /**< extra_info     */
 	NULL,                                             /**< prefs_info     */
-	msn_actions
+	msn_actions,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static void
--- a/libpurple/protocols/msn/slp.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/protocols/msn/slp.c	Mon Apr 30 12:02:15 2007 +0000
@@ -955,7 +955,7 @@
 
 	if (obj == NULL)
 	{
-/*		purple_buddy_icons_set_for_user(account, user->passport, NULL, 0, NULL); */
+		/* TODO purple_buddy_icons_set_for_user(account, user->passport, NULL, 0, NULL); */
 		return;
 	}
 
--- a/libpurple/protocols/novell/novell.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/protocols/novell/novell.c	Mon Apr 30 12:02:15 2007 +0000
@@ -3495,6 +3495,11 @@
 	NULL,						/* send_raw */
 	NULL,						/* roomlist_room_serialize */
 
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info = {
@@ -3523,6 +3528,12 @@
 	NULL,					/**< ui_info        */
 	&prpl_info,				/**< extra_info     */
 	NULL,
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/libpurple/protocols/oscar/libaim.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/protocols/oscar/libaim.c	Mon Apr 30 12:02:15 2007 +0000
@@ -92,6 +92,12 @@
 	NULL,					/* whiteboard_prpl_ops */
 	NULL,					/* send_raw */
 	NULL,					/* roomlist_room_serialize */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info =
@@ -122,7 +128,13 @@
 	NULL,                                             /**< ui_info        */
 	&prpl_info,                                       /**< extra_info     */
 	NULL,
-	oscar_actions
+	oscar_actions,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static void
--- a/libpurple/protocols/oscar/libicq.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/protocols/oscar/libicq.c	Mon Apr 30 12:02:15 2007 +0000
@@ -92,6 +92,12 @@
 	NULL,					/* whiteboard_prpl_ops */
 	NULL,					/* send_raw */
 	NULL,					/* roomlist_room_serialize */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info =
@@ -122,7 +128,13 @@
 	NULL,                                             /**< ui_info        */
 	&prpl_info,                                       /**< extra_info     */
 	NULL,
-	oscar_actions
+	oscar_actions,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static void
--- a/libpurple/protocols/oscar/oscar.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/protocols/oscar/oscar.c	Mon Apr 30 12:02:15 2007 +0000
@@ -1941,9 +1941,9 @@
 		purple_debug_info("oscar",
 				   "Sending buddy icon to %s (%d bytes)\n",
 				   userinfo->sn, len);
-		/* TODO: XXX: FIXME: Does this actually need the mtime of the file? */
 		aim_im_sendch2_icon(od, userinfo->sn, data, len,
-			time(NULL), aimutil_iconsum(data, len));
+			purple_buddy_icons_get_account_icon_timestamp(account),
+			aimutil_iconsum(data, len));
 	}
 	purple_imgstore_unref(img);
 
@@ -4232,8 +4232,7 @@
 			gconstpointer data = purple_imgstore_get_data(img);
 			args.iconlen   = purple_imgstore_get_size(img);
 			args.iconsum   = aimutil_iconsum(data, args.iconlen);
-			/* TODO: XXX: FIXME: Deal with the timestamp issue. */
-			args.iconstamp = time(NULL);
+			args.iconstamp = purple_buddy_icons_get_account_icon_timestamp(account);
 
 			if ((args.iconlen != bi->ico_me_len) || (args.iconsum != bi->ico_me_csum) || (args.iconstamp != bi->ico_me_time)) {
 				bi->ico_informed = FALSE;
--- a/libpurple/protocols/qq/qq.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/protocols/qq/qq.c	Mon Apr 30 12:02:15 2007 +0000
@@ -698,6 +698,12 @@
 	NULL,							/* PurpleWhiteboardPrplOps */
 	NULL,							/* send_raw */
 	NULL,							/* roomlist_room_serialize */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info = {
@@ -727,7 +733,13 @@
 	NULL,				/**< ui_info		*/
 	&prpl_info,			/**< extra_info		*/
 	NULL,				/**< prefs_info		*/
-	_qq_actions
+	_qq_actions,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 
--- a/libpurple/protocols/silc/buddy.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/protocols/silc/buddy.c	Mon Apr 30 12:02:15 2007 +0000
@@ -1706,7 +1706,7 @@
 	if (!mime)
 		return;
 
-	t = purple_util_get_image_extension(purple_imgstore_get_data(img), purple_imgstore_get_size(img));
+	t = purple_imgstore_get_extension(img);
 	if (!t || !strcmp(t, "icon")) {
 		silc_mime_free(mime);
 		return;
--- a/libpurple/protocols/silc/silc.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/protocols/silc/silc.c	Mon Apr 30 12:02:15 2007 +0000
@@ -1716,6 +1716,12 @@
 	silcpurple_wb_set_brush,
 	silcpurple_wb_send,
 	silcpurple_wb_clear,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginProtocolInfo prpl_info =
@@ -1796,6 +1802,12 @@
 	&silcpurple_wb_ops,			/* whiteboard_prpl_ops */
 	NULL,                       /* send_raw */
 	NULL,                       /* roomlist_room_serialize */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info =
@@ -1826,7 +1838,13 @@
 	NULL,                                             /**< ui_info        */
 	&prpl_info,                                       /**< extra_info     */
 	NULL,                                             /**< prefs_info     */
-	silcpurple_actions
+	silcpurple_actions,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static void
--- a/libpurple/protocols/simple/simple.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/protocols/simple/simple.c	Mon Apr 30 12:02:15 2007 +0000
@@ -1800,6 +1800,12 @@
 	NULL,					/* whiteboard_prpl_ops */
 	simple_send_raw,		/* send_raw */
 	NULL,					/* roomlist_room_serialize */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 
@@ -1829,6 +1835,12 @@
 	NULL,                                             /**< ui_info        */
 	&prpl_info,                                       /**< extra_info     */
 	NULL,
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/libpurple/protocols/yahoo/yahoo.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/protocols/yahoo/yahoo.c	Mon Apr 30 12:02:15 2007 +0000
@@ -76,7 +76,8 @@
 	purple_privacy_permit_remove(gc->account,who,TRUE);
 }
 
-gboolean yahoo_privacy_check(PurpleConnection *gc, const char *who)
+gboolean
+yahoo_privacy_check(PurpleConnection *gc, const char *who)
 {
 	/* returns TRUE if allowed through, FALSE otherwise */
 	gboolean permitted;
@@ -3947,7 +3948,13 @@
 	yahoo_doodle_get_brush,
 	yahoo_doodle_set_brush,
 	yahoo_doodle_send_draw_list,
-	yahoo_doodle_clear
+	yahoo_doodle_clear,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginProtocolInfo prpl_info =
@@ -4014,6 +4021,12 @@
 	&yahoo_whiteboard_prpl_ops,
 	NULL, /* send_raw */
 	NULL, /* roomlist_room_serialize */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info =
@@ -4041,7 +4054,13 @@
 	NULL,                                             /**< ui_info        */
 	&prpl_info,                                       /**< extra_info     */
 	NULL,
-	yahoo_actions
+	yahoo_actions,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static void
--- a/libpurple/protocols/yahoo/yahoo_picture.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/protocols/yahoo/yahoo_picture.c	Mon Apr 30 12:02:15 2007 +0000
@@ -546,7 +546,9 @@
 
 		/* TODO: At some point, it'd be nice to fix this for real, or
 		 * TODO: at least change it to be something like:
-		 * TODO: purple_imgstore_get_filename(img); */
+		 * TODO: purple_imgstore_get_filename(img);
+		 * TODO: But it would be great if we knew how to calculate the
+		 * TODO: Checksum correctly. */
 		yd->picture_checksum = g_string_hash(s);
 
 		if ((yd->picture_checksum == oldcksum) &&
@@ -559,10 +561,8 @@
 			return;
 		}
 
-		/* TODO: FIXME: This is completely wrong.  The upload code needs to
-		 * TODO: be modified to work with a PurpleStoredImage. */
-		iconfile = g_build_filename(purple_buddy_icons_get_cache_dir(),
-		                            purple_imgstore_get_filename(img), NULL);
+		/* We use this solely for sending a filename to the server */
+		iconfile = g_strdup(purple_imgstore_get_filename(img));
 		d = g_new0(struct yahoo_buddy_icon_upload_data, 1);
 		d->gc = gc;
 		d->str = s;
--- a/libpurple/protocols/zephyr/zephyr.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/protocols/zephyr/zephyr.c	Mon Apr 30 12:02:15 2007 +0000
@@ -2920,6 +2920,12 @@
 	NULL,					/* whiteboard_prpl_ops */
 	NULL,					/* send_raw */
 	NULL,					/* roomlist_room_serialize */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info = {
@@ -2950,6 +2956,12 @@
 	&prpl_info,					  /**< extra_info     */
 	NULL,
 	zephyr_actions,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static void init_plugin(PurplePlugin * plugin)
--- a/libpurple/prpl.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/prpl.h	Mon Apr 30 12:02:15 2007 +0000
@@ -315,6 +315,11 @@
 
 	/* room list serialize */
 	char *(*roomlist_room_serialize)(PurpleRoomlistRoom *room);
+
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 };
 
 #define PURPLE_IS_PROTOCOL_PLUGIN(plugin) \
--- a/libpurple/request.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/request.h	Mon Apr 30 12:02:15 2007 +0000
@@ -215,6 +215,11 @@
 							GCallback ok_cb, GCallback cancel_cb,
 							PurpleAccount *account, const char *who, PurpleConversation *conv,
 							void *user_data);
+
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 } PurpleRequestUiOps;
 
 typedef void (*PurpleRequestInputCb)(void *, const char *);
--- a/libpurple/roomlist.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/roomlist.h	Mon Apr 30 12:02:15 2007 +0000
@@ -105,6 +105,11 @@
 	void (*add_room)(PurpleRoomlist *list, PurpleRoomlistRoom *room); /**< Add a room to the list. */
 	void (*in_progress)(PurpleRoomlist *list, gboolean flag); /**< Are we fetching stuff still? */
 	void (*destroy)(PurpleRoomlist *list); /**< We're destroying list. */
+
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 };
 
 
--- a/libpurple/savedstatuses.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/savedstatuses.c	Mon Apr 30 12:02:15 2007 +0000
@@ -154,7 +154,7 @@
 }
 
 /**
- * A magic number is calcuated for each status, and then the
+ * A magic number is calculated for each status, and then the
  * statuses are ordered by the magic number.  The magic number
  * is the date the status was last used offset by one day for
  * each time the status has been used (but only by 10 days at
--- a/libpurple/sound.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/sound.h	Mon Apr 30 12:02:15 2007 +0000
@@ -60,6 +60,10 @@
 	void (*play_file)(const char *filename);
 	void (*play_event)(PurpleSoundEventID event);
 
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 } PurpleSoundUiOps;
 
 #ifdef __cplusplus
--- a/libpurple/sslconn.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/sslconn.h	Mon Apr 30 12:02:15 2007 +0000
@@ -73,6 +73,10 @@
 	size_t (*read)(PurpleSslConnection *gsc, void *data, size_t len);
 	size_t (*write)(PurpleSslConnection *gsc, const void *data, size_t len);
 
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 } PurpleSslOps;
 
 #ifdef __cplusplus
--- a/libpurple/whiteboard.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/whiteboard.h	Mon Apr 30 12:02:15 2007 +0000
@@ -64,6 +64,11 @@
 					  int x2, int y2,
 					  int color, int size);                            /**< draw_line function */
 	void (*clear)(PurpleWhiteboard *wb);                                 /**< clear function */
+
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 } PurpleWhiteboardUiOps;
 
 /**
@@ -79,6 +84,11 @@
 	void (*set_brush) (PurpleWhiteboard *wb, int size, int color);         /**< set the brush size and color */
 	void (*send_draw_list)(PurpleWhiteboard *wb, GList *draw_list);        /**< send_draw_list function */
 	void (*clear)(PurpleWhiteboard *wb);                                   /**< clear function */
+
+	void (*_purple_reserved1)(void);
+	void (*_purple_reserved2)(void);
+	void (*_purple_reserved3)(void);
+	void (*_purple_reserved4)(void);
 };
 
 #ifdef __cplusplus
--- a/libpurple/win32/targets.mak	Sun Apr 29 01:09:18 2007 +0000
+++ b/libpurple/win32/targets.mak	Mon Apr 30 12:02:15 2007 +0000
@@ -8,7 +8,7 @@
 $(PIDGIN_CONFIG_H): $(PIDGIN_TREE_TOP)/config.h.mingw
 	cp $(PIDGIN_TREE_TOP)/config.h.mingw $(PIDGIN_CONFIG_H)
 
-$(PURPLE_VERSION_H): $(PURPLE_VERSION_H).in
+$(PURPLE_VERSION_H): $(PURPLE_VERSION_H).in $(PIDGIN_TREE_TOP)/configure.ac
 	cp $(PURPLE_VERSION_H).in $(PURPLE_VERSION_H)
 	awk 'BEGIN {FS="[\\(\\)\\[\\]]"} \
 	  /^m4_define..purple_major_version/ {system("sed -i -e s/@PURPLE_MAJOR_VERSION@/"$$5"/ $(PURPLE_VERSION_H)");} \
--- a/pidgin.spec.in	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin.spec.in	Mon Apr 30 12:02:15 2007 +0000
@@ -6,10 +6,10 @@
 # When not doing betas comment this out
 # NOTE: %defines in spec files are evaluated in comments so the correct
 #       way to comment it out is to replace the % with #
-#define beta 7
+%define beta 7
 
 %if 0%{?beta}
-%define pidginver %(echo "@VERSION@"|sed -e 's/dev//; s/beta.*//')
+%define pidginver %(echo "@VERSION@"|sed -e 's/dev.*//; s/beta.*//')
 %else
 %define pidginver @VERSION@
 %endif
@@ -237,24 +237,24 @@
 find $RPM_BUILD_ROOT -type f -name '*.bs' -empty -exec rm -f {} ';'
 
 %if 0%{!?_with_howl:1} && 0%{!?_with_avahi:1}
-rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/libbonjour.so
+rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/libbonjour.so
 %endif
 
 %if 0%{!?_with_meanwhile:1}
-rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/libsametime.so
+rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/libsametime.so
 %endif
 
 %if 0%{!?_with_mono:1}
-rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/mono.so
-rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/*.dll
+rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/mono.so
+rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/*.dll
 %endif
 
 %if 0%{?_without_silc:1}
-rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/libsilcpurple.so
+rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/libsilcpurple.so
 %endif
 
 %if 0%{?_without_tcl:1}
-rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/tcl.so
+rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/tcl.so
 %endif
 
 %if 0%{?_without_text:1}
@@ -265,7 +265,7 @@
 
 %find_lang %{name}
 
-find $RPM_BUILD_ROOT%{_libdir}/libpurple -xtype f -print | \
+find $RPM_BUILD_ROOT%{_libdir}/purple-2 -xtype f -print | \
         sed "s@^$RPM_BUILD_ROOT@@g" | \
         grep -v /libbonjour.so | \
         grep -v /libsametime.so | \
@@ -333,13 +333,12 @@
 %doc %{_mandir}/man3*/*
 
 %dir %{_libdir}/pidgin
-%dir %{perl_vendorarch}/Purple
-%attr(755, root, root) %{perl_vendorarch}/Purple/*
-%attr(755, root, root) %{perl_vendorarch}/auto/Purple/GtkUI*
+%attr(755, root, root) %{perl_vendorarch}/Pidgin.pm
+%attr(755, root, root) %{perl_vendorarch}/auto/Pidgin
 
 %{_bindir}/pidgin
 %{_datadir}/pixmaps/pidgin
-%{_datadir}/icons/hicolor/*/apps/pidgin.png
+%{_datadir}/icons/hicolor/*/apps/pidgin.*
 %dir %{_datadir}/sounds/pidgin
 %{_datadir}/sounds/pidgin/*
 %{_datadir}/applications/*
@@ -352,9 +351,7 @@
 %{_libdir}/libpurple.so.*
 %dir %{_libdir}/purple-2
 %attr(755, root, root) %{perl_vendorarch}/Purple.pm
-%dir %{perl_vendorarch}/auto/Purple
-%attr(755, root, root) %{perl_vendorarch}/auto/Purple/Purple.so
-%attr(755, root, root) %{perl_vendorarch}/auto/Purple/autosplit.ix
+%attr(755, root, root) %{perl_vendorarch}/auto/Purple
 
 %{_datadir}/pixmaps/purple
 
@@ -365,7 +362,6 @@
 %{_bindir}/purple-send-async
 %{_bindir}/purple-url-handler
 %{_libdir}/libpurple-client.so.*
-%doc README.dbus
 %doc libpurple/purple-notifications-example
 %endif
 
@@ -381,7 +377,6 @@
 %doc ChangeLog.API
 %doc HACKING
 %doc PLUGIN_HOWTO
-%doc PROGRAMMING_NOTES
 
 %dir %{_includedir}/libpurple
 %{_includedir}/libpurple/*.h
@@ -397,22 +392,22 @@
 %files -n libpurple-bonjour
 %defattr(-, root, root)
 
-%{_libdir}/libpurple/libbonjour.*
+%{_libdir}/purple-2/libbonjour.*
 %endif
 
 %if 0%{?_with_meanwhile:1}
 %files -n libpurple-meanwhile
 %defattr(-, root, root)
 
-%{_libdir}/libpurple/libsametime.*
+%{_libdir}/purple-2/libsametime.*
 %endif
 
 %if 0%{?_with_mono:1}
 %files libpurple-mono
 %defattr(-, root, root)
 
-%{_libdir}/libpurple/mono.so
-%{_libdir}/libpurple/*.dll
+%{_libdir}/purple-2/mono.so
+%{_libdir}/purple-2/*.dll
 %endif
 
 %if 0%{!?_without_text:1}
@@ -436,6 +431,9 @@
 %endif
 
 %changelog
+* Sun Apr 29 2007 Stu Tomlinson <stu@nosnilmot.com>
+- Update to reflect perl Purple::GtkUI -> Pidgin change
+
 * Wed Apr 25 2007 Stu Tomlinson <stu@nosnilmot.com>
 - Update libpurple to pick up plugins in %%{_libdir}/purple
 
--- a/pidgin/gtkaccount.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/gtkaccount.c	Mon Apr 30 12:02:15 2007 +0000
@@ -2571,7 +2571,11 @@
 	NULL,
 	pidgin_accounts_request_add,
 	pidgin_accounts_request_authorization,
-	pidgin_accounts_request_close
+	pidgin_accounts_request_close,
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 PurpleAccountUiOps *
--- a/pidgin/gtkblist.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/gtkblist.c	Mon Apr 30 12:02:15 2007 +0000
@@ -5865,7 +5865,11 @@
 	pidgin_blist_set_visible,
 	pidgin_blist_request_add_buddy,
 	pidgin_blist_request_add_chat,
-	pidgin_blist_request_add_group
+	pidgin_blist_request_add_group,
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 
--- a/pidgin/gtkconn.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/gtkconn.c	Mon Apr 30 12:02:15 2007 +0000
@@ -248,7 +248,11 @@
 	pidgin_connection_notice,
 	pidgin_connection_report_disconnect,
 	pidgin_connection_network_connected,
-	pidgin_connection_network_disconnected
+	pidgin_connection_network_disconnected,
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 PurpleConnectionUiOps *
--- a/pidgin/gtkconv.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/gtkconv.c	Mon Apr 30 12:02:15 2007 +0000
@@ -6161,6 +6161,10 @@
 	pidgin_conv_custom_smiley_write,  /* custom_smiley_write  */
 	pidgin_conv_custom_smiley_close,  /* custom_smiley_close  */
 	pidgin_conv_send_confirm,         /* send_confirm         */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 PurpleConversationUiOps *
--- a/pidgin/gtkdebug.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/gtkdebug.c	Mon Apr 30 12:02:15 2007 +0000
@@ -1116,7 +1116,11 @@
 static PurpleDebugUiOps ops =
 {
 	pidgin_debug_print,
-	pidgin_debug_is_enabled
+	pidgin_debug_is_enabled,
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 PurpleDebugUiOps *
--- a/pidgin/gtkdialogs.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/gtkdialogs.c	Mon Apr 30 12:02:15 2007 +0000
@@ -92,6 +92,7 @@
 
 /* Order: Alphabetical by Last Name */
 static struct developer patch_writers[] = {
+	{"John 'rekkanoryo' Bailey",	NULL,	NULL},
 	{"Ka-Hing 'javabsp' Cheung",	NULL,	NULL},
 	{"Felipe 'shx' Contreras",		NULL,	NULL},
 	{"Decklin Foster",				NULL,	NULL},
--- a/pidgin/gtkdocklet.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/gtkdocklet.c	Mon Apr 30 12:02:15 2007 +0000
@@ -118,6 +118,9 @@
 	DockletStatus newstatus = DOCKLET_STATUS_OFFLINE;
 	gboolean pending = FALSE, connecting = FALSE;
 
+	/* get the current savedstatus */
+	saved_status = purple_savedstatus_get_current();
+
 	/* determine if any ims have unseen messages */
 	convs = get_pending_list(DOCKLET_TOOLTIP_LINE_LIMIT);
 
@@ -168,7 +171,10 @@
 		g_list_free(convs);
 
 	} else if (ui_ops->set_tooltip) {
-		ui_ops->set_tooltip(PIDGIN_NAME);
+		char *tooltip_text = g_strconcat(PIDGIN_NAME " - ",
+			purple_savedstatus_get_title(saved_status), NULL);
+		ui_ops->set_tooltip(tooltip_text);
+		g_free(tooltip_text);
 	}
 
 	for(l = purple_accounts_get_all(); l != NULL; l = l->next) {
@@ -187,7 +193,6 @@
 			connecting = TRUE;
 	}
 
-	saved_status = purple_savedstatus_get_current();
 	prim = purple_savedstatus_get_type(saved_status);
 	if (pending)
 		newstatus = DOCKLET_STATUS_PENDING;
--- a/pidgin/gtkeventloop.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/gtkeventloop.c	Mon Apr 30 12:02:15 2007 +0000
@@ -119,7 +119,11 @@
 	g_source_remove,
 	pidgin_input_add,
 	g_source_remove,
-	NULL /* input_get_error */
+	NULL, /* input_get_error */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 PurpleEventLoopUiOps *
--- a/pidgin/gtkft.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/gtkft.c	Mon Apr 30 12:02:15 2007 +0000
@@ -1222,7 +1222,11 @@
 	pidgin_xfer_add_xfer,
 	pidgin_xfer_update_progress,
 	pidgin_xfer_cancel_local,
-	pidgin_xfer_cancel_remote
+	pidgin_xfer_cancel_remote,
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 /**************************************************************************
--- a/pidgin/gtkidle.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/gtkidle.c	Mon Apr 30 12:02:15 2007 +0000
@@ -120,10 +120,14 @@
 static PurpleIdleUiOps ui_ops =
 {
 #if defined(USE_SCREENSAVER) || defined(HAVE_IOKIT)
-	pidgin_get_time_idle
+	pidgin_get_time_idle,
 #else
+	NULL,
+#endif /* USE_SCREENSAVER || HAVE_IOKIT */
+	NULL,
+	NULL,
+	NULL,
 	NULL
-#endif /* USE_SCREENSAVER || HAVE_IOKIT */
 };
 
 PurpleIdleUiOps *
--- a/pidgin/gtkmain.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/gtkmain.c	Mon Apr 30 12:02:15 2007 +0000
@@ -350,7 +350,11 @@
 	pidgin_prefs_init,
 	debug_init,
 	pidgin_ui_init,
-	pidgin_quit
+	pidgin_quit,
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurpleCoreUiOps *
@@ -684,7 +688,7 @@
 		const char *text = _(
 			"%s encountered errors migrating your settings "
 			"from %s to %s. Please investigate and complete the "
-			"migration by hand.");
+			"migration by hand. Please report this error at http://developer.pidgin.im");
 		GtkWidget *dialog;
 
 		dialog = gtk_message_dialog_new(NULL,
--- a/pidgin/gtknotify.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/gtknotify.c	Mon Apr 30 12:02:15 2007 +0000
@@ -1112,7 +1112,11 @@
 	pidgin_notify_searchresults_new_rows,
 	pidgin_notify_userinfo,
 	pidgin_notify_uri,
-	pidgin_close_notify
+	pidgin_close_notify,
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 PurpleNotifyUiOps *
--- a/pidgin/gtkplugin.h	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/gtkplugin.h	Mon Apr 30 12:02:15 2007 +0000
@@ -38,6 +38,12 @@
 	GtkWidget *(*get_config_frame)(PurplePlugin *plugin);
 
 	int page_num;                                         /**< Reserved */
+
+	/* padding */
+	void (*_pidgin_reserved1)(void);
+	void (*_pidgin_reserved2)(void);
+	void (*_pidgin_reserved3)(void);
+	void (*_pidgin_reserved4)(void);
 };
 
 #define PIDGIN_PLUGIN_TYPE PIDGIN_UI
--- a/pidgin/gtkprivacy.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/gtkprivacy.c	Mon Apr 30 12:02:15 2007 +0000
@@ -644,7 +644,11 @@
 	pidgin_permit_added_removed,
 	pidgin_permit_added_removed,
 	pidgin_deny_added_removed,
-	pidgin_deny_added_removed
+	pidgin_deny_added_removed,
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 PurplePrivacyUiOps *
--- a/pidgin/gtkrequest.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/gtkrequest.c	Mon Apr 30 12:02:15 2007 +0000
@@ -472,7 +472,9 @@
 
 	if (title != NULL)
 		gtk_window_set_title(GTK_WINDOW(dialog), title);
-
+#ifdef _WIN32
+		gtk_window_set_title(GTK_WINDOW(dialog), PIDGIN_ALERT_TITLE);
+#endif
 
 	gtk_dialog_add_button(GTK_DIALOG(dialog),
 			      text_to_stock(cancel_text), 0);
@@ -580,6 +582,9 @@
 
 	if (title != NULL)
 		gtk_window_set_title(GTK_WINDOW(dialog), title);
+#ifdef _WIN32
+		gtk_window_set_title(GTK_WINDOW(dialog), PIDGIN_ALERT_TITLE);
+#endif
 
 	for (i = 0; i < action_count; i++) {
 		gtk_dialog_add_button(GTK_DIALOG(dialog),
@@ -1068,6 +1073,9 @@
 
 	if (title != NULL)
 		gtk_window_set_title(GTK_WINDOW(win), title);
+#ifdef _WIN32
+		gtk_window_set_title(GTK_WINDOW(win), PIDGIN_ALERT_TITLE);
+#endif
 
 	gtk_window_set_role(GTK_WINDOW(win), "multifield");
 	gtk_container_set_border_width(GTK_CONTAINER(win), PIDGIN_HIG_BORDER);
@@ -1542,7 +1550,8 @@
 		else
 			gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(filesel), filename);
 	}
-	if ((current_folder != NULL) && (*current_folder != '\0')) {
+	if ((filename == NULL || *filename == '\0' || !g_file_test(filename, G_FILE_TEST_EXISTS)) &&
+				(current_folder != NULL) && (*current_folder != '\0')) {
 		folder_set = gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(filesel), current_folder);
 	}
 
@@ -1609,7 +1618,7 @@
 	data->cbs[0] = cancel_cb;
 	data->cbs[1] = ok_cb;
 	data->u.file.savedialog = FALSE;
-	
+
 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
 	dirsel = gtk_file_chooser_dialog_new(
 						title ? title : _("Select Folder..."),
@@ -1667,7 +1676,11 @@
 	pidgin_request_fields,
 	pidgin_request_file,
 	pidgin_close_request,
-	pidgin_request_folder
+	pidgin_request_folder,
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 PurpleRequestUiOps *
--- a/pidgin/gtkroomlist.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/gtkroomlist.c	Mon Apr 30 12:02:15 2007 +0000
@@ -789,7 +789,11 @@
 	pidgin_roomlist_set_fields,
 	pidgin_roomlist_add_room,
 	pidgin_roomlist_in_progress,
-	pidgin_roomlist_destroy
+	pidgin_roomlist_destroy,
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 
--- a/pidgin/gtksavedstatuses.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/gtksavedstatuses.c	Mon Apr 30 12:02:15 2007 +0000
@@ -1677,7 +1677,7 @@
 	GList *sorted, *cur;
 	int i = 0;
 	int index = -1;
-	GdkPixbuf *pixbuf, *emblem;
+	GdkPixbuf *pixbuf;
 	GtkTreeIter iter;
 	GtkCellRenderer *text_rend;
 	GtkCellRenderer *icon_rend;
--- a/pidgin/gtksound.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/gtksound.c	Mon Apr 30 12:02:15 2007 +0000
@@ -549,7 +549,11 @@
 	pidgin_sound_init,
 	pidgin_sound_uninit,
 	pidgin_sound_play_file,
-	pidgin_sound_play_event
+	pidgin_sound_play_event,
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 PurpleSoundUiOps *
--- a/pidgin/gtkstatusbox.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/gtkstatusbox.c	Mon Apr 30 12:02:15 2007 +0000
@@ -1447,11 +1447,20 @@
 					size_t len = 0;
 					if (filename)
 						data = pidgin_convert_buddy_icon(plug, filename, &len);
-					img = purple_buddy_icons_set_account_icon(box->account, data, len);
-					purple_account_set_buddy_icon_path(box->account, filename);
+					img = purple_buddy_icons_set_account_icon(account, data, len);
+					purple_account_set_buddy_icon_path(account, filename);
+				}
+			}
+		}
 
-					purple_account_set_bool(box->account, "use-global-buddyicon", (filename != NULL));
-				}
+		/* Even if no accounts were processed, load the icon that was set. */
+		if (filename != NULL)
+		{
+			gchar *contents;
+			gsize size;
+			if (g_file_get_contents(filename, &contents, &size, NULL))
+			{
+				img = purple_imgstore_add(contents, size, filename);
 			}
 		}
 	}
@@ -2071,7 +2080,9 @@
 pidgin_status_box_set_buddy_icon(PidginStatusBox *status_box, PurpleStoredImage *img)
 {
 	purple_imgstore_unref(status_box->buddy_icon_img);
-	status_box->buddy_icon_img = purple_imgstore_ref(img);
+	status_box->buddy_icon_img = img;
+	if (status_box->buddy_icon_img != NULL)
+		purple_imgstore_ref(status_box->buddy_icon_img);
 
 	pidgin_status_box_redisplay_buddy_icon(status_box);
 }
@@ -2225,7 +2236,8 @@
 							PurpleSavedStatusSub *sub = purple_savedstatus_get_substatus(ss, acct);
 							if (sub) {
 								const PurpleStatusType *sub_type = purple_savedstatus_substatus_get_type(sub);
-								if (!strcmp(purple_status_type_get_id(sub_type),
+								const char *subtype_status_id = purple_status_type_get_id(sub_type);
+								if (subtype_status_id && !strcmp(subtype_status_id,
 										purple_status_type_get_id(acct_status_type)))
 									found = TRUE;
 							}
--- a/pidgin/gtkutils.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/gtkutils.c	Mon Apr 30 12:02:15 2007 +0000
@@ -3070,7 +3070,6 @@
         for (i = 1; i < height - 1; i++) {
                 row = pixels + (i*rowstride);
                 if (row[3] != 0xff || row[rowstride-1] != 0xff) {
-                        printf("0: %d, last: %d\n", row[3], row[rowstride-1]);
                         return FALSE;
                 }
         }
--- a/pidgin/gtkwhiteboard.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/gtkwhiteboard.c	Mon Apr 30 12:02:15 2007 +0000
@@ -85,7 +85,11 @@
 	pidgin_whiteboard_set_brush,
 	pidgin_whiteboard_draw_brush_point,
 	pidgin_whiteboard_draw_brush_line,
-	pidgin_whiteboard_clear
+	pidgin_whiteboard_clear,
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 /******************************************************************************
--- a/pidgin/plugins/convcolors.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/plugins/convcolors.c	Mon Apr 30 12:02:15 2007 +0000
@@ -319,6 +319,12 @@
 {
 	get_config_frame,
 	0,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info =
@@ -347,7 +353,13 @@
 	&ui_info,                     /* ui_info            */
 	NULL,                         /* extra_info         */
 	NULL,                         /* prefs_info         */
-	NULL                          /* actions            */
+	NULL,                         /* actions            */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static void
--- a/pidgin/plugins/extplacement.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/plugins/extplacement.c	Mon Apr 30 12:02:15 2007 +0000
@@ -118,7 +118,13 @@
 static PurplePluginUiInfo prefs_info = {
 	get_plugin_pref_frame,
 	0,   /* page_num (Reserved) */
-	NULL /* frame (Reserved) */
+	NULL, /* frame (Reserved) */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info =
@@ -146,7 +152,13 @@
 	NULL,											/**< ui_info		*/
 	NULL,											/**< extra_info		*/
 	&prefs_info,									/**< prefs_info		*/
-	NULL											/**< actions		*/
+	NULL,											/**< actions		*/
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static void
--- a/pidgin/plugins/gestures/gestures.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/plugins/gestures/gestures.c	Mon Apr 30 12:02:15 2007 +0000
@@ -271,7 +271,13 @@
 static PidginPluginUiInfo ui_info =
 {
 	get_config_frame,
-	0 /* page_num (Reserved) */
+	0, /* page_num (Reserved) */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info =
@@ -308,6 +314,12 @@
 	&ui_info,                                         /**< ui_info        */
 	NULL,                                             /**< extra_info     */
 	NULL,
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/pidgin/plugins/history.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/plugins/history.c	Mon Apr 30 12:02:15 2007 +0000
@@ -198,6 +198,12 @@
 	NULL,
 	NULL,
 	NULL,
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/pidgin/plugins/iconaway.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/plugins/iconaway.c	Mon Apr 30 12:02:15 2007 +0000
@@ -95,6 +95,12 @@
 	NULL,                                             /**< ui_info        */
 	NULL,                                             /**< extra_info     */
 	NULL,
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/pidgin/plugins/markerline.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/plugins/markerline.c	Mon Apr 30 12:02:15 2007 +0000
@@ -261,6 +261,12 @@
 	get_plugin_pref_frame,
 	0,
 	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info = {
@@ -288,7 +294,13 @@
 	NULL,						/* ui_info				*/
 	NULL,						/* extra_info			*/
 	&prefs_info,				/* prefs_info			*/
-	NULL						/* actions				*/
+	NULL,						/* actions				*/
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static void
--- a/pidgin/plugins/musicmessaging/musicmessaging.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/plugins/musicmessaging/musicmessaging.c	Mon Apr 30 12:02:15 2007 +0000
@@ -649,7 +649,13 @@
 static PidginPluginUiInfo ui_info =
 {
 	get_config_frame,
-	0 /* page_num (reserved) */
+	0, /* page_num (reserved) */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info = {
@@ -677,7 +683,13 @@
     &ui_info,                                            /**< ui_info        */
     NULL,                                                /**< extra_info     */
     NULL,
-    NULL
+    NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static void
--- a/pidgin/plugins/notify.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/plugins/notify.c	Mon Apr 30 12:02:15 2007 +0000
@@ -877,7 +877,13 @@
 static PidginPluginUiInfo ui_info =
 {
 	get_config_frame,
-	0 /* page_num (Reserved) */
+	0, /* page_num (Reserved) */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info =
@@ -909,6 +915,12 @@
 	&ui_info,                                         /**< ui_info        */
 	NULL,                                              /**< extra_info     */
 	NULL,
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/pidgin/plugins/pidginrc.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/plugins/pidginrc.c	Mon Apr 30 12:02:15 2007 +0000
@@ -599,7 +599,13 @@
 static PidginPluginUiInfo purplerc_ui_info =
 {
 	purplerc_get_config_frame,
-	0 /* page_num (Reserved) */
+	0, /* page_num (Reserved) */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo purplerc_info =
@@ -625,6 +631,12 @@
 	&purplerc_ui_info,
 	NULL,
 	NULL,
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/pidgin/plugins/relnot.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/plugins/relnot.c	Mon Apr 30 12:02:15 2007 +0000
@@ -159,6 +159,12 @@
 	NULL,                                             /**< ui_info        */
 	NULL,                                             /**< extra_info     */
 	NULL,
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/pidgin/plugins/spellchk.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/plugins/spellchk.c	Mon Apr 30 12:02:15 2007 +0000
@@ -2350,7 +2350,13 @@
 static PidginPluginUiInfo ui_info =
 {
 	get_config_frame,
-	0 /* page_num (Reserved) */
+	0, /* page_num (Reserved) */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info =
@@ -2376,6 +2382,12 @@
 	&ui_info,
 	NULL,
 	NULL,
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/pidgin/plugins/ticker/ticker.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/plugins/ticker/ticker.c	Mon Apr 30 12:02:15 2007 +0000
@@ -368,6 +368,12 @@
 	NULL,                                             /**< ui_info        */
 	NULL,                                             /**< extra_info     */
 	NULL,
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/pidgin/plugins/timestamp.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/plugins/timestamp.c	Mon Apr 30 12:02:15 2007 +0000
@@ -178,7 +178,13 @@
 static PidginPluginUiInfo ui_info =
 {
 	get_config_frame,
-	0 /* page_num (Reserved) */
+	0, /* page_num (Reserved) */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info =
@@ -209,6 +215,12 @@
 	&ui_info,                                         /**< ui_info        */
 	NULL,                                             /**< extra_info     */
 	NULL,
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/pidgin/plugins/timestamp_format.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/plugins/timestamp_format.c	Mon Apr 30 12:02:15 2007 +0000
@@ -126,7 +126,13 @@
 static PurplePluginUiInfo prefs_info = {
         get_plugin_pref_frame,
 	0,   /* page num (Reserved) */
-	NULL /* frame (Reserved) */
+	NULL,/* frame (Reserved) */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info =
@@ -159,7 +165,13 @@
 	NULL,                                             /**< ui_info        */
 	NULL,                                             /**< extra_info     */
 	&prefs_info,                                      /**< prefs_info     */
-	NULL                                              /**< actions        */
+	NULL,                                             /**< actions        */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static void
--- a/pidgin/plugins/win32/transparency/win2ktrans.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/plugins/win32/transparency/win2ktrans.c	Mon Apr 30 12:02:15 2007 +0000
@@ -641,7 +641,13 @@
 static PidginPluginUiInfo ui_info =
 {
 	get_config_frame,
-	0 /* page_num (Reserved) */
+	0, /* page_num (Reserved) */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info =
@@ -670,7 +676,13 @@
 	&ui_info,			/**< ui_info        */
 	NULL,				/**< extra_info     */
 	NULL,				/**< prefs_info     */
-	NULL				/**< actions        */
+	NULL,				/**< actions        */
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static void
--- a/pidgin/plugins/win32/winprefs/winprefs.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/plugins/win32/winprefs/winprefs.c	Mon Apr 30 12:02:15 2007 +0000
@@ -352,7 +352,13 @@
 static PidginPluginUiInfo ui_info =
 {
 	get_config_frame,
-	0
+	0,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static PurplePluginInfo info =
@@ -378,6 +384,12 @@
 	&ui_info,
 	NULL,
 	NULL,
+	NULL,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
 	NULL
 };
 
--- a/pidgin/plugins/xmppconsole.c	Sun Apr 29 01:09:18 2007 +0000
+++ b/pidgin/plugins/xmppconsole.c	Mon Apr 30 12:02:15 2007 +0000
@@ -873,7 +873,13 @@
 	NULL,                                         /**< ui_info        */
 	NULL,                                             /**< extra_info     */
 	NULL,
-	actions
+	actions,
+
+	/* padding */
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 static void