Revision fba53203d9fe0ebd98157bdc6c7faeb2b149908b

evands at pidgin.im evands at pidgin.im
Mon Mar 26 23:09:03 EDT 2007


o     -----------------------------------------------------------------
|\    Revision: fba53203d9fe0ebd98157bdc6c7faeb2b149908b
| |   Ancestor: 343dc2d52b5a1cb204359ecc11a1b4d98b984dd0
| |   Ancestor: f894448f712134780a75dba19622a78626a98231
| |   Author: evands at pidgin.im
| |   Date: 2007-03-27T03:08:31
| |   Branch: im.pidgin.pidgin
| |   
| |   Added files:
| |           finch/libgnt/pygnt/Files.txt
| |           finch/libgnt/pygnt/Makefile.make
| |           finch/libgnt/pygnt/README.txt finch/libgnt/pygnt/dbus-gnt
| |           finch/libgnt/pygnt/gendef.sh finch/libgnt/pygnt/gnt.override
| |           finch/libgnt/pygnt/gntmodule.c finch/libgnt/pygnt/test.py
| |   Added directories:
| |           finch/libgnt/pygnt
| |   Modified files:
| |           AUTHORS COPYRIGHT ChangeLog ChangeLog.API Doxyfile.in NEWS
| |           PLUGIN_HOWTO README config.h.mingw doc/PERL-HOWTO.dox
| |           finch/gntblist.c finch/gntft.c finch/gntrequest.c
| |           finch/libgnt/gnt-skel.h finch/libgnt/gnt.h
| |           finch/libgnt/gntbindable.h finch/libgnt/gntbox.h
| |           finch/libgnt/gntbutton.h finch/libgnt/gntcheckbox.h
| |           finch/libgnt/gntclipboard.h finch/libgnt/gntcombobox.h
| |           finch/libgnt/gntentry.h finch/libgnt/gntfilesel.c
| |           finch/libgnt/gntfilesel.h finch/libgnt/gntlabel.h
| |           finch/libgnt/gntline.h finch/libgnt/gntmenu.c
| |           finch/libgnt/gntmenu.h finch/libgnt/gntmenuitem.c
| |           finch/libgnt/gntmenuitem.h finch/libgnt/gntmenuitemcheck.c
| |           finch/libgnt/gntmenuitemcheck.h finch/libgnt/gnttextview.c
| |           finch/libgnt/gnttextview.h finch/libgnt/gnttree.c
| |           finch/libgnt/gnttree.h finch/libgnt/gntwidget.c
| |           finch/libgnt/gntwidget.h finch/libgnt/gntwindow.h
| |           finch/libgnt/gntwm.h finch/libgnt/test/file.c
| |           finch/libgnt/test/menu.c libpurple/account.h
| |           libpurple/buddyicon.h libpurple/conversation.h
| |           libpurple/eventloop.h libpurple/notify.h
| |           libpurple/protocols/bonjour/bonjour.c
| |           libpurple/protocols/bonjour/issues.txt
| |           libpurple/protocols/msn/switchboard.c
| |           libpurple/protocols/silc/README
| |           libpurple/protocols/silc/TODO
| |           libpurple/protocols/yahoo/yahoo.c libpurple/savedstatuses.h
| |           libpurple/server.h libpurple/win32/libpurplerc.rc.in
| |           pidgin/gtkaccount.c pidgin/gtkstatusbox.c pidgin/gtkutils.h
| |           pidgin/pidginstock.h pidgin/pixmaps/Makefile.am
| |           pidgin/pixmaps/Makefile.mingw
| |           pidgin/win32/nsis/pidgin-installer.nsi
| |           pidgin/win32/pidgin_exe_rc.rc.in pidgin.spec.in
| |   Modified attrs:
| |           finch/libgnt/pygnt/dbus-gnt finch/libgnt/pygnt/gendef.sh
| |           finch/libgnt/pygnt/test.py
| |   
| |   ChangeLog: 
| |   
| |   merge of '343dc2d52b5a1cb204359ecc11a1b4d98b984dd0'
| |        and 'f894448f712134780a75dba19622a78626a98231'
| |   
| |   ============================================================
| |   --- finch/libgnt/pygnt/Files.txt	5838d1dec407797b417733d6a230bddd677dc341
| |   +++ finch/libgnt/pygnt/Files.txt	5838d1dec407797b417733d6a230bddd677dc341
| |   @@ -0,0 +1,6 @@
| |   +gendef.sh
| |   +gnt.override
| |   +Makefile
| |   +test.py
| |   +dbus-gnt
| |   +gntmodule.c
| |   ============================================================
| |   --- finch/libgnt/pygnt/Makefile.make	ab5b071076fe88c353e1b60e668a253997be10ac
| |   +++ finch/libgnt/pygnt/Makefile.make	ab5b071076fe88c353e1b60e668a253997be10ac
| |   @@ -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
| |   ============================================================
| |   --- finch/libgnt/pygnt/README.txt	769a5bdfa3dfc273d8e126248667804a8336dc82
| |   +++ finch/libgnt/pygnt/README.txt	769a5bdfa3dfc273d8e126248667804a8336dc82
| |   @@ -0,0 +1,4 @@
| |   +Run these in sequence:
| |   +
| |   +./gendef.sh
| |   +make -f Makefile.make gnt.so
| |   ============================================================
| |   --- finch/libgnt/pygnt/dbus-gnt	6debd44131ca876b10b8ae8f3a9b908f3c94b4e1
| |   +++ finch/libgnt/pygnt/dbus-gnt	6debd44131ca876b10b8ae8f3a9b908f3c94b4e1
| |   @@ -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()
| |   +
| |   ============================================================
| |   --- finch/libgnt/pygnt/gendef.sh	348731ecdffc02087ad6aa3b457ce43595d3b1ff
| |   +++ finch/libgnt/pygnt/gendef.sh	348731ecdffc02087ad6aa3b457ce43595d3b1ff
| |   @@ -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
| |   +
| |   +
| |   ============================================================
| |   --- finch/libgnt/pygnt/gnt.override	04e09064b3f3c76cc54ef1fa1df308c39453d16f
| |   +++ finch/libgnt/pygnt/gnt.override	04e09064b3f3c76cc54ef1fa1df308c39453d16f
| |   @@ -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
| |   +%%
| |   ============================================================
| |   --- finch/libgnt/pygnt/gntmodule.c	7bcb542fecc7da290e774de5d17f4340a1d628d3
| |   +++ finch/libgnt/pygnt/gntmodule.c	7bcb542fecc7da290e774de5d17f4340a1d628d3
| |   @@ -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");
| |   +    }
| |   +}
| |   +
| |   ============================================================
| |   --- finch/libgnt/pygnt/test.py	279fed43aab0b6f739f83f665772ee93afc0c389
| |   +++ finch/libgnt/pygnt/test.py	279fed43aab0b6f739f83f665772ee93afc0c389
| |   @@ -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()
| |   +
| |   ============================================================
| |   --- AUTHORS	13ec2e87ea5799fa3c2bcaae3be1880ccb5c80aa
| |   +++ AUTHORS	3a281d96f2f752c2682fbe116b92a6443af94ab7
| |   @@ -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:
| |    ------------------
| |   ============================================================
| |   --- COPYRIGHT	d1fd1a1d30d5dce9385444584a576c023b036bb9
| |   +++ COPYRIGHT	c634cb4ac8e183092a82f88c3428806f0799fa8d
| |   @@ -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
| |   ============================================================
| |   --- ChangeLog	4181ea27e18226f1fe89ee612111b38b8a7bda23
| |   +++ ChangeLog	64a10369b8940319e6e4539f3ffdee1a0f3eb22f
| |   @@ -1,10 +1,5 @@
| |   -2007-01-24  gettextize  <bug-gnu-gettext at gnu.org>
| |   +Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
| |    
| |   -	* 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!
| |   -
| |    version 2.0.0:
| |    	Build Changes:
| |    	* With the Core/UI split completed, it is now possible to build Gaim
| |   ============================================================
| |   --- ChangeLog.API	e8a7ac5a65d16bdc3aa8e78c9845955d124d6067
| |   +++ ChangeLog.API	7d5b4a3e76e446081d5930f73284b1973e3a7a45
| |   @@ -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:
| |   ============================================================
| |   --- Doxyfile.in	d44f735b442bf91d45745775de9f1aa12751d06f
| |   +++ Doxyfile.in	5c9c6db3416643d223092f4fbeab8a0e4c8c5236
| |   @@ -431,9 +431,9 @@ WARN_LOGFILE           = 
| |    # 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 @@ COLS_IN_ALPHA_INDEX    = 3
| |    # 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
| |   ============================================================
| |   --- NEWS	4347ab770910e128dd3255cb40025b82faa95040
| |   +++ NEWS	3fc14e6e9d6ac3edbb36b97dfc19b2b8cbb86f18
| |   @@ -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
| |   ============================================================
| |   --- PLUGIN_HOWTO	775a12e04637fd821a4cc61d227296b533ea5ceb
| |   +++ PLUGIN_HOWTO	3edd148e712e9aba0e776c1984c04d9e32fb40c4
| |   @@ -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.
| |   ============================================================
| |   --- README	ee1a1b03fdf222fdbdc2903c16bb01e22d872bce
| |   +++ README	baebe0934c47365d641ced3bf592993e15233906
| |   @@ -1,28 +1,33 @@
| |   -gaim
| |   +Purple, Pidgin and Finch
| |    ========================
| |   -Rob Flynn <gaim at robflynn.com> IM: RobFlynn (current maintainer)
| |   -Syd Logan - Super Hacker and Resident Designated Driver
| |   -Jim Duchek <jimduchek at ou.edu> IM: Zilding (former maintainer)
| |   -Eric Warmenhoven <eric at warmenhoven.org> (retired)
| |   -Mark Spencer <markster at marko.net>
| |   +See AUTHORS and COPYRIGHT for the list of contributors.
| |    
| |   -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.
| |   +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.
| |    
| |   +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,13 +74,9 @@
| |    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.
| |   +If you come across a bug, please report it to http://pidgin.im/.
| |    
| |   -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.
| |    
| |   -
| |    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 at 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.
| |   ============================================================
| |   --- config.h.mingw	61620e56a47fd744f392c5b3f3139b8f69a7076f
| |   +++ config.h.mingw	bbf5783dbfa3205f732209b0bbc051fee6eead53
| |   @@ -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 at lists.sourceforge.net"
| |   +#define PACKAGE_BUGREPORT "devel at pidgin.im"
| |    
| |    /* Define to the full name of this package. */
| |    #define PACKAGE_NAME "pidgin"
| |   ============================================================
| |   --- doc/PERL-HOWTO.dox	06bf3adf1e3525497f10cac75c0a13e515b00618
| |   +++ doc/PERL-HOWTO.dox	1a7cae822c40d02a8e5fb8e51f1ef42b2f77a6b0
| |   @@ -333,7 +333,7 @@ sub plugin_load {
| |    }
| |    @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
| |   ============================================================
| |   --- finch/gntblist.c	645924939f28c45ee47bc076c007eab9d4247e85
| |   +++ finch/gntblist.c	971a633799c4657c334b0e35dd6444e31ecb557d
| |   @@ -642,8 +642,8 @@ gnt_append_menu_action(GntMenu *menu, Pu
| |    
| |    	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 @@ autojoin_toggled(GntMenuItem *item, gpoi
| |    {
| |    	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 @@ create_chat_menu(GntMenu *menu, PurpleCh
| |    {
| |    	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 @@ create_menu()
| |    
| |    	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);
| |   ============================================================
| |   --- finch/gntft.c	1b0b57c57b038563c6fe77e20f05645002393d4e
| |   +++ finch/gntft.c	7d4dcdc04690eb84ee72892284aae27f77e3a1f2
| |   @@ -158,18 +158,12 @@ stop_button_cb(GntButton *button)
| |    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 @@ finch_xfer_dialog_new(void)
| |    	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 @@ finch_xfer_dialog_update_xfer(PurpleXfer
| |    	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"));
| |    	}
| |   ============================================================
| |   --- finch/gntrequest.c	c6f9322d6cbe66f46eca21e2311e9415f50aead7
| |   +++ finch/gntrequest.c	7f00f030f3ccddddb4fdc02ba9829f1d609214dd
| |   @@ -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
| |    typedef struct
| |    {
| |    	void *user_data;
| |   -	GntWidget *entry, *dialog;
| |   +	GntWidget *dialog;
| |    	GCallback *cbs;
| |    } PurpleGntFileRequest;
| |    
| |   @@ -549,8 +550,10 @@ file_ok_cb(GntWidget *wid, gpointer fq)
| |    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 @@ finch_request_file(const char *title, co
| |    				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 @@ finch_request_file(const char *title, co
| |    	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);
| |    
| |   ============================================================
| |   --- finch/libgnt/gnt-skel.h	f5f6d6a88540cbb9bc6f7d55123216843f376d9b
| |   +++ finch/libgnt/gnt-skel.h	16632e0ad89cfee9a87f98d3cae77b77dd35c41e
| |   @@ -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;
| |    
| |   ============================================================
| |   --- finch/libgnt/gnt.h	e8be8358e6c776b4c5ca8564aab065ceee3ea25e
| |   +++ finch/libgnt/gnt.h	1253c4dbfb1faa82bcba9c9bd8b6ae0fbd766112
| |   @@ -16,8 +16,6 @@ void gnt_screen_update(GntWidget *widget
| |    
| |    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);
| |    
| |    gchar *gnt_get_clipboard_string(void);
| |    
| |   +void gnt_set_clipboard_string(gchar *string);
| |   -void gnt_set_clipboard_string(gchar *);
| |   ============================================================
| |   --- finch/libgnt/gntbindable.h	fb65c3665dfd50d12e234c30016a497119a93d5d
| |   +++ finch/libgnt/gntbindable.h	10490d490da1ad32a8bbb7a131fd826b9e778107
| |   @@ -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 (*GntBindableActionCall
| |    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 @@ struct _GnBindableAction
| |    	} u;
| |    };
| |    
| |   -struct _GnBindableActionParam
| |   +struct _GntBindableActionParam
| |    {
| |    	GntBindableAction *action;
| |    	GList *list;
| |   ============================================================
| |   --- finch/libgnt/gntbox.h	ec4a72886d19c623baae8bd808131d7df774495e
| |   +++ finch/libgnt/gntbox.h	78c577efa3e8838f0ea1fbd2057e3b254ae328df
| |   @@ -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 @@ typedef enum
| |    	GNT_ALIGN_BOTTOM
| |    } GntAlignment;
| |    
| |   -struct _GnBox
| |   +struct _GntBox
| |    {
| |    	GntWidget parent;
| |    
| |   @@ -49,7 +49,7 @@ struct _GnBox
| |        void (*gnt_reserved4)(void);
| |    };
| |    
| |   -struct _GnBoxClass
| |   +struct _GntBoxClass
| |    {
| |    	GntWidgetClass parent;
| |    
| |   ============================================================
| |   --- finch/libgnt/gntbutton.h	53187c6f7f2d58873b81d7655227d4df808a80b3
| |   +++ finch/libgnt/gntbutton.h	303a15be50386fe8b758bec8199a6299b2bc1571
| |   @@ -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 @@ struct _GnButton
| |        void (*gnt_reserved4)(void);
| |    };
| |    
| |   -struct _GnButtonClass
| |   +struct _GntButtonClass
| |    {
| |    	GntWidgetClass parent;
| |    
| |   ============================================================
| |   --- finch/libgnt/gntcheckbox.h	e37bd03db4933321b0ec72de4e56913e4f2abb9d
| |   +++ finch/libgnt/gntcheckbox.h	e3ca08aa576adf4de6d53ea3b7fc9004c0f2171c
| |   @@ -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;
| |    
| |   ============================================================
| |   --- finch/libgnt/gntclipboard.h	1213b5b9ecb88a8fdf4733ee1b1f0ba822cfe613
| |   +++ finch/libgnt/gntclipboard.h	3c44fa6d0be485caa81fd8ac6ff6ec09889d7d48
| |   @@ -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);
| |    
| |    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
| |    
| |   ============================================================
| |   --- finch/libgnt/gntcombobox.h	91ebb707e1ba63ce28549b3fdced31aa56a7bacc
| |   +++ finch/libgnt/gntcombobox.h	dbde0238faa7605a5e4ac17def8ab8e3b94fd03d
| |   @@ -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 @@ struct _GnComboBox
| |    	void *selected;        /* Currently selected key */
| |    };
| |    
| |   -struct _GnComboBoxClass
| |   +struct _GntComboBoxClass
| |    {
| |    	GntWidgetClass parent;
| |    
| |   ============================================================
| |   --- finch/libgnt/gntentry.h	4521e050f20c7bb19d08a3c8f5dc16f6245c0f98
| |   +++ finch/libgnt/gntentry.h	b72db5ce023cbb152bdbe56fdce48d7543b32826
| |   @@ -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 @@ typedef enum
| |    
| |    #define GNT_ENTRY_FLAG_ALL    (GNT_ENTRY_FLAG_ALPHA | GNT_ENTRY_FLAG_INT)
| |    
| |   -struct _GnEntry
| |   +struct _GntEntry
| |    {
| |    	GntWidget parent;
| |    
| |   @@ -60,7 +60,7 @@ struct _GnEntry
| |    	GntWidget *ddown;   /* The dropdown with the suggested list */
| |    };
| |    
| |   -struct _GnEntryClass
| |   +struct _GntEntryClass
| |    {
| |    	GntWidgetClass parent;
| |    
| |   ============================================================
| |   --- finch/libgnt/gntfilesel.c	96948aa77daa93e04fa06c3e43cca3d76f531358
| |   +++ finch/libgnt/gntfilesel.c	3933090725b7303f6e5170e96da10aeebec09130
| |   @@ -28,6 +28,11 @@ gnt_file_sel_destroy(GntWidget *widget)
| |    {
| |    	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 @@ update_location(GntFileSel *sel)
| |    {
| |    	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 @@ location_changed(GntFileSel *sel, GError
| |    		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 cha
| |    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 @@ file_sel_changed(GntWidget *widget, gpoi
| |    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 @@ gnt_file_sel_map(GntWidget *widget)
| |    
| |    	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 @@ gnt_file_sel_map(GntWidget *widget)
| |    	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 @@ gnt_file_sel_class_init(GntFileSelClass 
| |    					 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 @@ gboolean gnt_file_sel_get_dirs_only(GntF
| |    	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;
| |   +}
| |   +
| |   ============================================================
| |   --- finch/libgnt/gntfilesel.h	272102e77c38124761209a5e1db84369a3fcf410
| |   +++ finch/libgnt/gntfilesel.h	f8ef0ccc30968d6335477df5db8bb59193adea8a
| |   @@ -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 @@ struct _GnFileSel
| |    	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_locati
| |    
| |    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 */
| |   +
| |   ============================================================
| |   --- finch/libgnt/gntlabel.h	75f8b361c471a7e905f006940f435392aee39fa5
| |   +++ finch/libgnt/gntlabel.h	3cf014cd167cc8598a3aab5308a31a5cccd83f57
| |   @@ -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 @@ struct _GnLabel
| |        void (*gnt_reserved4)(void);
| |    };
| |    
| |   -struct _GnLabelClass
| |   +struct _GntLabelClass
| |    {
| |    	GntWidgetClass parent;
| |    
| |   ============================================================
| |   --- finch/libgnt/gntline.h	6d65a49fe693a45b019466923af669ec6e0fb94a
| |   +++ finch/libgnt/gntline.h	23fd4855fbf15b2cd74d533bbeb9727bc10f4108
| |   @@ -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;
| |    
| |   ============================================================
| |   --- finch/libgnt/gntmenu.c	00e5986ec9880d5b5c62a017cebea2696cbaea1c
| |   +++ finch/libgnt/gntmenu.c	66ee94332dc4f372528a94a1d4a87c033687f425
| |   @@ -28,7 +28,7 @@ gnt_menu_draw(GntWidget *widget)
| |    		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 @@ menu_tree_add(GntMenu *menu, GntMenuItem
| |    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 @@ menu_tree_add(GntMenu *menu, GntMenuItem
| |    		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 @@ gnt_menu_map(GntWidget *widget)
| |    		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 @@ gnt_menu_toggled(GntTree *tree, gpointer
| |    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 @@ gnt_menu_activate(GntWidget *widget)
| |    	}
| |    
| |    	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);
| |   ============================================================
| |   --- finch/libgnt/gntmenu.h	a612ee18f9ac681bdff742507a4950761b860e21
| |   +++ finch/libgnt/gntmenu.h	92b18525e20eb6cfbade4260cf30f510229f05e4
| |   @@ -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 @@ typedef enum
| |    	GNT_MENU_POPUP,         /* A popup menu */
| |    } GntMenuType;
| |    
| |   -struct _GnMenu
| |   +struct _GntMenu
| |    {
| |    	GntTree parent;
| |    	GntMenuType type;
| |   @@ -47,7 +47,7 @@ struct _GnMenu
| |    	GntMenu *parentmenu;
| |    };
| |    
| |   -struct _GnMenuClass
| |   +struct _GntMenuClass
| |    {
| |    	GntTreeClass parent;
| |    
| |   ============================================================
| |   --- finch/libgnt/gntmenuitem.c	d8cc1a151174aae72287a365c1f56bd6b156224d
| |   +++ finch/libgnt/gntmenuitem.c	d0961abc4a881b8e35f32b285e7a8843896cf3e1
| |   @@ -6,7 +6,7 @@ gnt_menuitem_destroy(GObject *obj)
| |    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
| |    
| |    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);
| |    
| |   ============================================================
| |   --- finch/libgnt/gntmenuitem.h	8c700510e9ff12711ddd666d05d91057430c0ecc
| |   +++ finch/libgnt/gntmenuitem.h	8d688484ca972d32e27e9632826b635582c14454
| |   @@ -1,27 +1,27 @@
| |    #ifndef GNT_MENUITEM_H
| |    #define GNT_MENUITEM_H
| |    
| |    #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)(GntM
| |    
| |    typedef void (*GntMenuItemCallback)(GntMenuItem *item, gpointer data);
| |    
| |   -struct _GnMenuItem
| |   +struct _GntMenuItem
| |    {
| |    	GObject parent;
| |    	GntMenuItemPriv priv;
| |   @@ -46,7 +46,7 @@ struct _GnMenuItem
| |    	GntMenu *submenu;
| |    };
| |    
| |   -struct _GnMenuItemClass
| |   +struct _GntMenuItemClass
| |    {
| |    	GObjectClass parent;
| |    
| |   ============================================================
| |   --- finch/libgnt/gntmenuitemcheck.c	3a5db9074c4d19f10ed5cd57ce3e29128f66c4c6
| |   +++ finch/libgnt/gntmenuitemcheck.c	554b0c4ebc1809cd525b416150dc9d6808c7ef2d
| |   @@ -5,7 +5,7 @@ gnt_menuitem_check_class_init(GntMenuIte
| |    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 @@ gnt_menuitem_check_get_gtype(void)
| |    			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(cons
| |    
| |    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;
| |   ============================================================
| |   --- finch/libgnt/gntmenuitemcheck.h	dc85d1b3e073222892547ae04032117ae050d328
| |   +++ finch/libgnt/gntmenuitemcheck.h	619799ab80cab3b800a950bbf134cf54291620c9
| |   @@ -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
| |    
| |    G_END_DECLS
| |    
| |   +#endif /* GNT_MENU_ITEM_CHECK_H */
| |   -#endif /* GNT_MENUITEM_CHECK_H */
| |   ============================================================
| |   --- finch/libgnt/gnttextview.c	55d8734dd92fb84e61e5c4bb5c74d4ea7f76031c
| |   +++ finch/libgnt/gnttextview.c	975e869d7fce95b488bedffd75dc7fd97d0a1ab5
| |   @@ -44,6 +44,7 @@ gnt_text_view_draw(GntWidget *widget)
| |    	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 *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);
| |    
| |   ============================================================
| |   --- finch/libgnt/gnttextview.h	ec5a6fbc46973436f33a057d3ca0ffac4ceeb819
| |   +++ finch/libgnt/gnttextview.h	b32ae82fe8a1cb935896a4f0a48173186a64b9ba
| |   @@ -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 @@ typedef enum
| |    	GNT_TEXT_FLAG_HIGHLIGHT   = 1 << 4,
| |    } GntTextFormatFlags;
| |    
| |   -struct _GnTextViewClass
| |   +struct _GntTextViewClass
| |    {
| |    	GntWidgetClass parent;
| |    
| |   ============================================================
| |   --- finch/libgnt/gnttree.c	514fda8f2319742978b9fc85e4e0fb082c3a9222
| |   +++ finch/libgnt/gnttree.c	9ee650f4d7d9fa5bc7ddb721b5462c847f6f0cfe
| |   @@ -20,7 +20,7 @@ enum
| |    
| |    /* XXX: Make this one into a GObject?
| |     * 		 ... Probably not */
| |   -struct _GnTreeRow
| |   +struct _GntTreeRow
| |    {
| |    	void *key;
| |    	void *data;		/* XXX: unused */
| |   @@ -40,7 +40,7 @@ struct _GnTreeRow
| |    	GntTree *tree;
| |    };
| |    
| |   -struct _GnTreeCol
| |   +struct _GntTreeCol
| |    {
| |    	char *text;
| |    	int span;       /* How many columns does it span? */
| |   ============================================================
| |   --- finch/libgnt/gnttree.h	eedb0e773962b708620c31d3decd270acbea8aa1
| |   +++ finch/libgnt/gnttree.h	eaadb3047ebef4d84308ece63d87509985a16727
| |   @@ -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 @@ struct _GnTree
| |    	GCompareFunc compare;
| |    };
| |    
| |   -struct _GnTreeClass
| |   +struct _GntTreeClass
| |    {
| |    	GntWidgetClass parent;
| |    
| |   ============================================================
| |   --- finch/libgnt/gntwidget.c	c632daabc4635d34eca145d2ed4a47c9e1c15471
| |   +++ finch/libgnt/gntwidget.c	858cfe29a2cd8af5f1802b83ae7dc32bdc6eefee
| |   @@ -521,7 +521,7 @@ gnt_widget_set_size(GntWidget *widget, i
| |    
| |    		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);
| |    		}
| |   ============================================================
| |   --- finch/libgnt/gntwidget.h	7807bba6939d205f8c381dfa4ed49006d93e46cf
| |   +++ finch/libgnt/gntwidget.h	f0451073573ad17a2481aa524cc9e5cf2214fffb
| |   @@ -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 @@ typedef enum _GnWidgetFlags
| |    } 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 @@ typedef enum _GnMouseEvent
| |    } 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 @@ struct _GnWidgetPriv
| |    	int minw, minh;    /* Minimum size for the widget */
| |    };
| |    
| |   -struct _GnWidget
| |   +struct _GntWidget
| |    {
| |    	GntBindable inherit;
| |    
| |   @@ -83,7 +83,7 @@ struct _GnWidget
| |        void (*gnt_reserved4)(void);
| |    };
| |    
| |   -struct _GnWidgetClass
| |   +struct _GntWidgetClass
| |    {
| |    	GntBindableClass parent;
| |    
| |   ============================================================
| |   --- finch/libgnt/gntwindow.h	3b6483a44bc0f62185817724738e5418eac831f0
| |   +++ finch/libgnt/gntwindow.h	50772439bbb06e03d52a153883ac185448c53586
| |   @@ -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;
| |    
| |   ============================================================
| |   --- finch/libgnt/gntwm.h	8fbfeb952f9b58cabd43172e85dd60145ae5b05f
| |   +++ finch/libgnt/gntwm.h	f4ef6762bca0c637457bae53063c7ee92114ce1f
| |   @@ -27,9 +27,9 @@ typedef struct
| |    	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 @@ typedef struct _GnPosition
| |    /**
| |     * 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 @@ struct _GntWM
| |    	void *res4;
| |    };
| |    
| |   -typedef struct _GnWMClass GntWMClass;
| |   +typedef struct _GntWMClass GntWMClass;
| |    
| |   -struct _GnWMClass
| |   +struct _GntWMClass
| |    {
| |    	GntBindableClass parent;
| |    
| |   ============================================================
| |   --- finch/libgnt/test/file.c	eff26206bf4a4273aed3aa6edff5d04b2b8a8672
| |   +++ finch/libgnt/test/file.c	173ae8523adafac01ab0dc017c9dd3ea3022acb7
| |   @@ -9,6 +9,7 @@ int main()
| |    	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();
| |   ============================================================
| |   --- finch/libgnt/test/menu.c	16a187458da94cc995227f78db45eafff398f1a1
| |   +++ finch/libgnt/test/menu.c	a863851af4fa036be68f5ab7f35a7e9c82165c39
| |   @@ -22,29 +22,29 @@ int main()
| |    	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);
| |    
| |   ============================================================
| |   --- libpurple/account.h	ad1a68fcb7a3a4ab271ef0779c9a4338c8358c76
| |   +++ libpurple/account.h	8f0e3721be8e9b1a889a1ade641dbb49da5e1039
| |   @@ -211,14 +211,14 @@ void *purple_account_request_authorizati
| |    /**
| |     * 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 @@ void purple_account_set_buddy_icon(Purpl
| |     * 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);
| |    
| |   ============================================================
| |   --- libpurple/buddyicon.h	1fb5bffb38d5665206019276d7608dfb899eb501
| |   +++ libpurple/buddyicon.h	b4bcbed6371098ee7194d84b30c23b80afe1b5c4
| |   @@ -182,8 +182,8 @@ const guchar *purple_buddy_icon_get_data
| |     * 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);
| |    
| |   ============================================================
| |   --- libpurple/eventloop.h	63a66a2dfa35c7d07a971cd72d5dd999578f8b3a
| |   +++ libpurple/eventloop.h	089314f4df684b5508ec766da9afa821fdf535e7
| |   @@ -138,7 +138,7 @@ gboolean purple_input_remove(guint handl
| |     * 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.
| |     */
| |   ============================================================
| |   --- libpurple/notify.h	e1b4d2a2cab819638f05a12b712b1263e4250df8
| |   +++ libpurple/notify.h	c80ecc1bba96c1e402015d438df207c8efaa82c6
| |   @@ -581,7 +581,7 @@ PurpleNotifyUserInfoEntryType purple_not
| |     * 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);
| |   ============================================================
| |   --- libpurple/protocols/bonjour/bonjour.c	a345c390a97ff0719faf1e1240d787d2a84a0691
| |   +++ libpurple/protocols/bonjour/bonjour.c	561380f6ccdca3d2f24f3f812692ed47de682c15
| |   @@ -460,7 +460,7 @@ initialize_default_account_values()
| |    	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 @@ initialize_default_account_values()
| |    	/* 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);
| |   ============================================================
| |   --- libpurple/protocols/bonjour/issues.txt	f635921e355432b7fbd68c09407c0aec6e71ac9b
| |   +++ libpurple/protocols/bonjour/issues.txt	00d82004dad19e94fc9bca05b053382fb0d74535
| |   @@ -1,18 +1,9 @@
| |    ==========================================
| |    ============= Known issues ===============
| |    ==========================================
| |    
| |   +* Status changes don't work
| |   +* Avatars
| |   +* File transfers
| |   +* Typing notifications
| |   +* Check if it works on win32
| |   -(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
| |   ============================================================
| |   --- libpurple/protocols/silc/README	2052314b74e10d02544f315962dce1fb5462f291
| |   +++ libpurple/protocols/silc/README	a7b22f8decde0cf4452bc5e0120a5e75f66e1742
| |   @@ -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 binarie
| |    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 @@ if pkg-config is installed in your syste
| |    	./configure --with-silc-libs=/path/to/silc/lib
| |    		    --with-silc-includes=/path/to/silc/include
| |    
| |   +If the SILC Toolkit cannot be found then the SILC protocol plugin will
| |   +not be compiled.
| |   -If the Toolkit cannot be located the SILC will not be compiled into the 
| |   -Gaim.
| |   ============================================================
| |   --- libpurple/protocols/silc/TODO	aca6580c753adbecaf8282cfa92a3ef7135d03df
| |   +++ libpurple/protocols/silc/TODO	03e82e50c0844649c776335abd21a481edd0d51e
| |   @@ -1,8 +1,8 @@ Sending images
| |    Features TODO (maybe)
| |    =====================
| |    
| |    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
| |   ============================================================
| |   --- libpurple/savedstatuses.h	a15aec12a59cd4b1c046f830d7ba690b8e62413b
| |   +++ libpurple/savedstatuses.h	a74a64cc7fc98b9f542377bbcc14650da61247bf
| |   @@ -213,9 +213,9 @@ gboolean purple_savedstatus_is_idleaway(
| |    /**
| |     * 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);
| |    
| |   ============================================================
| |   --- libpurple/server.h	6bb268f4555eb2d81883e98b6285ff640234a33e
| |   +++ libpurple/server.h	f1eeff2eb723d7c1faa7ab179e4543a031c66263
| |   @@ -38,7 +38,7 @@ extern "C" {
| |     *
| |     * 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 @@ void serv_got_im(PurpleConnection *gc, c
| |     * @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
| |   ============================================================
| |   --- libpurple/win32/libpurplerc.rc.in	92587b090e2414b6169f22402d474af0957a74f6
| |   +++ libpurple/win32/libpurplerc.rc.in	2722fd5e2cbd6ea896f6de4c7315de5c8260bde0
| |   @@ -16,12 +16,12 @@ VS_VERSION_INFO VERSIONINFO
| |          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"
| |   ============================================================
| |   --- pidgin/gtkaccount.c	bdb24023b99d8272e097190f59660d1dd00a08fa
| |   +++ pidgin/gtkaccount.c	d47c35929d6d8af01095c6f6dc0bc0c52da584ae
| |   @@ -231,7 +231,7 @@ set_dialog_icon(AccountPrefsDialog *dial
| |    		/* 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 @@ add_user_options(AccountPrefsDialog *dia
| |    		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 @@ create_accounts_list(AccountsWindow *dia
| |    	/* 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 @@ pidgin_accounts_request_add(PurpleAccoun
| |    
| |    	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 @@ pidgin_accounts_request_authorization(Pu
| |    		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 =
| |   ============================================================
| |   --- pidgin/gtkstatusbox.c	b4b98fcf684e8038f096a2c08cd68bef2b99e802
| |   +++ pidgin/gtkstatusbox.c	a9b80274b1dcbead4b2e319112a537932a581c0b
| |   @@ -279,7 +279,7 @@ icon_box_dnd_cb(GtkWidget *widget, GdkDr
| |    		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 @@ pidgin_status_box_refresh(PidginStatusBo
| |    	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 @@ pidgin_status_box_refresh(PidginStatusBo
| |    		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 @@ pidgin_status_box_refresh(PidginStatusBo
| |    			}
| |    		}
| |    #endif
| |   -		
| |   +
| |    	}
| |    
| |    	if (status_box->account != NULL) {
| |   @@ -824,7 +824,7 @@ status_menu_refresh_iter(PidginStatusBox
| |    						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_bo
| |    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 @@ pidgin_status_box_list_position (PidginS
| |    #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 @@ pidgin_status_box_list_position (PidginS
| |    
| |    #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 @@ pidgin_status_box_list_position (PidginS
| |        *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 @@ pidgin_status_box_list_position (PidginS
| |    	    *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 @@ pidgin_status_box_list_position (PidginS
| |      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 @@ pidgin_status_box_popup(PidginStatusBox 
| |    {
| |    	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, PidginStat
| |    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 @@ treeview_activate_current_selection(Pidg
| |    {
| |    	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 @@ treeview_button_release_cb(GtkWidget *wi
| |    
| |    	if (!ret)
| |    		return TRUE; /* clicked outside window? */
| |   -	
| |   +
| |    	treeview_activate_current_selection(status_box, path);
| |    	gtk_tree_path_free (path);
| |    
| |   @@ -1620,7 +1620,7 @@ pidgin_status_box_init (PidginStatusBox 
| |    	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 @@ pidgin_status_box_init (PidginStatusBox 
| |    	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 @@ pidgin_status_box_expose_event(GtkWidget
| |    		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 @@ pidgin_status_box_redisplay_buddy_icon(P
| |    		/* 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 @@ activate_currently_selected_status(Pidgi
| |    	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 @@ activate_currently_selected_status(Pidgi
| |    			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 @@ static void pidgin_status_box_changed(Pi
| |    	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,
| |   ============================================================
| |   --- pidgin/gtkutils.h	eb020d784ced34bd9664b927239a8f331ec05bb7
| |   +++ pidgin/gtkutils.h	ebd015c01b2c0cf9014c98323a3f053644ce79a4
| |   @@ -393,7 +393,7 @@ GdkPixbuf *pidgin_create_prpl_icon(Purpl
| |     * @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);
| |    
| |   ============================================================
| |   --- pidgin/pidginstock.h	f9f8f02641576315c2e44fcbd6d10224456abee3
| |   +++ pidgin/pidginstock.h	4dce26c617dbd66b87fc58332550e596449cec5b
| |   @@ -1,5 +1,5 @@
| |    /**
| |   - * @file gtkstock.h GTK+ Stock resources
| |   + * @file pidginstock.h GTK+ Stock resources
| |     * @ingroup gtkui
| |     *
| |     * pidgin
| |   ============================================================
| |   --- pidgin/pixmaps/Makefile.am	068365838b2ba9bcfaccd1fb55aa6229c10e56fc
| |   +++ pidgin/pixmaps/Makefile.am	1e4e0cae0693dfb5e08e83246715210e41ee3356
| |   @@ -64,3 +64,6 @@ distpixmap_DATA = pidgin.png pidgin.svg
| |    distpixmapdir = $(datadir)/pixmaps
| |    distpixmap_DATA = pidgin.png pidgin.svg
| |    
| |   +
| |   +
| |   +
| |   ============================================================
| |   --- pidgin/pixmaps/Makefile.mingw	14cf5a801ce84b98aa67976ac4ebf4d28a3e28ba
| |   +++ pidgin/pixmaps/Makefile.mingw	e6a4c2179746cc35cc70cc402b8b671b1531e19c
| |   @@ -18,24 +18,24 @@ install:
| |    	    $(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;
| |    
| |   ============================================================
| |   --- pidgin/win32/nsis/pidgin-installer.nsi	d838793d5b4d26ff478ba2929d67336acd2d561f
| |   +++ pidgin/win32/nsis/pidgin-installer.nsi	861a65b63670152ec16727b3c5a551ad9b0db8bd
| |   @@ -698,7 +698,7 @@ Section Uninstall
| |        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 @@ Section Uninstall
| |        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"
| |   ============================================================
| |   --- pidgin/win32/pidgin_exe_rc.rc.in	17f268a082f3ab0dc040f4c803771d2f70fb6563
| |   +++ pidgin/win32/pidgin_exe_rc.rc.in	bbaf60b502d35a4a8a5c69b44c8321104253ac92
| |   @@ -33,4 +33,4 @@ VS_VERSION_INFO VERSIONINFO
| |        END
| |      END
| |    
| |   +PIDGIN_ICON			ICON PIXMAPDIR "pidgin.ico"
| |   -PURPLE_ICON			ICON PIXMAPDIR "pidgin.ico"
| |   ============================================================
| |   --- pidgin.spec.in	6ca03af99b542c1dc6333d4ea44cd7461c99e6c7
| |   +++ pidgin.spec.in	5cc3d6d65e5a1a3e8baebfd57aacdadd2b18a7d7
| |   @@ -270,7 +270,7 @@ if [ "$1" -gt 1 -a -n "`which gconftool-
| |    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`
| |    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-
| |    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 @@ fi
| |    %{_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
| |   ============================================================
| |   --- COPYRIGHT	d117afd99593c6ba2b77cb7d4acd30cf332ca6ef
| |   +++ COPYRIGHT	c634cb4ac8e183092a82f88c3428806f0799fa8d
| |   @@ -357,6 +357,7 @@ Dave West
| |    Andrew Wellington
| |    Adam Wendt
| |    Dave West
| |   +Zac West
| |    Daniel Westermann-Clark
| |    Andrew Whewell
| |    Simon Wilkinson
| |   ============================================================
| |   --- libpurple/conversation.h	9a43f0f56038109879c210c335a337938d78872e
| |   +++ libpurple/conversation.h	3f2f721e9f7005bbacd5c9495c92a8ee96713876
| |   @@ -115,7 +115,8 @@ typedef enum
| |    	PURPLE_MESSAGE_DELAYED     = 0x0400, /**< Delayed message.         */
| |    	PURPLE_MESSAGE_RAW         = 0x0800, /**< "Raw" message - don't
| |    	                                        apply formatting         */
| |   -	PURPLE_MESSAGE_IMAGES      = 0x1000  /**< Message contains images  */
| |   +	PURPLE_MESSAGE_IMAGES      = 0x1000, /**< Message contains images  */
| |   +	PURPLE_MESSAGE_NOTIFY      = 0x2000  /**< Message is a notification */
| |    
| |    } PurpleMessageFlags;
| |    
| |   ============================================================
| |   --- libpurple/protocols/msn/switchboard.c	704868226e4140964fe1682669ae523472a84c3c
| |   +++ libpurple/protocols/msn/switchboard.c	e5e9a4e38808f28ee58aeb4fe86909f61a5a9803
| |   @@ -955,7 +955,7 @@ nudge_msg(MsnCmdProc *cmdproc, MsnMessag
| |    
| |    	str = g_strdup_printf(_("%s just sent you a Nudge!"), username);
| |    	g_free(username);
| |   -	msn_switchboard_report_user(swboard, PURPLE_MESSAGE_SYSTEM, str);
| |   +	msn_switchboard_report_user(swboard, PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NOTIFY, str);
| |    	g_free(str);
| |    }
| |    
| |   ============================================================
| |   --- libpurple/protocols/yahoo/yahoo.c	d15fdd463129122482cc768b9daab2e40e54f743
| |   +++ libpurple/protocols/yahoo/yahoo.c	c35988a1c00d531a8c9a807960249efed4731dd6
| |   @@ -859,10 +859,25 @@ static void yahoo_process_message(Purple
| |    		purple_util_chrreplace(m, '\r', '\n');
| |    
| |    		if (!strcmp(m, "<ding>")) {
| |   -			PurpleConversation *c = purple_conversation_new(PURPLE_CONV_TYPE_IM,
| |   -			                                            purple_connection_get_account(gc), im->from);
| |   -			purple_conv_im_write(PURPLE_CONV_IM(c), "", _("Buzz!!"), PURPLE_MESSAGE_NICK|PURPLE_MESSAGE_RECV,
| |   -			                   im->time);
| |   +			PurpleBuddy *buddy;
| |   +			PurpleAccount *account;
| |   +			PurpleConversation *c;
| |   +			char *username, *str;
| |   +			
| |   +			account = purple_connection_get_account(gc);
| |   +			c = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, im->from);
| |   +			
| |   +			if ((buddy = purple_find_buddy(account, im->from)) != NULL)
| |   +				username = g_markup_escape_text(purple_buddy_get_alias(buddy), -1);
| |   +			else
| |   +				username = g_markup_escape_text(im->from, -1);
| |   +			
| |   +			str = g_strdup_printf(_("%s just sent you a Buzz!"), username);
| |   +			
| |   +			purple_conversation_write(c, NULL, str, PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NOTIFY, im->time);
| |   +
| |   +			g_free(username);
| |   +			g_free(str);
| |    			g_free(m);
| |    			g_free(im);
| |    			continue;
| |   @@ -3737,7 +3752,7 @@ yahoopurple_cmd_buzz(PurpleConversation 
| |    	purple_debug(PURPLE_DEBUG_INFO, "yahoo",
| |    	           "Sending <ding> on account %s to buddy %s.\n", username, c->name);
| |    	purple_conv_im_send(PURPLE_CONV_IM(c), "<ding>");
| |   -	purple_conv_im_write(PURPLE_CONV_IM(c), "", _("Buzz!!"), PURPLE_MESSAGE_NICK|PURPLE_MESSAGE_SEND, time(NULL));
| |   +	purple_conversation_write(c, NULL, _("You have just sent a Buzz!"), PURPLE_MESSAGE_SYSTEM, time(NULL));
| |    	return PURPLE_CMD_RET_OK;
| |    }
| |    

To get the patch for this revision, please do this:
mtn log --last 1 --diffs --from fba53203d9fe0ebd98157bdc6c7faeb2b149908b


More information about the Commits mailing list