changeset 15948:5c88d2887cc1

merge of '343dc2d52b5a1cb204359ecc11a1b4d98b984dd0' and 'f894448f712134780a75dba19622a78626a98231'
author Evan Schoenberg <evan.s@dreskin.net>
date Tue, 27 Mar 2007 03:08:31 +0000
parents a0f24a614a9d (current diff) 1071320641b9 (diff)
children b4ab4812838a 9214184b9d10
files COPYRIGHT
diffstat 70 files changed, 770 insertions(+), 429 deletions(-) [+]
line wrap: on
line diff
--- a/AUTHORS	Tue Mar 27 03:07:14 2007 +0000
+++ b/AUTHORS	Tue Mar 27 03:08:31 2007 +0000
@@ -1,10 +1,10 @@
-gaim - the Pimpin' Penguin IM Clone that's Good for the Soul
-============================================================
+Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
+==========================================================================
 
 For a complete list of all contributors, see the COPYRIGHT file.
 
-We've got an IRC room now too, #gaim on irc.freenode.net (#wingaim for
-Windows users). Come check us out.
+We've got an IRC room now too, #pidgin on irc.freenode.net
+(#winpidgin for Windows users). Come check us out.
 
 Current Developers:
 ------------------
--- a/COPYRIGHT	Tue Mar 27 03:07:14 2007 +0000
+++ b/COPYRIGHT	Tue Mar 27 03:08:31 2007 +0000
@@ -1,8 +1,8 @@
-Gaim
+Purple, Pidgin and Finch
 Copyright (C) 1998-2007 by the following:
 
-If you have contributed to Gaim, you deserve to be on this list.
-Contact us (see: AUTHORS) and we'll add you.
+If you have contributed to this project then you deserve to be on this
+list.  Contact us (see: AUTHORS) and we'll add you.
 
 Saleem Abdulrasool
 Dave Ahlswede
--- a/ChangeLog	Tue Mar 27 03:07:14 2007 +0000
+++ b/ChangeLog	Tue Mar 27 03:08:31 2007 +0000
@@ -1,9 +1,4 @@
-2007-01-24  gettextize  <bug-gnu-gettext@gnu.org>
-
-	* Makefile.am (ACLOCAL_AMFLAGS): New variable.
-	(EXTRA_DIST): Add config.rpath, m4/ChangeLog.
-
-Gaim: The Pimpin' Penguin IM Client that's good for the soul!
+Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
 version 2.0.0:
 	Build Changes:
--- a/ChangeLog.API	Tue Mar 27 03:07:14 2007 +0000
+++ b/ChangeLog.API	Tue Mar 27 03:08:31 2007 +0000
@@ -1,4 +1,4 @@
-Gaim: The Pimpin' Penguin IM Client that's good for the soul!
+Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
 version 2.0.0:
 	Changed:
--- a/Doxyfile.in	Tue Mar 27 03:07:14 2007 +0000
+++ b/Doxyfile.in	Tue Mar 27 03:08:31 2007 +0000
@@ -431,9 +431,9 @@
 # directories like "/usr/src/myproject". Separate the files or directories 
 # with spaces.
 
-INPUT                  = libgaim \
-						 gtk \
-						 console \
+INPUT                  = libpurple \
+						 finch \
+						 pidgin \
                          doc
 
 # If the value of the INPUT tag contains directories, you can use the 
@@ -586,9 +586,9 @@
 # The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
 # should be ignored while generating the index headers.
 
-IGNORE_PREFIX          = Gaim \
-                         _Gaim \
-                         gaim
+IGNORE_PREFIX          = Purple \
+                         _Purple \
+                         purple
 
 #---------------------------------------------------------------------------
 # configuration options related to the HTML output
--- a/NEWS	Tue Mar 27 03:07:14 2007 +0000
+++ b/NEWS	Tue Mar 27 03:08:31 2007 +0000
@@ -1,4 +1,4 @@
--=[ Gaim ]=-  The Pimpin' Penguin IM Client That's Good For The Soul!
+Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
 2.0.0beta6 (1/17/2006):
 	Sean: Barring any seriously major new issues, we expect this to be
--- a/PLUGIN_HOWTO	Tue Mar 27 03:07:14 2007 +0000
+++ b/PLUGIN_HOWTO	Tue Mar 27 03:08:31 2007 +0000
@@ -1,20 +1,7 @@
-For information on writing a plugin for Gaim, go
-http://gaim.sourceforge.net/api/ and see the HOWTOs in the
-"Related Pages" section.
+For information on writing a plugin for Purple, Pidgin or Finch, go
+http://pidgin.im/api/ and see the HOWTOs in the "Related Pages"
+section.
 
 You can also generate this documentation locally by installing
-doxygen and graphviz dot, then running "make docs" in the Gaim
+doxygen and graphviz dot, then running "make docs" in the
 source tree.  The documentation will be in the docs/html directory.
-
-This next paragraph is old and possibly out of date:
-Compilation of the plugins is fairly straight-forward; there is a
-Makefile in this directory that has a rule for making the .so file
-from a .c file. No modification of the Makefile should be necessary,
-unless if you simply want to type 'make' to have it made; otherwise,
-'make filename.so' will take filename.c and make the .so plugin from
-it. If you need to link in with extra libraries, you can set the
-environment variable PLUGIN_LIBS to be the libraries you want to link
-with.
-
-It should be possible to compile plugins outside of the Gaim source
-tree, which is a much cleaner solution.
--- a/README	Tue Mar 27 03:07:14 2007 +0000
+++ b/README	Tue Mar 27 03:08:31 2007 +0000
@@ -1,28 +1,33 @@
-gaim
+Purple, Pidgin and Finch
 ========================
-Rob Flynn <gaim@robflynn.com> IM: RobFlynn (current maintainer)
-Syd Logan - Super Hacker and Resident Designated Driver
-Jim Duchek <jimduchek@ou.edu> IM: Zilding (former maintainer)
-Eric Warmenhoven <eric@warmenhoven.org> (retired)
-Mark Spencer <markster@marko.net>
+See AUTHORS and COPYRIGHT for the list of contributors.
+
+libpurple is a library intended to be used by programmers seeking
+to write an IM client that connects to many IM networks.  It supports
+AIM, ICQ, Jabber, MSN and Yahoo!, among others.
 
-Gaim is an IM client that supports many protocols, including AIM, ICQ,
-MSN, IRC, and Jabber. Gaim is NOT endorsed by, nor affiliated with,
-AOL nor any other company in ANY way.
+Pidgin is an graphical IM client written in C which uses the GTK+
+toolkit.
 
+Finch is a text-based IM client written in C which uses the ncurses
+toolkit.
+
+These programs are not endorsed by, nor affiliated with, AOL nor any
+other company in any way.
 
 BUILD
 =====
 
 Read the 'INSTALL' file for more detailed directions.
 
-Gaim uses the standard ./configure ; make. You need to use gmake, BSD
-make probably won't work. Remember, run ./configure --help to see what
-build options are available.
+These programs use the standard ./configure ; make. You need to use
+gmake, BSD make probably won't work. Remember, run ./configure --help
+to see what build options are available.
 
-In order to compile Gaim, you need to have GTK+ 2.0 installed (as
+In order to compile Pidgin you need to have GTK+ 2.0 installed (as
 well as the development files!). The configure script will fail if you
-don't. You can get it from http://www.gtk.org/.
+don't.  If you don't have GTK+ 2.0 installed, you should install it
+using your distribution's package management tools.
 
 For sound support, you also need gstreamer 0.10 or higher. For
 spellchecking support, you need libgtkspell (http://gtkspell.sf.net/).
@@ -34,9 +39,9 @@
 
 You should run 'make install' as root to make sure plugins and other files
 get installed into locations they want to be in. Once you've done that,
-you only need to run 'gaim'.
+you only need to run 'pidgin' or 'finch'.
 
-Protocol plugins (prpls) are now automatically loaded. Simply go to the
+Protocol plugins (PRPLs) are now automatically loaded. Simply go to the
 account editor, add a new account, and all supported protocols will be
 there. Be sure to use OSCAR (AIM/ICQ) and not the old TOC or ICQ plugins.
 
@@ -46,12 +51,12 @@
 PLUGINS
 =======
 
-If you do not wish to enable the plugin support within Gaim, run the
+If you do not wish to enable the plugin support within Purple, run the
 ./configure script with the --disable-plugins option and recompile your
 source code.  This will prevent the ability to load plugins.
 
-'make install' puts the plugins in $PREFIX/lib/gaim (PREFIX being what
-you specified when you ./configure'd - it defaults to /usr/local). Gaim
+'make install' puts the plugins in $PREFIX/lib/purple (PREFIX being what
+you specified when you ./configure'd - it defaults to /usr/local). Purple
 looks for the plugins in that directory by default, but they do not have
 to be there to use them. Also, plugins have a .so extension by default,
 though they do not have to.
@@ -69,11 +74,7 @@
 make sure to put double-quotes around the "%s", otherwise bad things may
 happen.
 
-If you come across a bug, please report it to http://gaim.sf.net/bug.php.
-
-See README.SVN for information on the bleeding edge SVN version of Gaim.
-You probably shouldn't use it, as it may eat your children, as well as
-your settings.
+If you come across a bug, please report it to http://pidgin.im/.
 
 
 PROTOCOL INFORMATION
@@ -101,11 +102,11 @@
 
 Oscar is the default protocol. It is recommended that you use Oscar for
 both AIM and ICQ, as TOC isn't very featureful and the old ICQ protocol no
-longer works. 
+longer works.
 
 For AIM, Oscar can get people's away messages. It can request and accept
-Direct Connections, and has limited support for file transfer. IM Image 
-does not currently work. It can send and receive buddy icons if you have 
+Direct Connections, and has limited support for file transfer. IM Image
+does not currently work. It can send and receive buddy icons if you have
 GdkPixbuf.
 
 For ICQ, it supports nearly everything that the old ICQ plugin supported,
@@ -120,7 +121,7 @@
 Yahoo is currently using the new YMSG protocol that newer official Yahoo
 clients are using. This protocol is much better than the old one, and
 tends to be somewhat more reliable. However, the Yahoo service is still
-flaky at best. 
+flaky at best.
 
 
 IRC (Ethan)
@@ -134,27 +135,18 @@
 IRC, /help will give you a list of them.
 
 
-MSN (Christian)
+MSN
 ===
 
 With MSN you can join a conversation with several people, but you can't
 invite people from the IM window yet.
 
 
-ICQ (Mark)
-===
-
-The ICQ plugin is deprecated and will probably be removed soon. The
-protocol only marginally works. You should use Oscar for ICQ. You'll
-need a different client to register an ICQ account if you don't have
-one yet.
-
-
 Jabber (Nathan)
 ======
 
 Transports aren't currently supported at all, though if you have a
-transport already subscribed Gaim will use it (you can't add or remove
+transport already subscribed Purple will use it (you can't add or remove
 transports though). In order to use a server other than jabber.org, set
 your username to include the server, e.g. warmenhoven@mycompany.com. This
 is the actual format of the Jabber ID anyway; Jabber is email with online
@@ -162,23 +154,13 @@
 appropriate box in the account editor for your Jabber account.
 
 
-Napster (Mark)
-=======
-
-Heh.  Ok, so I (Rob) am on crack!  Gaim can sign on/off of Napster,
-add/remove people to your hotlist (buddylist) as well as chat privately
-and in chat rooms.  You can search for files and browse a list of other
-user's files.  You can currently download files as long as the person
-you're retrieving files from is not firewalled.
-
-
 Zephyr (Sean)
 ======
 
 Let me start off by saying how much I really despise Zephyr. They do a
 lot of things that make me realize why this never caught on. For those
 of you who are unfortunate enough to feel compelling need to use this,
-gaim now has a Zephyr plugin. It can currently sign on/off, handles
+Purple now has a Zephyr plugin. It can currently sign on/off, handles
 presence/buddy lists (it even imports your .anyone file!), and can
 send/receive personal messages. A lot of stuff is missing, this is just
 a real rough first stab at it.
--- a/config.h.mingw	Tue Mar 27 03:07:14 2007 +0000
+++ b/config.h.mingw	Tue Mar 27 03:08:31 2007 +0000
@@ -26,10 +26,10 @@
 #define ENABLE_NLS 1
 
 /* Define to make assertions fatal (useful for debugging). */
-/* #undef GAIM_FATAL_ASSERTS */
+/* #undef PURPLE_FATAL_ASSERTS */
 
 /* Define if plugins are enabled. */
-#define GAIM_PLUGINS 1
+#define PURPLE_PLUGINS 1
 
 /* Define to 1 if you have `alloca', as a function or macro. */
 #define HAVE_ALLOCA 1
@@ -523,7 +523,7 @@
 #define PACKAGE "pidgin"
 
 /* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT "gaim-devel@lists.sourceforge.net"
+#define PACKAGE_BUGREPORT "devel@pidgin.im"
 
 /* Define to the full name of this package. */
 #define PACKAGE_NAME "pidgin"
--- a/doc/PERL-HOWTO.dox	Tue Mar 27 03:07:14 2007 +0000
+++ b/doc/PERL-HOWTO.dox	Tue Mar 27 03:08:31 2007 +0000
@@ -333,7 +333,7 @@
 }
 @endcode
 
-Now we can provide an UI for manipulating these preferences in our @prefs_info
+Now we can provide an UI for manipulating these preferences in our @c prefs_info
 function.
 
 @code
--- a/finch/gntblist.c	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/gntblist.c	Tue Mar 27 03:08:31 2007 +0000
@@ -642,8 +642,8 @@
 
 	item = gnt_menuitem_new(action->label);
 	if (action->callback)
-		gnt_menuitem_set_callback(GNT_MENUITEM(item), context_menu_callback, action);
-	gnt_menu_add_item(menu, GNT_MENUITEM(item));
+		gnt_menuitem_set_callback(GNT_MENU_ITEM(item), context_menu_callback, action);
+	gnt_menu_add_item(menu, GNT_MENU_ITEM(item));
 
 	if (action->children) {
 		GntWidget *sub = gnt_menu_new(GNT_MENU_POPUP);
@@ -745,7 +745,7 @@
 {
 	PurpleMenuAction *action = data;
 	purple_blist_node_set_bool(action->data, "gnt-autojoin",
-				gnt_menuitem_check_get_checked(GNT_MENUITEM_CHECK(item)));
+				gnt_menuitem_check_get_checked(GNT_MENU_ITEM_CHECK(item)));
 }
 
 static void
@@ -753,7 +753,7 @@
 {
 	PurpleMenuAction *action = purple_menu_action_new(_("Auto-join"), NULL, chat, NULL);
 	GntMenuItem *check = gnt_menuitem_check_new(action->label);
-	gnt_menuitem_check_set_checked(GNT_MENUITEM_CHECK(check),
+	gnt_menuitem_check_set_checked(GNT_MENU_ITEM_CHECK(check),
 				purple_blist_node_get_bool((PurpleBlistNode*)chat, "gnt-autojoin"));
 	gnt_menu_add_item(menu, check);
 	gnt_menuitem_set_callback(check, autojoin_toggled, action);
@@ -2072,25 +2072,25 @@
 
 	item = gnt_menuitem_new(_("Send IM..."));
 	gnt_menu_add_item(GNT_MENU(sub), item);
-	gnt_menuitem_set_callback(GNT_MENUITEM(item), send_im_select, NULL);
+	gnt_menuitem_set_callback(GNT_MENU_ITEM(item), send_im_select, NULL);
 
 	item = gnt_menuitem_check_new(_("Toggle offline buddies"));
-	gnt_menuitem_check_set_checked(GNT_MENUITEM_CHECK(item),
+	gnt_menuitem_check_set_checked(GNT_MENU_ITEM_CHECK(item),
 				purple_prefs_get_bool(PREF_ROOT "/showoffline"));
 	gnt_menu_add_item(GNT_MENU(sub), item);
-	gnt_menuitem_set_callback(GNT_MENUITEM(item), show_offline_cb, NULL);
+	gnt_menuitem_set_callback(GNT_MENU_ITEM(item), show_offline_cb, NULL);
 
 	item = gnt_menuitem_new(_("Sort by status"));
 	gnt_menu_add_item(GNT_MENU(sub), item);
-	gnt_menuitem_set_callback(GNT_MENUITEM(item), sort_blist_change_cb, "status");
+	gnt_menuitem_set_callback(GNT_MENU_ITEM(item), sort_blist_change_cb, "status");
 
 	item = gnt_menuitem_new(_("Sort alphabetically"));
 	gnt_menu_add_item(GNT_MENU(sub), item);
-	gnt_menuitem_set_callback(GNT_MENUITEM(item), sort_blist_change_cb, "text");
+	gnt_menuitem_set_callback(GNT_MENU_ITEM(item), sort_blist_change_cb, "text");
 
 	item = gnt_menuitem_new(_("Sort by log size"));
 	gnt_menu_add_item(GNT_MENU(sub), item);
-	gnt_menuitem_set_callback(GNT_MENUITEM(item), sort_blist_change_cb, "log");
+	gnt_menuitem_set_callback(GNT_MENU_ITEM(item), sort_blist_change_cb, "log");
 
 	reconstruct_accounts_menu();
 	gnt_menu_add_item(GNT_MENU(menu), ggblist->accounts);
--- a/finch/gntft.c	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/gntft.c	Tue Mar 27 03:08:31 2007 +0000
@@ -158,18 +158,12 @@
 stop_button_cb(GntButton *button)
 {
 	PurpleXfer *selected_xfer = gnt_tree_get_selection_data(GNT_TREE(xfer_dialog->tree));
-	if (selected_xfer && selected_xfer->status == PURPLE_XFER_STATUS_STARTED)
+	if (selected_xfer && selected_xfer->status != PURPLE_XFER_STATUS_CANCEL_LOCAL &&
+			selected_xfer->status != PURPLE_XFER_STATUS_CANCEL_REMOTE &&
+			selected_xfer->status != PURPLE_XFER_STATUS_DONE)
 		purple_xfer_cancel_local(selected_xfer);
 }
 
-#if 0
-static void
-tree_selection_changed_cb(GntTree *tree, GntTreeRow *old, GntTreeRow *current, gpointer n)
-{
-	xfer_dialog->selected_xfer = (PurpleXfer *)gnt_tree_get_selection_data(tree);
-}
-#endif
-
 /**************************************************************************
  * Dialog Building Functions
  **************************************************************************/
@@ -209,8 +203,7 @@
 	gnt_tree_set_col_width(GNT_TREE(tree), COLUMN_STATUS, 10);
 	gnt_tree_set_show_title(GNT_TREE(tree), TRUE);
 	gnt_box_add_widget(GNT_BOX(window), tree);
-	/*g_signal_connect(G_OBJECT(tree), "selection-changed",*/
-					/*G_CALLBACK(tree_selection_changed_cb), NULL);*/
+
 	checkbox = gnt_check_box_new( _("Close this window when all transfers finish"));
 	gnt_check_box_set_checked(GNT_CHECK_BOX(checkbox),
 								 !xfer_dialog->keep_open);
@@ -430,6 +423,7 @@
 	g_free(remaining_str);
 	if (purple_xfer_is_completed(xfer)) {
 		gnt_tree_change_text(GNT_TREE(xfer_dialog->tree), xfer, COLUMN_STATUS, _("Finished"));
+		gnt_tree_change_text(GNT_TREE(xfer_dialog->tree), xfer, COLUMN_REMAINING, _("Finished"));
 	} else {
 		gnt_tree_change_text(GNT_TREE(xfer_dialog->tree), xfer, COLUMN_STATUS, _("Transferring"));
 	}
--- a/finch/gntrequest.c	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/gntrequest.c	Tue Mar 27 03:08:31 2007 +0000
@@ -28,6 +28,7 @@
 #include <gntcheckbox.h>
 #include <gntcombobox.h>
 #include <gntentry.h>
+#include <gntfilesel.h>
 #include <gntlabel.h>
 #include <gntline.h>
 #include <gnttree.h>
@@ -39,7 +40,7 @@
 typedef struct
 {
 	void *user_data;
-	GntWidget *entry, *dialog;
+	GntWidget *dialog;
 	GCallback *cbs;
 } PurpleGntFileRequest;
 
@@ -549,8 +550,10 @@
 file_ok_cb(GntWidget *wid, gpointer fq)
 {
 	PurpleGntFileRequest *data = fq;
+	char *file = gnt_file_sel_get_selected_file(GNT_FILE_SEL(data->dialog));
 	if (data->cbs[0] != NULL)
-		((PurpleRequestFileCb)data->cbs[0])(data->user_data, gnt_entry_get_text(GNT_ENTRY(data->entry)));
+		((PurpleRequestFileCb)data->cbs[0])(data->user_data, file);
+	g_free(file);
 
 	purple_request_close(PURPLE_REQUEST_FILE, data->dialog);
 }
@@ -568,8 +571,8 @@
 				GCallback ok_cb, GCallback cancel_cb,
 				void *user_data)
 {
-	GntWidget *window = gnt_vbox_new(FALSE);
-	GntWidget *entry, *hbox, *button;
+	GntWidget *window = gnt_file_sel_new();
+	GntFileSel *sel = GNT_FILE_SEL(window);
 	PurpleGntFileRequest *data = g_new0(PurpleGntFileRequest, 1);
 
 	data->user_data = user_data;
@@ -577,31 +580,14 @@
 	data->cbs[0] = ok_cb;
 	data->cbs[1] = cancel_cb;
 	data->dialog = window;
-	data->entry = entry = gnt_entry_new(g_strconcat(purple_home_dir(), G_DIR_SEPARATOR_S, filename, NULL));
-	gnt_widget_set_size(entry, 30, 1);
-	gnt_box_set_toplevel(GNT_BOX(window), TRUE);
 	gnt_box_set_title(GNT_BOX(window), title ? title : (savedialog ? _("Save File...") : _("Open File...")));
-#if 0
-	/* After the string freeze */
-	gnt_box_add_widget(GNT_BOX(window), gnt_label_new(_("Please enter a full path for a file")));
-#endif
-	gnt_box_add_widget(GNT_BOX(window), entry);
-
-	hbox = gnt_hbox_new(TRUE);
-	gnt_box_set_alignment(GNT_BOX(hbox), GNT_ALIGN_MID);
-
-	button = gnt_button_new(_("Cancel"));
-	g_signal_connect(G_OBJECT(button), "activate",
-		G_CALLBACK(file_cancel_cb), data);
-	gnt_box_add_widget(GNT_BOX(hbox), button);
-
-	button = gnt_button_new(_("OK"));
-	g_signal_connect(G_OBJECT(button), "activate",
-		G_CALLBACK(file_ok_cb), data);
-	gnt_box_add_widget(GNT_BOX(hbox), button);
-
-	gnt_box_add_widget(GNT_BOX(window), hbox);
-
+	gnt_file_sel_set_current_location(sel, purple_home_dir());  /* XXX: */
+	if (savedialog)
+		gnt_file_sel_set_suggested_filename(sel, filename);
+	g_signal_connect(G_OBJECT(sel->cancel), "activate",
+			G_CALLBACK(file_cancel_cb), data);
+	g_signal_connect(G_OBJECT(sel->select), "activate",
+			G_CALLBACK(file_ok_cb), data);
 	g_signal_connect_swapped(G_OBJECT(window), "destroy",
 			G_CALLBACK(file_request_destroy), data);
 
--- a/finch/libgnt/gnt-skel.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gnt-skel.h	Tue Mar 27 03:08:31 2007 +0000
@@ -17,16 +17,16 @@
 #define GNT_SKEL_SET_FLAGS(obj, flags)		(GNT_SKEL_FLAGS(obj) |= flags)
 #define GNT_SKEL_UNSET_FLAGS(obj, flags)	(GNT_SKEL_FLAGS(obj) &= ~(flags))
 
-typedef struct _GnSkel			GntSkel;
-typedef struct _GnSkelPriv		GntSkelPriv;
-typedef struct _GnSkelClass		GntSkelClass;
+typedef struct _GntSkel			GntSkel;
+typedef struct _GntSkelPriv		GntSkelPriv;
+typedef struct _GntSkelClass		GntSkelClass;
 
-struct _GnSkel
+struct _GntSkel
 {
 	GntWidget parent;
 };
 
-struct _GnSkelClass
+struct _GntSkelClass
 {
 	GntWidgetClass parent;
 
--- a/finch/libgnt/gnt.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gnt.h	Tue Mar 27 03:08:31 2007 +0000
@@ -16,8 +16,6 @@
 
 void gnt_screen_update(GntWidget *widget);
 
-void gnt_screen_take_focus(GntWidget *widget);
-
 void gnt_screen_resize_widget(GntWidget *widget, int width, int height);
 
 void gnt_screen_move_widget(GntWidget *widget, int x, int y);
@@ -38,4 +36,4 @@
 
 gchar *gnt_get_clipboard_string(void);
 
-void gnt_set_clipboard_string(gchar *);
+void gnt_set_clipboard_string(gchar *string);
--- a/finch/libgnt/gntbindable.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gntbindable.h	Tue Mar 27 03:08:31 2007 +0000
@@ -15,15 +15,15 @@
 
 #define	GNTDEBUG	g_printerr("%s\n", __FUNCTION__)
 
-typedef struct _GnBindable			GntBindable;
-typedef struct _GnBindableClass		GntBindableClass;
+typedef struct _GntBindable			GntBindable;
+typedef struct _GntBindableClass		GntBindableClass;
 
-struct _GnBindable
+struct _GntBindable
 {
 	GObject inherit;
 };
 
-struct _GnBindableClass
+struct _GntBindableClass
 {
 	GObjectClass parent;
 
@@ -52,10 +52,10 @@
 typedef gboolean (*GntBindableActionCallback) (GntBindable *bindable, GList *params);
 typedef gboolean (*GntBindableActionCallbackNoParam)(GntBindable *bindable);
 
-typedef struct _GnBindableAction GntBindableAction;
-typedef struct _GnBindableActionParam GntBindableActionParam;
+typedef struct _GntBindableAction GntBindableAction;
+typedef struct _GntBindableActionParam GntBindableActionParam;
 
-struct _GnBindableAction
+struct _GntBindableAction
 {
 	char *name;        /* The name of the action */
 	union {
@@ -64,7 +64,7 @@
 	} u;
 };
 
-struct _GnBindableActionParam
+struct _GntBindableActionParam
 {
 	GntBindableAction *action;
 	GList *list;
--- a/finch/libgnt/gntbox.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gntbox.h	Tue Mar 27 03:08:31 2007 +0000
@@ -11,8 +11,8 @@
 #define GNT_IS_BOX_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE((klass), GNT_TYPE_BOX))
 #define GNT_BOX_GET_CLASS(obj)	(G_TYPE_INSTANCE_GET_CLASS((obj), GNT_TYPE_BOX, GntBoxClass))
 
-typedef struct _GnBox			GntBox;
-typedef struct _GnBoxClass		GntBoxClass;
+typedef struct _GntBox			GntBox;
+typedef struct _GntBoxClass		GntBoxClass;
 
 typedef enum
 {
@@ -27,7 +27,7 @@
 	GNT_ALIGN_BOTTOM
 } GntAlignment;
 
-struct _GnBox
+struct _GntBox
 {
 	GntWidget parent;
 
@@ -49,7 +49,7 @@
     void (*gnt_reserved4)(void);
 };
 
-struct _GnBoxClass
+struct _GntBoxClass
 {
 	GntWidgetClass parent;
 
--- a/finch/libgnt/gntbutton.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gntbutton.h	Tue Mar 27 03:08:31 2007 +0000
@@ -13,16 +13,16 @@
 #define GNT_IS_BUTTON_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE((klass), GNT_TYPE_BUTTON))
 #define GNT_BUTTON_GET_CLASS(obj)	(G_TYPE_INSTANCE_GET_CLASS((obj), GNT_TYPE_BUTTON, GntButtonClass))
 
-typedef struct _GnButton			GntButton;
-typedef struct _GnButtonPriv		GntButtonPriv;
-typedef struct _GnButtonClass		GntButtonClass;
+typedef struct _GntButton			GntButton;
+typedef struct _GntButtonPriv		GntButtonPriv;
+typedef struct _GntButtonClass		GntButtonClass;
 
-struct _GnButtonPriv
+struct _GntButtonPriv
 {
 	char *text;
 };
 
-struct _GnButton
+struct _GntButton
 {
 	GntWidget parent;
 
@@ -34,7 +34,7 @@
     void (*gnt_reserved4)(void);
 };
 
-struct _GnButtonClass
+struct _GntButtonClass
 {
 	GntWidgetClass parent;
 
--- a/finch/libgnt/gntcheckbox.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gntcheckbox.h	Tue Mar 27 03:08:31 2007 +0000
@@ -17,17 +17,17 @@
 #define GNT_CHECK_BOX_SET_FLAGS(obj, flags)		(GNT_CHECK_BOX_FLAGS(obj) |= flags)
 #define GNT_CHECK_BOX_UNSET_FLAGS(obj, flags)	(GNT_CHECK_BOX_FLAGS(obj) &= ~(flags))
 
-typedef struct _GnCheckBox			GntCheckBox;
-typedef struct _GnCheckBoxPriv		GntCheckBoxPriv;
-typedef struct _GnCheckBoxClass		GntCheckBoxClass;
+typedef struct _GntCheckBox			GntCheckBox;
+typedef struct _GntCheckBoxPriv		GntCheckBoxPriv;
+typedef struct _GntCheckBoxClass		GntCheckBoxClass;
 
-struct _GnCheckBox
+struct _GntCheckBox
 {
 	GntButton parent;
 	gboolean checked;
 };
 
-struct _GnCheckBoxClass
+struct _GntCheckBoxClass
 {
 	GntButtonClass parent;
 
--- a/finch/libgnt/gntclipboard.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gntclipboard.h	Tue Mar 27 03:08:31 2007 +0000
@@ -14,16 +14,16 @@
 
 #define	GNTDEBUG	g_printerr("%s\n", __FUNCTION__)
 
-typedef struct _GnClipboard			GntClipboard;
-typedef struct _GnClipboardClass		GntClipboardClass;
+typedef struct _GntClipboard			GntClipboard;
+typedef struct _GntClipboardClass		GntClipboardClass;
 
-struct _GnClipboard
+struct _GntClipboard
 {
 	GObject inherit;
 	gchar *string;
 };
 
-struct _GnClipboardClass
+struct _GntClipboardClass
 {
 	GObjectClass parent;
 
@@ -37,9 +37,9 @@
 
 GType gnt_clipboard_get_gtype(void);
 
-gchar *gnt_clipboard_get_string(GntClipboard *);
+gchar *gnt_clipboard_get_string(GntClipboard *clip);
 
-void gnt_clipboard_set_string(GntClipboard *, gchar *);
+void gnt_clipboard_set_string(GntClipboard *clip, gchar *string);
 
 G_END_DECLS
 
--- a/finch/libgnt/gntcombobox.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gntcombobox.h	Tue Mar 27 03:08:31 2007 +0000
@@ -17,11 +17,11 @@
 #define GNT_COMBO_BOX_SET_FLAGS(obj, flags)		(GNT_COMBO_BOX_FLAGS(obj) |= flags)
 #define GNT_COMBO_BOX_UNSET_FLAGS(obj, flags)	(GNT_COMBO_BOX_FLAGS(obj) &= ~(flags))
 
-typedef struct _GnComboBox			GntComboBox;
-typedef struct _GnComboBoxPriv		GntComboBoxPriv;
-typedef struct _GnComboBoxClass		GntComboBoxClass;
+typedef struct _GntComboBox			GntComboBox;
+typedef struct _GntComboBoxPriv		GntComboBoxPriv;
+typedef struct _GntComboBoxClass		GntComboBoxClass;
 
-struct _GnComboBox
+struct _GntComboBox
 {
 	GntWidget parent;
 
@@ -30,7 +30,7 @@
 	void *selected;        /* Currently selected key */
 };
 
-struct _GnComboBoxClass
+struct _GntComboBoxClass
 {
 	GntWidgetClass parent;
 
--- a/finch/libgnt/gntentry.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gntentry.h	Tue Mar 27 03:08:31 2007 +0000
@@ -19,9 +19,9 @@
 
 #define	ENTRY_CHAR		'_'			/* The character to use to fill in the blank places */
 
-typedef struct _GnEntry			GntEntry;
-typedef struct _GnEntryPriv		GntEntryPriv;
-typedef struct _GnEntryClass	GntEntryClass;
+typedef struct _GntEntry			GntEntry;
+typedef struct _GntEntryPriv		GntEntryPriv;
+typedef struct _GntEntryClass	GntEntryClass;
 
 typedef enum
 {
@@ -34,7 +34,7 @@
 
 #define GNT_ENTRY_FLAG_ALL    (GNT_ENTRY_FLAG_ALPHA | GNT_ENTRY_FLAG_INT)
 
-struct _GnEntry
+struct _GntEntry
 {
 	GntWidget parent;
 
@@ -60,7 +60,7 @@
 	GntWidget *ddown;   /* The dropdown with the suggested list */
 };
 
-struct _GnEntryClass
+struct _GntEntryClass
 {
 	GntWidgetClass parent;
 
--- a/finch/libgnt/gntfilesel.c	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gntfilesel.c	Tue Mar 27 03:08:31 2007 +0000
@@ -28,6 +28,11 @@
 {
 	GntFileSel *sel = GNT_FILE_SEL(widget);
 	g_free(sel->current);
+	g_free(sel->suggest);
+	if (sel->tags) {
+		g_list_foreach(sel->tags, (GFunc)g_free, NULL);
+		g_list_free(sel->tags);
+	}
 }
 
 static char *
@@ -66,13 +71,23 @@
 {
 	char *old;
 	const char *tmp;
-	tmp = (const char*)gnt_tree_get_selection_data(sel->dirsonly ? GNT_TREE(sel->dirs) : GNT_TREE(sel->files));
+	tmp = sel->suggest ? sel->suggest :
+		(const char*)gnt_tree_get_selection_data(sel->dirsonly ? GNT_TREE(sel->dirs) : GNT_TREE(sel->files));
 	old = g_strdup_printf("%s%s%s", sel->current, sel->current[1] ? G_DIR_SEPARATOR_S : "", tmp ? tmp : "");
 	gnt_entry_set_text(GNT_ENTRY(sel->location), old);
 	g_free(old);
 }
 
 static gboolean
+is_tagged(GntFileSel *sel, const char *f)
+{
+	char *ret = g_strdup_printf("%s%s%s", sel->current, sel->current[1] ? G_DIR_SEPARATOR_S : "", f);
+	gboolean find = g_list_find_custom(sel->tags, ret, (GCompareFunc)g_utf8_collate) != NULL;
+	g_free(ret);
+	return find;
+}
+
+static gboolean
 location_changed(GntFileSel *sel, GError **err)
 {
 	GDir *dir;
@@ -109,15 +124,19 @@
 		if (stat(fp, &st)) {
 			g_printerr("Error stating location %s\n", fp);
 		} else {
-			if (S_ISDIR(st.st_mode))
+			if (S_ISDIR(st.st_mode)) {
 				gnt_tree_add_row_after(GNT_TREE(sel->dirs), g_strdup(str),
 						gnt_tree_create_row(GNT_TREE(sel->dirs), str), NULL, NULL);
-			else if (!sel->dirsonly) {
+				if (sel->multiselect && sel->dirsonly && is_tagged(sel, str))
+					gnt_tree_set_row_flags(GNT_TREE(sel->dirs), (gpointer)str, GNT_TEXT_FLAG_BOLD);
+			} else if (!sel->dirsonly) {
 				char size[128];
 				snprintf(size, sizeof(size), "%ld", (long)st.st_size);
 
 				gnt_tree_add_row_after(GNT_TREE(sel->files), g_strdup(str),
 						gnt_tree_create_row(GNT_TREE(sel->files), str, size, ""), NULL, NULL);
+				if (sel->multiselect && is_tagged(sel, str))
+					gnt_tree_set_row_flags(GNT_TREE(sel->files), (gpointer)str, GNT_TEXT_FLAG_BOLD);
 			}
 		}
 		g_free(fp);
@@ -131,7 +150,6 @@
 dir_key_pressed(GntTree *tree, const char *key, GntFileSel *sel)
 {
 	if (strcmp(key, "\r") == 0) {
-		/* XXX: if we are moving up the tree, make sure the current node is selected after the redraw */
 		char *str = g_strdup(gnt_tree_get_selection_data(tree));
 		char *path = g_build_filename(sel->current, str, NULL);
 		char *dir = g_path_get_basename(sel->current);
@@ -214,6 +232,8 @@
 static void
 file_sel_changed(GntWidget *widget, gpointer old, gpointer current, GntFileSel *sel)
 {
+	g_free(sel->suggest);
+	sel->suggest = NULL;
 	update_location(sel);
 }
 
@@ -225,7 +245,7 @@
 
 	vbox = gnt_vbox_new(FALSE);
 	gnt_box_set_pad(GNT_BOX(vbox), 0);
-	gnt_box_set_alignment(GNT_BOX(vbox), GNT_ALIGN_LEFT);
+	gnt_box_set_alignment(GNT_BOX(vbox), GNT_ALIGN_MID);
 
 	/* The dir. and files list */
 	hbox = gnt_hbox_new(FALSE);
@@ -253,9 +273,64 @@
 	update_location(sel);
 }
 
+static gboolean
+toggle_tag_selection(GntBindable *bind, GList *null)
+{
+	GntFileSel *sel = GNT_FILE_SEL(bind);
+	char *str;
+	GList *find;
+	char *file;
+	GntWidget *tree;
+
+	if (!sel->multiselect)
+		return FALSE;
+	tree = sel->dirsonly ? sel->dirs : sel->files;
+	if (!gnt_widget_has_focus(tree))
+		return FALSE;
+
+	file = gnt_tree_get_selection_data(sel->dirsonly ? GNT_TREE(sel->dirs) : GNT_TREE(sel->files));
+
+	str = gnt_file_sel_get_selected_file(sel);
+	if ((find = g_list_find_custom(sel->tags, str, (GCompareFunc)g_utf8_collate)) != NULL) {
+		g_free(find->data);
+		sel->tags = g_list_delete_link(sel->tags, find);
+		gnt_tree_set_row_flags(GNT_TREE(tree), file, GNT_TEXT_FLAG_NORMAL);
+		g_free(str);
+	} else {
+		sel->tags = g_list_prepend(sel->tags, str);
+		gnt_tree_set_row_flags(GNT_TREE(tree), file, GNT_TEXT_FLAG_BOLD);
+	}
+
+	return TRUE;
+}
+
+static gboolean
+clear_tags(GntBindable *bind, GList *null)
+{
+	GntFileSel *sel = GNT_FILE_SEL(bind);
+	GntWidget *tree;
+	GList *iter;
+
+	if (!sel->multiselect)
+		return FALSE;
+	tree = sel->dirsonly ? sel->dirs : sel->files;
+	if (!gnt_widget_has_focus(tree))
+		return FALSE;
+
+	g_list_foreach(sel->tags, (GFunc)g_free, NULL);
+	g_list_free(sel->tags);
+	sel->tags = NULL;
+
+	for (iter = GNT_TREE(tree)->list; iter; iter = iter->next)
+		gnt_tree_set_row_flags(GNT_TREE(tree), iter->data, GNT_TEXT_FLAG_NORMAL);
+
+	return TRUE;
+}
+
 static void
 gnt_file_sel_class_init(GntFileSelClass *klass)
 {
+	GntBindableClass *bindable = GNT_BINDABLE_CLASS(klass);
 	GntWidgetClass *kl = GNT_WIDGET_CLASS(klass);
 	parent_class = GNT_WINDOW_CLASS(klass);
 	kl->destroy = gnt_file_sel_destroy;
@@ -270,6 +345,9 @@
 					 NULL, NULL,
 					 gnt_closure_marshal_VOID__STRING_STRING,
 					 G_TYPE_NONE, 0);
+
+	gnt_bindable_class_register_action(bindable, "toggle-tag", toggle_tag_selection, "t", NULL);
+	gnt_bindable_class_register_action(bindable, "clear-tags", clear_tags, "c", NULL);
 	gnt_style_read_actions(G_OBJECT_CLASS_TYPE(klass), GNT_BINDABLE_CLASS(klass));
 
 	GNTDEBUG;
@@ -375,3 +453,53 @@
 	return sel->dirsonly;
 }
 
+void gnt_file_sel_set_suggested_filename(GntFileSel *sel, const char *suggest)
+{
+	sel->suggest = g_strdup(suggest);
+}
+
+char *gnt_file_sel_get_selected_file(GntFileSel *sel)
+{
+	char *ret;
+	if (sel->dirsonly) {
+		ret = g_strdup(g_path_get_dirname(gnt_entry_get_text(GNT_ENTRY(sel->location))));
+	} else {
+		ret = g_strdup(gnt_entry_get_text(GNT_ENTRY(sel->location)));
+	}
+	return ret;
+}
+
+void gnt_file_sel_set_must_exist(GntFileSel *sel, gboolean must)
+{
+	/*XXX: What do I do with this? */
+	sel->must_exist = must;
+}
+
+gboolean gnt_file_sel_get_must_exist(GntFileSel *sel)
+{
+	return sel->must_exist;
+}
+
+void gnt_file_sel_set_multi_select(GntFileSel *sel, gboolean set)
+{
+	sel->multiselect = set;
+}
+
+GList *gnt_file_sel_get_selected_multi_files(GntFileSel *sel)
+{
+	GList *list = NULL, *iter;
+	char *str = gnt_file_sel_get_selected_file(sel);
+
+	for (iter = sel->tags; iter; iter = iter->next) {
+		list = g_list_prepend(list, g_strdup(iter->data));
+		if (g_utf8_collate(str, iter->data)) {
+			g_free(str);
+			str = NULL;
+		}
+	}
+	if (str)
+		list = g_list_prepend(list, str);
+	list = g_list_reverse(list);
+	return list;
+}
+
--- a/finch/libgnt/gntfilesel.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gntfilesel.h	Tue Mar 27 03:08:31 2007 +0000
@@ -17,11 +17,11 @@
 #define GNT_FILE_SEL_SET_FLAGS(obj, flags)		(GNT_FILE_SEL_FLAGS(obj) |= flags)
 #define GNT_FILE_SEL_UNSET_FLAGS(obj, flags)	(GNT_FILE_SEL_FLAGS(obj) &= ~(flags))
 
-typedef struct _GnFileSel			GntFileSel;
-typedef struct _GnFileSelPriv		GntFileSelPriv;
-typedef struct _GnFileSelClass		GntFileSelClass;
+typedef struct _GntFileSel			GntFileSel;
+typedef struct _GntFileSelPriv		GntFileSelPriv;
+typedef struct _GntFileSelClass		GntFileSelClass;
 
-struct _GnFileSel
+struct _GntFileSel
 {
 	GntWindow parent;
 
@@ -33,12 +33,15 @@
 	GntWidget *cancel;   /* cancel button */
 
 	char *current; /* Full path of the current location */
+	char *suggest; /* Suggested filename */
 	/* XXX: someone should make these useful */
 	gboolean must_exist; /* Make sure the selected file (the name entered in 'location') exists */
 	gboolean dirsonly;   /* Show only directories */
+    gboolean multiselect;
+    GList *tags;         /* List of tagged files when multiselect is set */
 };
 
-struct _GnFileSelClass
+struct _GntFileSelClass
 {
 	GntWindowClass parent;
 
@@ -57,12 +60,23 @@
 
 gboolean gnt_file_sel_set_current_location(GntFileSel *sel, const char *path);
 
-const char *gnt_file_sel_get_current_location(GntFileSel *sel);
-
 void gnt_file_sel_set_dirs_only(GntFileSel *sel, gboolean dirs);
 
 gboolean gnt_file_sel_get_dirs_only(GntFileSel *sel);
 
+void gnt_file_sel_set_must_exist(GntFileSel *sel, gboolean must);
+
+gboolean gnt_file_sel_get_must_exist(GntFileSel *sel);
+
+char *gnt_file_sel_get_selected_file(GntFileSel *sel);  /* The returned value should be free'd */
+
+GList *gnt_file_sel_get_selected_multi_files(GntFileSel *sel);
+
+void gnt_file_sel_set_multi_select(GntFileSel *sel, gboolean set);
+
+void gnt_file_sel_set_suggested_filename(GntFileSel *sel, const char *suggest);
+
 G_END_DECLS
 
 #endif /* GNT_FILE_SEL_H */
+
--- a/finch/libgnt/gntlabel.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gntlabel.h	Tue Mar 27 03:08:31 2007 +0000
@@ -12,10 +12,10 @@
 #define GNT_IS_LABEL_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE((klass), GNT_TYPE_LABEL))
 #define GNT_LABEL_GET_CLASS(obj)	(G_TYPE_INSTANCE_GET_CLASS((obj), GNT_TYPE_LABEL, GntLabelClass))
 
-typedef struct _GnLabel			GntLabel;
-typedef struct _GnLabelClass	GntLabelClass;
+typedef struct _GntLabel			GntLabel;
+typedef struct _GntLabelClass	GntLabelClass;
 
-struct _GnLabel
+struct _GntLabel
 {
 	GntWidget parent;
 
@@ -28,7 +28,7 @@
     void (*gnt_reserved4)(void);
 };
 
-struct _GnLabelClass
+struct _GntLabelClass
 {
 	GntWidgetClass parent;
 
--- a/finch/libgnt/gntline.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gntline.h	Tue Mar 27 03:08:31 2007 +0000
@@ -17,18 +17,18 @@
 #define GNT_LINE_SET_FLAGS(obj, flags)		(GNT_LINE_FLAGS(obj) |= flags)
 #define GNT_LINE_UNSET_FLAGS(obj, flags)	(GNT_LINE_FLAGS(obj) &= ~(flags))
 
-typedef struct _GnLine			GntLine;
-typedef struct _GnLinePriv		GntLinePriv;
-typedef struct _GnLineClass		GntLineClass;
+typedef struct _GntLine			GntLine;
+typedef struct _GntLinePriv		GntLinePriv;
+typedef struct _GntLineClass		GntLineClass;
 
-struct _GnLine
+struct _GntLine
 {
 	GntWidget parent;
 
 	gboolean vertical;
 };
 
-struct _GnLineClass
+struct _GntLineClass
 {
 	GntWidgetClass parent;
 
--- a/finch/libgnt/gntmenu.c	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gntmenu.c	Tue Mar 27 03:08:31 2007 +0000
@@ -28,7 +28,7 @@
 		werase(widget->window);
 
 		for (i = 0, iter = menu->list; iter; iter = iter->next, i++) {
-			GntMenuItem *item = GNT_MENUITEM(iter->data);
+			GntMenuItem *item = GNT_MENU_ITEM(iter->data);
 			type = ' ' | COLOR_PAIR(GNT_COLOR_HIGHLIGHT);
 			if (i == menu->selected)
 				type |= A_REVERSE;
@@ -61,10 +61,10 @@
 static void
 menu_tree_add(GntMenu *menu, GntMenuItem *item, GntMenuItem *parent)
 {
-	if (GNT_IS_MENUITEM_CHECK(item)) {
+	if (GNT_IS_MENU_ITEM_CHECK(item)) {
 		gnt_tree_add_choice(GNT_TREE(menu), item,
 			gnt_tree_create_row(GNT_TREE(menu), item->text, " "), parent, NULL);
-		gnt_tree_set_choice(GNT_TREE(menu), item, gnt_menuitem_check_get_checked(GNT_MENUITEM_CHECK(item)));
+		gnt_tree_set_choice(GNT_TREE(menu), item, gnt_menuitem_check_get_checked(GNT_MENU_ITEM_CHECK(item)));
 	} else
 		gnt_tree_add_row_last(GNT_TREE(menu), item,
 			gnt_tree_create_row(GNT_TREE(menu), item->text, item->submenu ? ">" : " "), parent);
@@ -73,7 +73,7 @@
 		GntMenu *sub = GNT_MENU(item->submenu);
 		GList *iter;
 		for (iter = sub->list; iter; iter = iter->next) {
-			GntMenuItem *it = GNT_MENUITEM(iter->data);
+			GntMenuItem *it = GNT_MENU_ITEM(iter->data);
 			menu_tree_add(menu, it, item);
 		}
 	}
@@ -91,7 +91,7 @@
 		GList *iter;
 		gnt_tree_remove_all(GNT_TREE(widget));
 		for (iter = menu->list; iter; iter = iter->next) {
-			GntMenuItem *item = GNT_MENUITEM(iter->data);
+			GntMenuItem *item = GNT_MENU_ITEM(iter->data);
 			menu_tree_add(menu, item, NULL);
 		}
 		org_map(widget);
@@ -185,10 +185,10 @@
 static void
 gnt_menu_toggled(GntTree *tree, gpointer key)
 {
-	GntMenuItem *item = GNT_MENUITEM(key);
+	GntMenuItem *item = GNT_MENU_ITEM(key);
 	GntMenu *menu = GNT_MENU(tree);
-	gboolean check = gnt_menuitem_check_get_checked(GNT_MENUITEM_CHECK(item));
-	gnt_menuitem_check_set_checked(GNT_MENUITEM_CHECK(item), !check);
+	gboolean check = gnt_menuitem_check_get_checked(GNT_MENU_ITEM_CHECK(item));
+	gnt_menuitem_check_set_checked(GNT_MENU_ITEM_CHECK(item), !check);
 	if (item->callback)
 		item->callback(item, item->callbackdata);
 	while (menu) {
@@ -210,7 +210,7 @@
 	}
 
 	if (item) {
-		if (GNT_IS_MENUITEM_CHECK(item))
+		if (GNT_IS_MENU_ITEM_CHECK(item))
 			gnt_menu_toggled(GNT_TREE(widget), item);
 		else
 			menuitem_activate(menu, item);
--- a/finch/libgnt/gntmenu.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gntmenu.h	Tue Mar 27 03:08:31 2007 +0000
@@ -16,9 +16,9 @@
 #define GNT_MENU_SET_FLAGS(obj, flags)		(GNT_MENU_FLAGS(obj) |= flags)
 #define GNT_MENU_UNSET_FLAGS(obj, flags)	(GNT_MENU_FLAGS(obj) &= ~(flags))
 
-typedef struct _GnMenu			GntMenu;
-typedef struct _GnMenuPriv		GntMenuPriv;
-typedef struct _GnMenuClass		GntMenuClass;
+typedef struct _GntMenu			GntMenu;
+typedef struct _GntMenuPriv		GntMenuPriv;
+typedef struct _GntMenuClass		GntMenuClass;
 
 #include "gntmenuitem.h"
 
@@ -33,7 +33,7 @@
 	GNT_MENU_POPUP,         /* A popup menu */
 } GntMenuType;
 
-struct _GnMenu
+struct _GntMenu
 {
 	GntTree parent;
 	GntMenuType type;
@@ -47,7 +47,7 @@
 	GntMenu *parentmenu;
 };
 
-struct _GnMenuClass
+struct _GntMenuClass
 {
 	GntTreeClass parent;
 
--- a/finch/libgnt/gntmenuitem.c	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gntmenuitem.c	Tue Mar 27 03:08:31 2007 +0000
@@ -6,7 +6,7 @@
 static void
 gnt_menuitem_destroy(GObject *obj)
 {
-	GntMenuItem *item = GNT_MENUITEM(obj);
+	GntMenuItem *item = GNT_MENU_ITEM(obj);
 	g_free(item->text);
 	item->text = NULL;
 	if (item->submenu)
@@ -61,8 +61,8 @@
 
 GntMenuItem *gnt_menuitem_new(const char *text)
 {
-	GObject *item = g_object_new(GNT_TYPE_MENUITEM, NULL);
-	GntMenuItem *menuitem = GNT_MENUITEM(item);
+	GObject *item = g_object_new(GNT_TYPE_MENU_ITEM, NULL);
+	GntMenuItem *menuitem = GNT_MENU_ITEM(item);
 
 	menuitem->text = g_strdup(text);
 
--- a/finch/libgnt/gntmenuitem.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gntmenuitem.h	Tue Mar 27 03:08:31 2007 +0000
@@ -4,24 +4,24 @@
 #include <glib.h>
 #include <glib-object.h>
 
-#define GNT_TYPE_MENUITEM				(gnt_menuitem_get_gtype())
-#define GNT_MENUITEM(obj)				(G_TYPE_CHECK_INSTANCE_CAST((obj), GNT_TYPE_MENUITEM, GntMenuItem))
-#define GNT_MENUITEM_CLASS(klass)		(G_TYPE_CHECK_CLASS_CAST((klass), GNT_TYPE_MENUITEM, GntMenuItemClass))
-#define GNT_IS_MENUITEM(obj)			(G_TYPE_CHECK_INSTANCE_TYPE((obj), GNT_TYPE_MENUITEM))
-#define GNT_IS_MENUITEM_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE((klass), GNT_TYPE_MENUITEM))
-#define GNT_MENUITEM_GET_CLASS(obj)	(G_TYPE_INSTANCE_GET_CLASS((obj), GNT_TYPE_MENUITEM, GntMenuItemClass))
+#define GNT_TYPE_MENU_ITEM				(gnt_menuitem_get_gtype())
+#define GNT_MENU_ITEM(obj)				(G_TYPE_CHECK_INSTANCE_CAST((obj), GNT_TYPE_MENU_ITEM, GntMenuItem))
+#define GNT_MENU_ITEM_CLASS(klass)		(G_TYPE_CHECK_CLASS_CAST((klass), GNT_TYPE_MENU_ITEM, GntMenuItemClass))
+#define GNT_IS_MENU_ITEM(obj)			(G_TYPE_CHECK_INSTANCE_TYPE((obj), GNT_TYPE_MENU_ITEM))
+#define GNT_IS_MENU_ITEM_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE((klass), GNT_TYPE_MENU_ITEM))
+#define GNT_MENU_ITEM_GET_CLASS(obj)	(G_TYPE_INSTANCE_GET_CLASS((obj), GNT_TYPE_MENU_ITEM, GntMenuItemClass))
 
-#define GNT_MENUITEM_FLAGS(obj)				(GNT_MENUITEM(obj)->priv.flags)
-#define GNT_MENUITEM_SET_FLAGS(obj, flags)		(GNT_MENUITEM_FLAGS(obj) |= flags)
-#define GNT_MENUITEM_UNSET_FLAGS(obj, flags)	(GNT_MENUITEM_FLAGS(obj) &= ~(flags))
+#define GNT_MENU_ITEM_FLAGS(obj)				(GNT_MENU_ITEM(obj)->priv.flags)
+#define GNT_MENU_ITEM_SET_FLAGS(obj, flags)		(GNT_MENU_ITEM_FLAGS(obj) |= flags)
+#define GNT_MENU_ITEM_UNSET_FLAGS(obj, flags)	(GNT_MENU_ITEM_FLAGS(obj) &= ~(flags))
 
-typedef struct _GnMenuItem			GntMenuItem;
-typedef struct _GnMenuItemPriv		GntMenuItemPriv;
-typedef struct _GnMenuItemClass		GntMenuItemClass;
+typedef struct _GntMenuItem			GntMenuItem;
+typedef struct _GntMenuItemPriv		GntMenuItemPriv;
+typedef struct _GntMenuItemClass		GntMenuItemClass;
 
 #include "gntmenu.h"
 
-struct _GnMenuItemPriv
+struct _GntMenuItemPriv
 {
 	/* These will be used to determine the position of the submenu */
 	int x;
@@ -30,7 +30,7 @@
 
 typedef void (*GntMenuItemCallback)(GntMenuItem *item, gpointer data);
 
-struct _GnMenuItem
+struct _GntMenuItem
 {
 	GObject parent;
 	GntMenuItemPriv priv;
@@ -46,7 +46,7 @@
 	GntMenu *submenu;
 };
 
-struct _GnMenuItemClass
+struct _GntMenuItemClass
 {
 	GObjectClass parent;
 
--- a/finch/libgnt/gntmenuitemcheck.c	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gntmenuitemcheck.c	Tue Mar 27 03:08:31 2007 +0000
@@ -5,7 +5,7 @@
 static void
 gnt_menuitem_check_class_init(GntMenuItemCheckClass *klass)
 {
-	parent_class = GNT_MENUITEM_CLASS(klass);
+	parent_class = GNT_MENU_ITEM_CLASS(klass);
 
 	GNTDEBUG;
 }
@@ -39,7 +39,7 @@
 			NULL					/* value_table		*/
 		};
 
-		type = g_type_register_static(GNT_TYPE_MENUITEM,
+		type = g_type_register_static(GNT_TYPE_MENU_ITEM,
 									  "GntMenuItemCheck",
 									  &info, 0);
 	}
@@ -49,8 +49,8 @@
 
 GntMenuItem *gnt_menuitem_check_new(const char *text)
 {
-	GntMenuItem *item = g_object_new(GNT_TYPE_MENUITEM_CHECK, NULL);
-	GntMenuItem *menuitem = GNT_MENUITEM(item);
+	GntMenuItem *item = g_object_new(GNT_TYPE_MENU_ITEM_CHECK, NULL);
+	GntMenuItem *menuitem = GNT_MENU_ITEM(item);
 
 	menuitem->text = g_strdup(text);
 	return item;
--- a/finch/libgnt/gntmenuitemcheck.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gntmenuitemcheck.h	Tue Mar 27 03:08:31 2007 +0000
@@ -1,33 +1,33 @@
-#ifndef GNT_MENUITEM_CHECK_H
-#define GNT_MENUITEM_CHECK_H
+#ifndef GNT_MENU_ITEM_CHECK_H
+#define GNT_MENU_ITEM_CHECK_H
 
 #include "gnt.h"
 #include "gntcolors.h"
 #include "gntkeys.h"
 #include "gntmenuitem.h"
 
-#define GNT_TYPE_MENUITEM_CHECK				(gnt_menuitem_check_get_gtype())
-#define GNT_MENUITEM_CHECK(obj)				(G_TYPE_CHECK_INSTANCE_CAST((obj), GNT_TYPE_MENUITEM_CHECK, GntMenuItemCheck))
-#define GNT_MENUITEM_CHECK_CLASS(klass)		(G_TYPE_CHECK_CLASS_CAST((klass), GNT_TYPE_MENUITEM_CHECK, GntMenuItemCheckClass))
-#define GNT_IS_MENUITEM_CHECK(obj)			(G_TYPE_CHECK_INSTANCE_TYPE((obj), GNT_TYPE_MENUITEM_CHECK))
-#define GNT_IS_MENUITEM_CHECK_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE((klass), GNT_TYPE_MENUITEM_CHECK))
-#define GNT_MENUITEM_CHECK_GET_CLASS(obj)	(G_TYPE_INSTANCE_GET_CLASS((obj), GNT_TYPE_MENUITEM_CHECK, GntMenuItemCheckClass))
+#define GNT_TYPE_MENU_ITEM_CHECK				(gnt_menuitem_check_get_gtype())
+#define GNT_MENU_ITEM_CHECK(obj)				(G_TYPE_CHECK_INSTANCE_CAST((obj), GNT_TYPE_MENU_ITEM_CHECK, GntMenuItemCheck))
+#define GNT_MENU_ITEM_CHECK_CLASS(klass)		(G_TYPE_CHECK_CLASS_CAST((klass), GNT_TYPE_MENU_ITEM_CHECK, GntMenuItemCheckClass))
+#define GNT_IS_MENU_ITEM_CHECK(obj)			(G_TYPE_CHECK_INSTANCE_TYPE((obj), GNT_TYPE_MENU_ITEM_CHECK))
+#define GNT_IS_MENU_ITEM_CHECK_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE((klass), GNT_TYPE_MENU_ITEM_CHECK))
+#define GNT_MENU_ITEM_CHECK_GET_CLASS(obj)	(G_TYPE_INSTANCE_GET_CLASS((obj), GNT_TYPE_MENU_ITEM_CHECK, GntMenuItemCheckClass))
 
-#define GNT_MENUITEM_CHECK_FLAGS(obj)				(GNT_MENUITEM_CHECK(obj)->priv.flags)
-#define GNT_MENUITEM_CHECK_SET_FLAGS(obj, flags)		(GNT_MENUITEM_CHECK_FLAGS(obj) |= flags)
-#define GNT_MENUITEM_CHECK_UNSET_FLAGS(obj, flags)	(GNT_MENUITEM_CHECK_FLAGS(obj) &= ~(flags))
+#define GNT_MENU_ITEM_CHECK_FLAGS(obj)				(GNT_MENU_ITEM_CHECK(obj)->priv.flags)
+#define GNT_MENU_ITEM_CHECK_SET_FLAGS(obj, flags)		(GNT_MENU_ITEM_CHECK_FLAGS(obj) |= flags)
+#define GNT_MENU_ITEM_CHECK_UNSET_FLAGS(obj, flags)	(GNT_MENU_ITEM_CHECK_FLAGS(obj) &= ~(flags))
 
-typedef struct _GnMenuItemCheck			GntMenuItemCheck;
-typedef struct _GnMenuItemCheckPriv		GntMenuItemCheckPriv;
-typedef struct _GnMenuItemCheckClass		GntMenuItemCheckClass;
+typedef struct _GntMenuItemCheck			GntMenuItemCheck;
+typedef struct _GntMenuItemCheckPriv		GntMenuItemCheckPriv;
+typedef struct _GntMenuItemCheckClass		GntMenuItemCheckClass;
 
-struct _GnMenuItemCheck
+struct _GntMenuItemCheck
 {
 	GntMenuItem parent;
 	gboolean checked;
 };
 
-struct _GnMenuItemCheckClass
+struct _GntMenuItemCheckClass
 {
 	GntMenuItemClass parent;
 
@@ -49,4 +49,4 @@
 
 G_END_DECLS
 
-#endif /* GNT_MENUITEM_CHECK_H */
+#endif /* GNT_MENU_ITEM_CHECK_H */
--- a/finch/libgnt/gnttextview.c	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gnttextview.c	Tue Mar 27 03:08:31 2007 +0000
@@ -44,6 +44,7 @@
 	GList *lines;
 	int rows, scrcol;
 
+	wbkgd(widget->window, COLOR_PAIR(GNT_COLOR_NORMAL));
 	werase(widget->window);
 
 	for (i = 0, lines = view->list; i < widget->priv.height && lines; i++, lines = lines->next)
@@ -434,7 +435,7 @@
 
 GntWidget *gnt_text_view_new()
 {
-	GntWidget *widget = g_object_new(GNT_TYPE_TEXTVIEW, NULL);
+	GntWidget *widget = g_object_new(GNT_TYPE_TEXT_VIEW, NULL);
 	GntTextView *view = GNT_TEXT_VIEW(widget);
 	GntTextLine *line = g_new0(GntTextLine, 1);
 
--- a/finch/libgnt/gnttextview.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gnttextview.h	Tue Mar 27 03:08:31 2007 +0000
@@ -6,22 +6,22 @@
 #include "gntcolors.h"
 #include "gntkeys.h"
 
-#define GNT_TYPE_TEXTVIEW				(gnt_text_view_get_gtype())
-#define GNT_TEXT_VIEW(obj)				(G_TYPE_CHECK_INSTANCE_CAST((obj), GNT_TYPE_TEXTVIEW, GntTextView))
-#define GNT_TEXT_VIEW_CLASS(klass)		(G_TYPE_CHECK_CLASS_CAST((klass), GNT_TYPE_TEXTVIEW, GntTextViewClass))
-#define GNT_IS_TEXTVIEW(obj)			(G_TYPE_CHECK_INSTANCE_TYPE((obj), GNT_TYPE_TEXTVIEW))
-#define GNT_IS_TEXTVIEW_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE((klass), GNT_TYPE_TEXTVIEW))
-#define GNT_TEXT_VIEW_GET_CLASS(obj)	(G_TYPE_INSTANCE_GET_CLASS((obj), GNT_TYPE_TEXTVIEW, GntTextViewClass))
+#define GNT_TYPE_TEXT_VIEW				(gnt_text_view_get_gtype())
+#define GNT_TEXT_VIEW(obj)				(G_TYPE_CHECK_INSTANCE_CAST((obj), GNT_TYPE_TEXT_VIEW, GntTextView))
+#define GNT_TEXT_VIEW_CLASS(klass)		(G_TYPE_CHECK_CLASS_CAST((klass), GNT_TYPE_TEXT_VIEW, GntTextViewClass))
+#define GNT_IS_TEXT_VIEW(obj)			(G_TYPE_CHECK_INSTANCE_TYPE((obj), GNT_TYPE_TEXT_VIEW))
+#define GNT_IS_TEXT_VIEW_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE((klass), GNT_TYPE_TEXT_VIEW))
+#define GNT_TEXT_VIEW_GET_CLASS(obj)	(G_TYPE_INSTANCE_GET_CLASS((obj), GNT_TYPE_TEXT_VIEW, GntTextViewClass))
 
 #define GNT_TEXT_VIEW_FLAGS(obj)				(GNT_TEXT_VIEW(obj)->priv.flags)
 #define GNT_TEXT_VIEW_SET_FLAGS(obj, flags)		(GNT_TEXT_VIEW_FLAGS(obj) |= flags)
 #define GNT_TEXT_VIEW_UNSET_FLAGS(obj, flags)	(GNT_TEXT_VIEW_FLAGS(obj) &= ~(flags))
 
-typedef struct _GnTextView			GntTextView;
-typedef struct _GnTextViewPriv		GntTextViewPriv;
-typedef struct _GnTextViewClass		GntTextViewClass;
+typedef struct _GntTextView			GntTextView;
+typedef struct _GntTextViewPriv		GntTextViewPriv;
+typedef struct _GntTextViewClass		GntTextViewClass;
 
-struct _GnTextView
+struct _GntTextView
 {
 	GntWidget parent;
 
@@ -41,7 +41,7 @@
 	GNT_TEXT_FLAG_HIGHLIGHT   = 1 << 4,
 } GntTextFormatFlags;
 
-struct _GnTextViewClass
+struct _GntTextViewClass
 {
 	GntWidgetClass parent;
 
--- a/finch/libgnt/gnttree.c	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gnttree.c	Tue Mar 27 03:08:31 2007 +0000
@@ -20,7 +20,7 @@
 
 /* XXX: Make this one into a GObject?
  * 		 ... Probably not */
-struct _GnTreeRow
+struct _GntTreeRow
 {
 	void *key;
 	void *data;		/* XXX: unused */
@@ -40,7 +40,7 @@
 	GntTree *tree;
 };
 
-struct _GnTreeCol
+struct _GntTreeCol
 {
 	char *text;
 	int span;       /* How many columns does it span? */
--- a/finch/libgnt/gnttree.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gnttree.h	Tue Mar 27 03:08:31 2007 +0000
@@ -18,14 +18,14 @@
 #define GNT_TREE_SET_FLAGS(obj, flags)		(GNT_TREE_FLAGS(obj) |= flags)
 #define GNT_TREE_UNSET_FLAGS(obj, flags)	(GNT_TREE_FLAGS(obj) &= ~(flags))
 
-typedef struct _GnTree			GntTree;
-typedef struct _GnTreePriv		GntTreePriv;
-typedef struct _GnTreeClass		GntTreeClass;
+typedef struct _GntTree			GntTree;
+typedef struct _GntTreePriv		GntTreePriv;
+typedef struct _GntTreeClass		GntTreeClass;
 
-typedef struct _GnTreeRow		GntTreeRow;
-typedef struct _GnTreeCol		GntTreeCol;
+typedef struct _GntTreeRow		GntTreeRow;
+typedef struct _GntTreeCol		GntTreeCol;
 
-struct _GnTree
+struct _GntTree
 {
 	GntWidget parent;
 
@@ -58,7 +58,7 @@
 	GCompareFunc compare;
 };
 
-struct _GnTreeClass
+struct _GntTreeClass
 {
 	GntWidgetClass parent;
 
--- a/finch/libgnt/gntwidget.c	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gntwidget.c	Tue Mar 27 03:08:31 2007 +0000
@@ -521,7 +521,7 @@
 
 		widget->priv.width = width;
 		widget->priv.height = height;
-		if (width >= getmaxx(widget->window) || height >= getmaxy(widget->window)) {
+		if (width + shadow >= getmaxx(widget->window) || height + shadow >= getmaxy(widget->window)) {
 			delwin(widget->window);
 			widget->window = newpad(height + 20, width + 20);
 		}
--- a/finch/libgnt/gntwidget.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gntwidget.h	Tue Mar 27 03:08:31 2007 +0000
@@ -19,11 +19,11 @@
 #define GNT_WIDGET_UNSET_FLAGS(obj, flags)	(GNT_WIDGET_FLAGS(obj) &= ~(flags))
 #define GNT_WIDGET_IS_FLAG_SET(obj, flags)	(GNT_WIDGET_FLAGS(obj) & (flags))
 
-typedef struct _GnWidget			GntWidget;
-typedef struct _GnWidgetPriv		GntWidgetPriv;
-typedef struct _GnWidgetClass		GntWidgetClass;
+typedef struct _GntWidget			GntWidget;
+typedef struct _GntWidgetPriv		GntWidgetPriv;
+typedef struct _GntWidgetClass		GntWidgetClass;
 
-typedef enum _GnWidgetFlags
+typedef enum _GntWidgetFlags
 {
 	GNT_WIDGET_DESTROYING     = 1 << 0,
 	GNT_WIDGET_CAN_TAKE_FOCUS = 1 << 1,
@@ -42,7 +42,7 @@
 } GntWidgetFlags;
 
 /* XXX: This will probably move elsewhere */
-typedef enum _GnMouseEvent
+typedef enum _GntMouseEvent
 {
 	GNT_LEFT_MOUSE_DOWN = 1,
 	GNT_RIGHT_MOUSE_DOWN,
@@ -53,12 +53,12 @@
 } GntMouseEvent;
 
 /* XXX: I'll have to ask grim what he's using this for in guifications. */
-typedef enum _GnParamFlags
+typedef enum _GntParamFlags
 {
 	GNT_PARAM_SERIALIZABLE	= 1 << G_PARAM_USER_SHIFT
 } GntParamFlags;
 
-struct _GnWidgetPriv
+struct _GntWidgetPriv
 {
 	int x, y;
 	int width, height;
@@ -68,7 +68,7 @@
 	int minw, minh;    /* Minimum size for the widget */
 };
 
-struct _GnWidget
+struct _GntWidget
 {
 	GntBindable inherit;
 
@@ -83,7 +83,7 @@
     void (*gnt_reserved4)(void);
 };
 
-struct _GnWidgetClass
+struct _GntWidgetClass
 {
 	GntBindableClass parent;
 
--- a/finch/libgnt/gntwindow.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gntwindow.h	Tue Mar 27 03:08:31 2007 +0000
@@ -18,17 +18,17 @@
 #define GNT_WINDOW_SET_FLAGS(obj, flags)		(GNT_WINDOW_FLAGS(obj) |= flags)
 #define GNT_WINDOW_UNSET_FLAGS(obj, flags)	(GNT_WINDOW_FLAGS(obj) &= ~(flags))
 
-typedef struct _GnWindow			GntWindow;
-typedef struct _GnWindowPriv		GntWindowPriv;
-typedef struct _GnWindowClass		GntWindowClass;
+typedef struct _GntWindow			GntWindow;
+typedef struct _GntWindowPriv		GntWindowPriv;
+typedef struct _GntWindowClass		GntWindowClass;
 
-struct _GnWindow
+struct _GntWindow
 {
 	GntBox parent;
 	GntMenu *menu;
 };
 
-struct _GnWindowClass
+struct _GntWindowClass
 {
 	GntBoxClass parent;
 
--- a/finch/libgnt/gntwm.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/gntwm.h	Tue Mar 27 03:08:31 2007 +0000
@@ -27,9 +27,9 @@
 	PANEL *panel;
 } GntNode;
 
-typedef struct _GntWM GntWM;
+typedef struct _GnttWM GntWM;
 
-typedef struct _GnPosition
+typedef struct _GntPosition
 {
 	int x;
 	int y;
@@ -38,13 +38,13 @@
 /**
  * An application can register actions which will show up in a 'start-menu' like popup
  */
-typedef struct _GnAction
+typedef struct _GntAction
 {
 	const char *label;
 	void (*callback)();
 } GntAction;
 
-struct _GntWM
+struct _GnttWM
 {
 	GntBindable inherit;
 
@@ -89,9 +89,9 @@
 	void *res4;
 };
 
-typedef struct _GnWMClass GntWMClass;
+typedef struct _GntWMClass GntWMClass;
 
-struct _GnWMClass
+struct _GntWMClass
 {
 	GntBindableClass parent;
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/finch/libgnt/pygnt/Files.txt	Tue Mar 27 03:08:31 2007 +0000
@@ -0,0 +1,6 @@
+gendef.sh
+gnt.override
+Makefile
+test.py
+dbus-gnt
+gntmodule.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/finch/libgnt/pygnt/Makefile.make	Tue Mar 27 03:08:31 2007 +0000
@@ -0,0 +1,14 @@
+CC = gcc
+CFLAGS = `pkg-config --cflags gtk+-2.0 pygtk-2.0` -I/usr/include/python2.4/ -I.. -g -O0
+LDFLAGS = `pkg-config --libs gtk+-2.0 pygtk-2.0 gnt`
+ 
+gnt.so: gnt.o gntmodule.o
+	$(CC) $(LDFLAGS) -shared $^ -o $@
+
+gnt.c: gnt.def gnt.override
+	pygtk-codegen-2.0 --prefix gnt \
+	--override gnt.override \
+	gnt.def > $@
+
+clean:
+	@rm *.so *.o gnt.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/finch/libgnt/pygnt/README.txt	Tue Mar 27 03:08:31 2007 +0000
@@ -0,0 +1,4 @@
+Run these in sequence:
+
+./gendef.sh
+make -f Makefile.make gnt.so
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/finch/libgnt/pygnt/dbus-gnt	Tue Mar 27 03:08:31 2007 +0000
@@ -0,0 +1,103 @@
+#!/usr/bin/env python
+
+# This script requires Python 2.4 and pygnt bindings
+#
+# Note that all function names are resolved dynamically, no
+# purple-specific library is needed.
+
+import dbus
+import dbus.glib
+import dbus.decorators
+import gobject
+import os
+import gnt
+
+from time import strftime
+
+convwins = {}
+
+def buddysignedon():
+    pass
+
+def conv_closed(conv):
+    key = get_dict_key(conv)
+    stuff = convwins[key]
+    stuff[0].destroy()
+    convwins[key] = None
+
+def wrote_msg(account, who, msg, conv, flags):
+    stuff = show_conversation(conv)
+    tv = stuff[1]
+    tv.append_text_with_flags("\n", 0)
+    tv.append_text_with_flags(strftime("(%X) "), 8)
+    tv.append_text_with_flags(who + ": ", 1)
+    tv.append_text_with_flags(msg, 0)
+    tv.scroll(0)
+
+gnt.gnt_init()
+
+bus = dbus.SessionBus()
+obj = bus.get_object("net.sf.purple.PurpleService", "/net/sf/purple/PurpleObject")
+purple = dbus.Interface(obj, "net.sf.purple.PurpleInterface")
+
+bus.add_signal_receiver(buddysignedon,
+                        dbus_interface = "net.sf.purple.PurpleInterface",
+                        signal_name = "BuddySignedOn")
+
+bus.add_signal_receiver(wrote_msg,
+                        dbus_interface = "net.sf.purple.PurpleInterface",
+                        signal_name = "WroteImMsg")
+
+bus.add_signal_receiver(wrote_msg,
+                        dbus_interface = "net.sf.purple.PurpleInterface",
+                        signal_name = "WroteChatMsg")
+
+bus.add_signal_receiver(conv_closed,
+                        dbus_interface = "net.sf.purple.PurpleInterface",
+                        signal_name = "DeletingConversation")
+
+def get_dict_key(conv):
+    val = purple.PurpleConversationGetName(conv)
+    return val
+
+def send_im_cb(entry, key, conv):
+    if key[0] == '\r':
+        # XXX: do something about the / commands
+        type = purple.PurpleConversationGetType(conv)
+        if type == 1:
+            imdata = purple.PurpleConversationGetImData(conv)
+            purple.PurpleConvImSend(imdata, entry.get_text())
+        else:
+            chatdata = purple.PurpleConversationGetChatData(conv)
+            purple.PurpleConvChatSend(chatdata, entry.get_text())
+        entry.clear()
+
+def show_conversation(conv):
+    key = get_dict_key(conv)
+    if key in convwins:
+        return convwins[key]
+    win = gnt.Window()
+    vbox = gnt.Box(0, 1)
+    win.add_widget(vbox)
+    win.set_title(purple.PurpleConversationGetName(conv))
+    win.set_pad(0)
+    vbox.set_pad(0)
+    tv = gnt.TextView()
+    entry = gnt.Entry("")
+    vbox.add_widget(tv)
+    entry.set_size(40, 1)
+    vbox.add_widget(entry)
+    entry.connect("key_pressed", send_im_cb, conv)
+    tv.clear()
+    win.show()
+    convwins[key] = [win, tv, entry]
+    return convwins[key]
+
+convs = purple.PurpleGetConversations()
+for conv in convs:
+    show_conversation(conv)
+
+gnt.gnt_main()
+
+gnt.gnt_quit()
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/finch/libgnt/pygnt/gendef.sh	Tue Mar 27 03:08:31 2007 +0000
@@ -0,0 +1,51 @@
+#!/bin/sh
+FILES="
+	gntwidget.h
+	gntbindable.h
+	gntbox.h
+	gntbutton.h
+	gntcheckbox.h
+	gntclipboard.h
+	gntcolors.h
+	gntcombobox.h
+	gntentry.h
+	gntfilesel.h
+	gntkeys.h
+	gntlabel.h
+	gntline.h
+	gntmarshal.h
+	gntmenu.h
+	gntmenuitem.h
+	gntmenuitemcheck.h
+	gntstyle.h
+	gnttextview.h
+	gnttree.h
+	gntutils.h
+	gntwindow.h
+	gntwm.h
+	gnt.h"
+
+# Generate the def file
+rm gnt.def
+for file in $FILES
+do
+	python /usr/share/pygtk/2.0/codegen/h2def.py ../$file >> gnt.def
+done
+
+# Remove the definitions about the enums
+ENUMS="
+GNT_TYPE_ALIGNMENT
+GNT_TYPE_COLOR_TYPE
+GNT_TYPE_MENU_TYPE
+GNT_TYPE_STYLE
+GNT_TYPE_KEY_PRESS_MODE
+GNT_TYPE_ENTRY_FLAG
+GNT_TYPE_TEXT_FORMAT_FLAGS
+"
+
+for enum in $ENUMS
+do
+	sed -ie s/^.*gtype-id\ \"$enum\".*$//g gnt.def
+done
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/finch/libgnt/pygnt/gnt.override	Tue Mar 27 03:08:31 2007 +0000
@@ -0,0 +1,34 @@
+%%
+headers
+#include <Python.h>
+#include "pygobject.h"
+#include "gnt.h"
+#include "gntbindable.h"
+#include "gntwidget.h"
+#include "gntbox.h"
+#include "gntbutton.h"
+#include "gntcheckbox.h"
+#include "gntcolors.h"
+#include "gntcombobox.h"
+#include "gntentry.h"
+#include "gntfilesel.h"
+#include "gntkeys.h"
+#include "gntlabel.h"
+#include "gntline.h"
+#include "gntmenu.h"
+#include "gntmenuitem.h"
+#include "gntmenuitemcheck.h"
+#include "gntstyle.h"
+#include "gnttextview.h"
+#include "gnttree.h"
+#include "gntutils.h"
+#include "gntwindow.h"
+#include "gntwm.h"
+%%
+modulename gnt
+%%
+import gobject.GObject as PyGObject_Type
+%%
+ignore-glob
+	*_get_gtype
+%%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/finch/libgnt/pygnt/gntmodule.c	Tue Mar 27 03:08:31 2007 +0000
@@ -0,0 +1,22 @@
+#include <pygobject.h>
+ 
+void gnt_register_classes (PyObject *d); 
+extern PyMethodDef gnt_functions[];
+ 
+DL_EXPORT(void)
+initgnt(void)
+{
+    PyObject *m, *d;
+ 
+    init_pygobject ();
+ 
+    m = Py_InitModule ("gnt", gnt_functions);
+    d = PyModule_GetDict (m);
+ 
+    gnt_register_classes (d);
+ 
+    if (PyErr_Occurred ()) {
+        Py_FatalError ("can't initialise module sad");
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/finch/libgnt/pygnt/test.py	Tue Mar 27 03:08:31 2007 +0000
@@ -0,0 +1,26 @@
+#!/usr/bin/python
+import gnt
+
+def button_activate(button, entry):
+	entry.set_text("clicked!!!")
+
+gnt.gnt_init()
+
+win = gnt.Window()
+
+entry = gnt.Entry("")
+
+win.add_widget(entry)
+win.set_title("Entry")
+
+button = gnt.Button("Click!")
+win.add_widget(button)
+
+button.connect("activate", button_activate, entry)
+
+win.show()
+
+gnt.gnt_main()
+
+gnt.gnt_quit()
+
--- a/finch/libgnt/test/file.c	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/test/file.c	Tue Mar 27 03:08:31 2007 +0000
@@ -9,6 +9,7 @@
 	GntWidget *w = gnt_file_sel_new();
 	gnt_file_sel_set_current_location(GNT_FILE_SEL(w), "/home/");
 	gnt_file_sel_set_dirs_only(GNT_FILE_SEL(w), TRUE);
+	gnt_file_sel_set_multi_select(GNT_FILE_SEL(w), TRUE);
 	gnt_widget_show(w);
 
 	gnt_main();
--- a/finch/libgnt/test/menu.c	Tue Mar 27 03:07:14 2007 +0000
+++ b/finch/libgnt/test/menu.c	Tue Mar 27 03:08:31 2007 +0000
@@ -22,29 +22,29 @@
 	GntWidget *menu = gnt_menu_new(GNT_MENU_TOPLEVEL);
 	GObject *item = gnt_menuitem_new("File");
 
-	gnt_menu_add_item(GNT_MENU(menu), GNT_MENUITEM(item));
+	gnt_menu_add_item(GNT_MENU(menu), GNT_MENU_ITEM(item));
 
 	item = gnt_menuitem_new("Edit");
-	gnt_menu_add_item(GNT_MENU(menu), GNT_MENUITEM(item));
+	gnt_menu_add_item(GNT_MENU(menu), GNT_MENU_ITEM(item));
 
 	item = gnt_menuitem_new("Help");
-	gnt_menu_add_item(GNT_MENU(menu), GNT_MENUITEM(item));
+	gnt_menu_add_item(GNT_MENU(menu), GNT_MENU_ITEM(item));
 
 	GntWidget *sub = gnt_menu_new(GNT_MENU_POPUP);
-	gnt_menuitem_set_submenu(GNT_MENUITEM(item), GNT_MENU(sub));
+	gnt_menuitem_set_submenu(GNT_MENU_ITEM(item), GNT_MENU(sub));
 
 	item = gnt_menuitem_new("Online Help");
-	gnt_menu_add_item(GNT_MENU(sub), GNT_MENUITEM(item));
+	gnt_menu_add_item(GNT_MENU(sub), GNT_MENU_ITEM(item));
 
 	item = gnt_menuitem_new("About");
-	gnt_menu_add_item(GNT_MENU(sub), GNT_MENUITEM(item));
+	gnt_menu_add_item(GNT_MENU(sub), GNT_MENU_ITEM(item));
 
 	sub = gnt_menu_new(GNT_MENU_POPUP);
-	gnt_menuitem_set_submenu(GNT_MENUITEM(item), GNT_MENU(sub));
+	gnt_menuitem_set_submenu(GNT_MENU_ITEM(item), GNT_MENU(sub));
 
 	item = gnt_menuitem_new("Online Help");
-	gnt_menu_add_item(GNT_MENU(sub), GNT_MENUITEM(item));
-	gnt_menuitem_set_callback(GNT_MENUITEM(item), dothis, NULL);
+	gnt_menu_add_item(GNT_MENU(sub), GNT_MENU_ITEM(item));
+	gnt_menuitem_set_callback(GNT_MENU_ITEM(item), dothis, NULL);
 
 	gnt_screen_menu_show(menu);
 
--- a/libpurple/account.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/libpurple/account.h	Tue Mar 27 03:08:31 2007 +0000
@@ -211,14 +211,14 @@
 /**
  * Close account requests registered for the given PurpleAccount
  *
- * @param handle	   The account for which requests should be closed
+ * @param account	   The account for which requests should be closed
  */
 void purple_account_request_close_with_account(PurpleAccount *account);
 
 /**
  * Close the account request for the given ui handle
  *
- * @param handle	   The ui specific handle for which requests should be closed
+ * @param ui_handle	   The ui specific handle for which requests should be closed
  */
 void purple_account_request_close(void *ui_handle);
 
@@ -281,7 +281,7 @@
  * Sets the account's buddy icon path.
  *
  * @param account The account.
- * @param info	  The buddy icon non-cached path.
+ * @param path	  The buddy icon non-cached path.
  */
 void purple_account_set_buddy_icon_path(PurpleAccount *account, const char *path);
 
--- a/libpurple/buddyicon.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/libpurple/buddyicon.h	Tue Mar 27 03:08:31 2007 +0000
@@ -182,8 +182,8 @@
  * Returns the buddy icon's path.
  *
  * @param icon The buddy icon.
- * 
- * @preturn The buddy icon's non-cached path.
+ *
+ * @return The buddy icon's non-cached path.
  */
 const gchar *purple_buddy_icon_get_path(PurpleBuddyIcon *icon);
 
--- a/libpurple/eventloop.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/libpurple/eventloop.h	Tue Mar 27 03:08:31 2007 +0000
@@ -138,7 +138,7 @@
  * implement the input_get_error UI op.
  *
  * @param fd        The input file descriptor.
- * @param errno		A pointer to an int which on return will have the error, or 0 if no error.
+ * @param error		A pointer to an int which on return will have the error, or 0 if no error.
  *
  * @return 0 if there is no error; -1 if there is an error, in which case errno will be set.
  */
--- a/libpurple/notify.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/libpurple/notify.h	Tue Mar 27 03:08:31 2007 +0000
@@ -581,7 +581,7 @@
  * Set the type of a PurpleNotifyUserInfoEntry
  *
  * @param user_info_entry     The PurpleNotifyUserInfoEntry
- * @param					  The PurpleNotifyUserInfoEntryType
+ * @param type				  The PurpleNotifyUserInfoEntryType
  */
 void purple_notify_user_info_entry_set_type(PurpleNotifyUserInfoEntry *user_info_entry,
 										  PurpleNotifyUserInfoEntryType type);
--- a/libpurple/protocols/bonjour/bonjour.c	Tue Mar 27 03:07:14 2007 +0000
+++ b/libpurple/protocols/bonjour/bonjour.c	Tue Mar 27 03:08:31 2007 +0000
@@ -460,7 +460,7 @@
 	else if (((fullname = getlogin()) != NULL) && (fullname[0] != '\0'))
 		;
 	else
-		fullname = _("John Noname"); 
+		fullname = _("Purple Person");
 	/* Make sure fullname is valid UTF-8.  If not, try to convert it. */
 	if (!g_utf8_validate(fullname, -1, NULL))
 	{
@@ -548,7 +548,8 @@
 	/* Try to figure out a good host name to use */
 	/* TODO: Avoid 'localhost,' if possible */
 	if (gethostname(hostname, 255) != 0) {
-		purple_debug_warning("bonjour", "Error %d when getting host name.  Using \"localhost.\"\n", errno);
+		purple_debug_warning("bonjour", "Error when getting host name: %s.  Using \"localhost.\"\n",
+				strerror(errno));
 		strcpy(hostname, "localhost");
 	}
 	default_hostname = g_strdup(hostname);
--- a/libpurple/protocols/bonjour/issues.txt	Tue Mar 27 03:07:14 2007 +0000
+++ b/libpurple/protocols/bonjour/issues.txt	Tue Mar 27 03:08:31 2007 +0000
@@ -2,17 +2,8 @@
 ============= Known issues ===============
 ==========================================
 
-(1) Messages are limited in length (5000 char) <-- FIXED
-(2) Messages formated by Gaim didn't work <-- FIXED
-(3) iChat sends the size in points, Gaim wants a 1..7 range <-- FIXED Gaim2iChat (iChat2Gaim left)
-(4) When the other end closes the socket without sending the end of stream, Gaim crashes and coredump <-- FIXED
-(5) I18n
-(6) Status changes don't work
-(7) When the conversation is closed in Gaim with the X button, we don't send the end of stream <-- FIXED
-(8) The server socket is not reusable, after an error, you cannot connect for a while <-- FIXED
-(9) Avatars
-(10) File transfers
-(11) Typing notifications
-(12) Gaim HTML syntax is not shown properly <-- FIXED
-(13) Strange messages creates coredump <-- FIXED
-(14) Check if it works on win32
+* Status changes don't work
+* Avatars
+* File transfers
+* Typing notifications
+* Check if it works on win32
--- a/libpurple/protocols/silc/README	Tue Mar 27 03:07:14 2007 +0000
+++ b/libpurple/protocols/silc/README	Tue Mar 27 03:08:31 2007 +0000
@@ -1,12 +1,12 @@
-SILC Gaim Plugin
-================
+SILC Purple Plugin
+==================
 
-This is Gaim protocol plugin of the protocol called Secure Internet Live 
-Conferencing (SILC).  The implementation will use the SILC Toolkit, 
+This is the Purple protocol plugin of the protocol called Secure Internet
+Live Conferencing (SILC).  The implementation will use the SILC Toolkit, 
 freely available from the http://silcnet.org/ site, for the actual SILC 
 protocol implementation.
 
-To include the SILC into Gaim, one needs to first compile and install 
+To include SILC into Purple, one needs to first compile and install 
 the SILC Toolkit.  It is done as follows:
 
 	./configure --enable-shared
@@ -17,7 +17,7 @@
 is not given to ./configure, the binaries are installed into the 
 /usr/local/silc directory.
 
-Once the Toolkit is installed one needs to tell for the Gaim ./configure
+Once the Toolkit is installed one needs to tell Purple's ./configure
 script where the SILC Toolkit is located.  It is done as simply as:
 
 	./configure
@@ -27,5 +27,5 @@
 	./configure --with-silc-libs=/path/to/silc/lib
 		    --with-silc-includes=/path/to/silc/include
 
-If the Toolkit cannot be located the SILC will not be compiled into the 
-Gaim.
+If the SILC Toolkit cannot be found then the SILC protocol plugin will
+not be compiled.
--- a/libpurple/protocols/silc/TODO	Tue Mar 27 03:07:14 2007 +0000
+++ b/libpurple/protocols/silc/TODO	Tue Mar 27 03:08:31 2007 +0000
@@ -2,7 +2,7 @@
 =====================
 
 Sending images
-	- Sending images to channel too, if Gaim allows it.
+	- Sending images to channel too, if libpurple allows it.
 
 Preferences
 	- Add joined channels to buddy list automatically (during
--- a/libpurple/savedstatuses.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/libpurple/savedstatuses.h	Tue Mar 27 03:08:31 2007 +0000
@@ -213,9 +213,9 @@
 /**
  * Set whether accounts in Purple are idle-away or not.
  *
- * @param TRUE if accounts should be switched to use the
- *        idle-away saved status.  FALSE if they should
- *        be switched to use the default status.
+ * @param idleaway TRUE if accounts should be switched to use the
+ *                 idle-away saved status.  FALSE if they should
+ *                 be switched to use the default status.
  */
 void purple_savedstatus_set_idleaway(gboolean idleaway);
 
--- a/libpurple/server.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/libpurple/server.h	Tue Mar 27 03:08:31 2007 +0000
@@ -38,7 +38,7 @@
  *
  * TODO: Could probably move this into the conversation API.
  *
- * @param typing One of PURPLE_TYPING, PURPLE_TYPED, or PURPLE_NOT_TYPING.
+ * @param state One of PURPLE_TYPING, PURPLE_TYPED, or PURPLE_NOT_TYPING.
  * @return A quiet-period, specified in seconds, where Purple will not
  *         send any additional typing notification messages.  Most
  *         protocols should return 0, which means that no additional
@@ -94,13 +94,13 @@
  * @param data The hash function should be g_str_hash() and the equal
  *             function should be g_str_equal().
  */
-void serv_join_chat(PurpleConnection *, GHashTable *);
+void serv_join_chat(PurpleConnection *, GHashTable *data);
 
 /**
  * @param data The hash function should be g_str_hash() and the equal
  *             function should be g_str_equal().
  */
-void serv_reject_chat(PurpleConnection *, GHashTable *);
+void serv_reject_chat(PurpleConnection *, GHashTable *data);
 
 /**
  * @param data The hash function should be g_str_hash() and the equal
--- a/libpurple/win32/libpurplerc.rc.in	Tue Mar 27 03:07:14 2007 +0000
+++ b/libpurple/win32/libpurplerc.rc.in	Tue Mar 27 03:08:31 2007 +0000
@@ -16,12 +16,12 @@
       BEGIN
         VALUE "CompanyName", "The Pidgin developer community"
         VALUE "FileDescription", "LibPurple Library"
-        VALUE "FileVersion", "@PIDGIN_VERSION@"
+        VALUE "FileVersion", "@PURPLE_VERSION@"
         VALUE "InternalName", "libpurple"
         VALUE "LegalCopyright", "Copyright (C) 1998-2007 The Pidgin developer community (See the COPYRIGHT file in the source distribution)."
         VALUE "OriginalFilename", "libpurple.dll"
         VALUE "ProductName", "LibPurple"
-        VALUE "ProductVersion", "@PIDGIN_VERSION@"
+        VALUE "ProductVersion", "@PURPLE_VERSION@"
       END
     END
     BLOCK "VarFileInfo"
--- a/pidgin.spec.in	Tue Mar 27 03:07:14 2007 +0000
+++ b/pidgin.spec.in	Tue Mar 27 03:08:31 2007 +0000
@@ -270,7 +270,7 @@
 if [ "$1" -gt 1 -a -n "`which gconftool-2 2>/dev/null`" ]; then
     export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source`
     gconftool-2 --makefile-uninstall-rule \
-        %{_sysconfdir}/gconf/schemas/gaim.schemas >/dev/null || :
+        %{_sysconfdir}/gconf/schemas/purple.schemas >/dev/null || :
     killall -HUP gconfd-2 || :
 fi
 
@@ -278,7 +278,7 @@
 if [ -n "`which gconftool-2 2>/dev/null`" ]; then
     export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source`
     gconftool-2 --makefile-install-rule \
-        %{_sysconfdir}/gconf/schemas/gaim.schemas > /dev/null || :
+        %{_sysconfdir}/gconf/schemas/purple.schemas > /dev/null || :
     killall -HUP gconfd-2 || :
 fi
 /sbin/ldconfig
@@ -287,7 +287,7 @@
 if [ "$1" -eq 0 -a -n "`which gconftool-2 2>/dev/null`" ]; then
     export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source`
     gconftool-2 --makefile-uninstall-rule \
-      %{_sysconfdir}/gconf/schemas/gaim.schemas > /dev/null || :
+      %{_sysconfdir}/gconf/schemas/purple.schemas > /dev/null || :
     killall -HUP gconfd-2 || :
 fi
 
@@ -319,7 +319,7 @@
 %{_datadir}/sounds/pidgin/*
 %{_datadir}/applications/*
 %{_libdir}/libpurple.so.*
-%{_sysconfdir}/gconf/schemas/gaim.schemas
+%{_sysconfdir}/gconf/schemas/purple.schemas
 
 %if 0%{?_with_dbus:1}
 %{_bindir}/purple-client-example
--- a/pidgin/gtkaccount.c	Tue Mar 27 03:07:14 2007 +0000
+++ b/pidgin/gtkaccount.c	Tue Mar 27 03:08:31 2007 +0000
@@ -231,7 +231,7 @@
 		/* Show a placeholder icon */
 		gchar *filename;
 		filename = g_build_filename(DATADIR, "pixmaps",
-				"purple", "insert-image.png", NULL);
+				"pidgin", "insert-image.png", NULL);
 		pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
 		g_free(filename);
 	}
@@ -629,7 +629,7 @@
 		set_dialog_icon(dialog,
 				g_strdup(purple_account_get_ui_string(dialog->account,
 						PIDGIN_UI, "non-global-buddyicon-cached-path", NULL)),
-				g_strdup(purple_account_get_ui_string(dialog->account, 
+				g_strdup(purple_account_get_ui_string(dialog->account,
 						PIDGIN_UI, "non-global-buddyicon-path", NULL)));
 	} else {
 		set_dialog_icon(dialog, NULL, NULL);
@@ -2142,12 +2142,12 @@
 	/* Translators: Please maintain the use of -> or <- to represent the menu heirarchy */
 	pretty = pidgin_make_pretty_arrows(_(
 						 "<span size='larger' weight='bold'>Welcome to " PIDGIN_NAME "!</span>\n\n"
-						 
+
 						 "You have no IM accounts configured. To start connecting with " PIDGIN_NAME " "
 						 "press the <b>Add</b> button below and configure your first "
 						 "account. If you want " PIDGIN_NAME " to connect to multiple IM accounts, "
 						 "press <b>Add</b> again to configure them all.\n\n"
-						 
+
 						 "You can come back to this window to add, edit, or remove "
 						 "accounts from <b>Accounts->Add/Edit</b> in the Buddy "
 						 "List window"));
@@ -2439,7 +2439,7 @@
 
 	buffer = make_info(account, gc, remote_user, id, alias, msg);
 	alert = pidgin_make_mini_dialog(gc, PIDGIN_STOCK_DIALOG_QUESTION,
-					  _("Add buddy to your list?"), buffer, data, 
+					  _("Add buddy to your list?"), buffer, data,
 					  _("Add"), G_CALLBACK(add_user_cb),
 					  _("Cancel"), G_CALLBACK(free_add_user_data), NULL);
 	pidgin_blist_add_alert(alert);
@@ -2515,27 +2515,27 @@
 		aa->account = account;
 		alert = pidgin_make_mini_dialog(gc, PIDGIN_STOCK_DIALOG_QUESTION,
 						  _("Authorize buddy?"), buffer, aa,
-						  _("Authorize"), authorize_and_add_cb, 
-						  _("Deny"), deny_no_add_cb, 
+						  _("Authorize"), authorize_and_add_cb,
+						  _("Deny"), deny_no_add_cb,
 						  NULL);
 	} else {
 		alert = pidgin_make_mini_dialog(gc, PIDGIN_STOCK_DIALOG_QUESTION,
 						  _("Authorize buddy?"), buffer, user_data,
-						  _("Authorize"), auth_cb, 
-						  _("Deny"), deny_cb, 
+						  _("Authorize"), auth_cb,
+						  _("Deny"), deny_cb,
 						  NULL);
 	}
 	pidgin_blist_add_alert(alert);
 
 	g_free(buffer);
-	
+
 	return NULL;
 }
 
 static void
 pidgin_accounts_request_close(void *ui_handle)
 {
-	
+
 }
 
 static PurpleAccountUiOps ui_ops =
--- a/pidgin/gtkstatusbox.c	Tue Mar 27 03:07:14 2007 +0000
+++ b/pidgin/gtkstatusbox.c	Tue Mar 27 03:08:31 2007 +0000
@@ -279,7 +279,7 @@
 		if (!g_ascii_strncasecmp(name, "file://", 7)) {
 			GError *converr = NULL;
 			gchar *tmp, *rtmp;
-		
+
 			if(!(tmp = g_filename_from_uri(name, NULL, &converr))) {
 				purple_debug(PURPLE_DEBUG_ERROR, "buddyicon", "%s\n",
 					   (converr ? converr->message :
@@ -559,7 +559,7 @@
 	PurpleAccount *acct = (status_box->token_status_account) ? status_box->token_status_account : status_box->account;
 
 	icon_size = gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL);
-	
+
 	style = gtk_widget_get_style(GTK_WIDGET(status_box));
 	snprintf(aa_color, sizeof(aa_color), "#%02x%02x%02x",
 		 style->text_aa[GTK_STATE_NORMAL].red >> 8,
@@ -584,7 +584,7 @@
 		if (!gtk_tree_model_get_iter (GTK_TREE_MODEL(status_box->dropdown_store), &iter, path))
 			return;
 		gtk_tree_path_free(path);
-		
+
 		gtk_tree_model_get(GTK_TREE_MODEL(status_box->dropdown_store), &iter,
 						   TYPE_COLUMN, &type,
 						   DATA_COLUMN, &data,
@@ -688,7 +688,7 @@
 			}
 		}
 #endif
-		
+
 	}
 
 	if (status_box->account != NULL) {
@@ -824,7 +824,7 @@
 						break;
 					}
 					g_free(name);
-				
+
 				} else if ((type == PIDGIN_STATUS_BOX_TYPE_POPULAR) &&
 						(GPOINTER_TO_INT(data) == purple_savedstatus_get_creation_time(saved_status)))
 				{
@@ -1186,7 +1186,7 @@
 cache_pixbufs(PidginStatusBox *status_box)
 {
 	GtkIconSize icon_size;
-	
+
 	g_object_set(G_OBJECT(status_box->icon_rend), "xpad", 3, NULL);
 	icon_size = gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL);
 
@@ -1311,14 +1311,14 @@
 #endif
   GtkRequisition popup_req;
   GtkPolicyType hpolicy, vpolicy;
-  
+
   gdk_window_get_origin (GTK_WIDGET(status_box)->window, x, y);
 
   *x += GTK_WIDGET(status_box)->allocation.x;
   *y += GTK_WIDGET(status_box)->allocation.y;
- 
+
   *width = GTK_WIDGET(status_box)->allocation.width;
-  
+
   hpolicy = vpolicy = GTK_POLICY_NEVER;
   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (status_box->scrolled_window),
 				  hpolicy, vpolicy);
@@ -1336,7 +1336,7 @@
 
 #if GTK_CHECK_VERSION(2,2,0)
   screen = gtk_widget_get_screen (GTK_WIDGET (status_box));
-  monitor_num = gdk_screen_get_monitor_at_window (screen, 
+  monitor_num = gdk_screen_get_monitor_at_window (screen,
 						  GTK_WIDGET (status_box)->window);
   gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
 
@@ -1344,7 +1344,7 @@
     *x = monitor.x;
   else if (*x + *width > monitor.x + monitor.width)
     *x = monitor.x + monitor.width - *width;
-  
+
   if (*y + GTK_WIDGET(status_box)->allocation.height + *height <= monitor.y + monitor.height)
 	  *y += GTK_WIDGET(status_box)->allocation.height;
   else if (*y - *height >= monitor.y)
@@ -1354,7 +1354,7 @@
 	    *y += GTK_WIDGET(status_box)->allocation.height;
 	    *height = monitor.y + monitor.height - *y;
     }
-  else 
+  else
     {
 	    *height = *y - monitor.y;
 	    *y = monitor.y;
@@ -1363,7 +1363,7 @@
   if (popup_req.height > *height)
     {
       vpolicy = GTK_POLICY_ALWAYS;
-      
+
       gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (status_box->scrolled_window),
 				      hpolicy, vpolicy);
     }
@@ -1406,8 +1406,8 @@
 {
 	int width, height, x, y;
 	pidgin_status_box_list_position (box, &x, &y, &width, &height);
-  
-	gtk_widget_set_size_request (box->popup_window, width, height);  
+
+	gtk_widget_set_size_request (box->popup_window, width, height);
 	gtk_window_move (GTK_WINDOW (box->popup_window), x, y);
 	gtk_widget_show(box->popup_window);
 	gtk_widget_grab_focus (box->tree_view);
@@ -1442,7 +1442,7 @@
 toggled_cb(GtkWidget *widget, PidginStatusBox *box)
 {
 	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))  {
-		if (!box->popup_in_progress) 
+		if (!box->popup_in_progress)
 			pidgin_status_box_popup (box);
 	}  else {
 		pidgin_status_box_popdown(box);
@@ -1531,38 +1531,38 @@
 {
 	if (status_box->active_row)
 		gtk_tree_row_reference_free(status_box->active_row);
-	
+
 	status_box->active_row = gtk_tree_row_reference_new(GTK_TREE_MODEL(status_box->dropdown_store), path);
-	
+
 	pidgin_status_box_popdown (status_box);
 	pidgin_status_box_changed(status_box);
 }
 
-static gboolean 
-treeview_button_release_cb(GtkWidget *widget, GdkEventButton *event, PidginStatusBox *status_box) 
+static gboolean
+treeview_button_release_cb(GtkWidget *widget, GdkEventButton *event, PidginStatusBox *status_box)
 {
 	GtkTreePath *path = NULL;
 	int ret;
 	GtkWidget *ewidget = gtk_get_event_widget ((GdkEvent *)event);
-	
+
 	if (ewidget != status_box->tree_view) {
-		if (ewidget == status_box->toggle_button && 
+		if (ewidget == status_box->toggle_button &&
 		    status_box->popup_in_progress &&
 		    gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (status_box->toggle_button))) {
 			pidgin_status_box_popdown (status_box);
 			return TRUE;
 		}
-		
+
 		/* released outside treeview */
-		if (ewidget != status_box->toggle_button) 
+		if (ewidget != status_box->toggle_button)
 			{
 				pidgin_status_box_popdown (status_box);
 				return TRUE;
 			}
-		
+
 		return FALSE;
 	}
-	
+
 	ret = gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (status_box->tree_view),
 					     event->x, event->y,
 					     &path,
@@ -1570,7 +1570,7 @@
 
 	if (!ret)
 		return TRUE; /* clicked outside window? */
-	
+
 	treeview_activate_current_selection(status_box, path);
 	gtk_tree_path_free (path);
 
@@ -1620,7 +1620,7 @@
 	status_box->cell_view = gtk_cell_view_new();
 	status_box->vsep = gtk_vseparator_new();
 	status_box->arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_NONE);
-	
+
 	status_box->store = gtk_list_store_new(NUM_COLUMNS, G_TYPE_INT, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
 	status_box->dropdown_store = gtk_list_store_new(NUM_COLUMNS, G_TYPE_INT, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
 ;
@@ -1696,7 +1696,7 @@
 	gtk_tree_view_set_search_column(GTK_TREE_VIEW(status_box->tree_view), TEXT_COLUMN);
 	gtk_tree_view_set_search_equal_func(GTK_TREE_VIEW(status_box->tree_view),
 				pidgin_tree_view_search_equal_func, NULL, NULL);
-	  
+
 #if GTK_CHECK_VERSION(2, 6, 0)
 	g_object_set(text_rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
 #endif
@@ -1907,7 +1907,7 @@
 		gtk_paint_box(widget->style, widget->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT, NULL,
 				status_box->icon_box, "button", status_box->icon_box->allocation.x-1, status_box->icon_box->allocation.y-1,
 				34, 34);
-	}		
+	}
 	return FALSE;
 }
 
@@ -2064,7 +2064,7 @@
 		/* Show a placeholder icon */
 		gchar *filename;
 		filename = g_build_filename(DATADIR, "pixmaps",
-				"purple", "insert-image.png", NULL);
+				"pidgin", "insert-image.png", NULL);
 		status_box->buddy_icon = gdk_pixbuf_new_from_file(filename, NULL);
 		g_free(filename);
 	}
@@ -2138,7 +2138,7 @@
 	char *message;
 	PurpleSavedStatus *saved_status = NULL;
 	gboolean changed = TRUE;
-	
+
 	path = gtk_tree_row_reference_get_path(status_box->active_row);
 	if (!gtk_tree_model_get_iter (GTK_TREE_MODEL(status_box->dropdown_store), &iter, path))
 		return;
@@ -2188,7 +2188,7 @@
 			const char *id = NULL;
 			GtkTreePath *path = gtk_tree_row_reference_get_path(status_box->active_row);
 			active = gtk_tree_path_get_indices(path)[0];
-			
+
 			gtk_tree_path_free(path);
 
 			status = purple_account_get_active_status(status_box->token_status_account);
@@ -2386,13 +2386,13 @@
 	GList *accounts = NULL, *node;
 	int active;
 
-	
+
 	if (!gtk_tree_model_get_iter (GTK_TREE_MODEL(status_box->dropdown_store), &iter, path))
 		return;
 	active = gtk_tree_path_get_indices(path)[0];
 	gtk_tree_path_free(path);
 	g_object_set_data(G_OBJECT(status_box), "active", GINT_TO_POINTER(active));
-	
+
 	gtk_tree_model_get(GTK_TREE_MODEL(status_box->dropdown_store), &iter,
 			   TYPE_COLUMN, &type,
 			   DATA_COLUMN, &data,
--- a/pidgin/gtkutils.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/pidgin/gtkutils.h	Tue Mar 27 03:08:31 2007 +0000
@@ -393,7 +393,7 @@
  * @param primitive  The status primitive
  * @param w          The widget to render this
  * @param size       The icon size to render at
- * @retrun A GdkPixbuf, created from stock
+ * @return A GdkPixbuf, created from stock
  */
 GdkPixbuf * pidgin_create_status_icon(PurpleStatusPrimitive primitive, GtkWidget *w, const char *size);
 
--- a/pidgin/pidginstock.h	Tue Mar 27 03:07:14 2007 +0000
+++ b/pidgin/pidginstock.h	Tue Mar 27 03:08:31 2007 +0000
@@ -1,5 +1,5 @@
 /**
- * @file gtkstock.h GTK+ Stock resources
+ * @file pidginstock.h GTK+ Stock resources
  * @ingroup gtkui
  *
  * pidgin
--- a/pidgin/pixmaps/Makefile.am	Tue Mar 27 03:07:14 2007 +0000
+++ b/pidgin/pixmaps/Makefile.am	Tue Mar 27 03:08:31 2007 +0000
@@ -64,3 +64,6 @@
 distpixmapdir = $(datadir)/pixmaps
 distpixmap_DATA = pidgin.png pidgin.svg
 
+
+
+
--- a/pidgin/pixmaps/Makefile.mingw	Tue Mar 27 03:07:14 2007 +0000
+++ b/pidgin/pixmaps/Makefile.mingw	Tue Mar 27 03:08:31 2007 +0000
@@ -18,24 +18,24 @@
 	    $(MAKE) -C $$subdir -f $(GAIM_WIN32_MAKEFILE) install || exit 1 ;\
 	  done; \
 	fi;
-	if test '$(gaimbuttonpix_DATA)'; then \
-	  mkdir -p $(gaimbuttonpixdir); \
-	  cp $(gaimbuttonpix_DATA) $(gaimbuttonpixdir); \
+	if test '$(pidginbuttonpix_DATA)'; then \
+	  mkdir -p $(pidginbuttonpixdir); \
+	  cp $(pidginbuttonpix_DATA) $(pidginbuttonpixdir); \
 	fi;
-	if test '$(gaimdialogpix_DATA)'; then \
-	  mkdir -p $(gaimdialogpixdir); \
-	  cp $(gaimdialogpix_DATA) $(gaimdialogpixdir); \
+	if test '$(pidgindialogpix_DATA)'; then \
+	  mkdir -p $(pidgindialogpixdir); \
+	  cp $(pidgindialogpix_DATA) $(pidgindialogpixdir); \
 	fi;
-	if test '$(gaimiconpix_DATA)'; then \
-	  mkdir -p $(gaimiconpixdir); \
-	  cp $(gaimiconpix_DATA) $(gaimiconpixdir); \
+	if test '$(pidginiconpix_DATA)'; then \
+	  mkdir -p $(pidginiconpixdir); \
+	  cp $(pidginiconpix_DATA) $(pidginiconpixdir); \
 	fi;
-	if test '$(gaimdistpix_DATA)'; then \
-	  mkdir -p $(gaimdistpixdir); \
-	  cp $(gaimdistpix_DATA) $(gaimdistpixdir); \
+	if test '$(pidgindistpix_DATA)'; then \
+	  mkdir -p $(pidgindistpixdir); \
+	  cp $(pidgindistpix_DATA) $(pidgindistpixdir); \
 	fi;
-	if test '$(distpixmap_DATA)'; then \
-	  mkdir -p $(distpixmapdir); \
-	  cp $(distpixmap_DATA) $(distpixmapdir); \
-	fi;
+#	if test '$(distpixmap_DATA)'; then \
+#	  mkdir -p $(distpixmapdir); \
+#	  cp $(distpixmap_DATA) $(distpixmapdir); \
+#	fi;
 
--- a/pidgin/win32/nsis/pidgin-installer.nsi	Tue Mar 27 03:07:14 2007 +0000
+++ b/pidgin/win32/nsis/pidgin-installer.nsi	Tue Mar 27 03:08:31 2007 +0000
@@ -698,7 +698,7 @@
     Delete "$INSTDIR\plugins\buddynote.dll"
     Delete "$INSTDIR\plugins\convcolors.dll"
     Delete "$INSTDIR\plugins\extplacement.dll"
-    Delete "$INSTDIR\plugins\gaimrc.dll"
+    Delete "$INSTDIR\plugins\pidginrc.dll"
     Delete "$INSTDIR\plugins\history.dll"
     Delete "$INSTDIR\plugins\iconaway.dll"
     Delete "$INSTDIR\plugins\idle.dll"
@@ -735,12 +735,12 @@
     Delete "$INSTDIR\plugins\win2ktrans.dll"
     Delete "$INSTDIR\plugins\winprefs.dll"
     RMDir "$INSTDIR\plugins"
-    Delete "$INSTDIR\sounds\gaim\alert.wav"
-    Delete "$INSTDIR\sounds\gaim\login.wav"
-    Delete "$INSTDIR\sounds\gaim\logout.wav"
-    Delete "$INSTDIR\sounds\gaim\receive.wav"
-    Delete "$INSTDIR\sounds\gaim\send.wav"
-    RMDir "$INSTDIR\sounds\gaim"
+    Delete "$INSTDIR\sounds\pidgin\alert.wav"
+    Delete "$INSTDIR\sounds\pidgin\login.wav"
+    Delete "$INSTDIR\sounds\pidgin\logout.wav"
+    Delete "$INSTDIR\sounds\pidgin\receive.wav"
+    Delete "$INSTDIR\sounds\pidgin\send.wav"
+    RMDir "$INSTDIR\sounds\pidgin"
     RMDir "$INSTDIR\sounds"
     Delete "$INSTDIR\freebl3.dll"
     Delete "$INSTDIR\idletrack.dll"
--- a/pidgin/win32/pidgin_exe_rc.rc.in	Tue Mar 27 03:07:14 2007 +0000
+++ b/pidgin/win32/pidgin_exe_rc.rc.in	Tue Mar 27 03:08:31 2007 +0000
@@ -33,4 +33,4 @@
     END
   END
 
-PURPLE_ICON			ICON PIXMAPDIR "pidgin.ico"
+PIDGIN_ICON			ICON PIXMAPDIR "pidgin.ico"