changeset 15572:8eaa1f23443b

merge of '017eca04bf34860761af5c6fe3ff1c1ea28f0fc3' and '01871e9d112ea919162917990541a5fe9132611d'
author Sean Egan <seanegan@gmail.com>
date Mon, 05 Feb 2007 12:13:45 +0000
parents 442128853bdb (current diff) 01c293ca8196 (diff)
children 042a9d405bf6 ad9e09c331f5
files configure.ac doc/gaim.1.in
diffstat 21 files changed, 1032 insertions(+), 667 deletions(-) [+]
line wrap: on
line diff
--- a/AUTHORS	Mon Feb 05 12:13:18 2007 +0000
+++ b/AUTHORS	Mon Feb 05 12:13:45 2007 +0000
@@ -30,6 +30,7 @@
 Etan 'deryni' Reisner - Developer
 Tim 'marv' Ringenbach - Developer
 Luke 'LSchiere' Schierer - Support
+Megan 'Cae' Schneider (support/QA)
 Evan Schoenberg - Developer
 Stu 'nosnilmot' Tomlinson - Developer
 Nathan 'faceprint' Walp - Developer
--- a/COPYRIGHT	Mon Feb 05 12:13:18 2007 +0000
+++ b/COPYRIGHT	Mon Feb 05 12:13:45 2007 +0000
@@ -97,6 +97,7 @@
 Andrew Echols
 John Eckerdal
 Sean Egan <seanegan@gmail.com>
+Markus Elfring
 Nelson Elhage
 Ignacio J. Elia
 Brian Enigma
--- a/configure.ac	Mon Feb 05 12:13:18 2007 +0000
+++ b/configure.ac	Mon Feb 05 12:13:45 2007 +0000
@@ -889,10 +889,11 @@
 AC_PATH_PROG(gaimpath, gaim)
 
 dnl #######################################################################
-dnl # Check for DBUS libraries
+dnl # Check for D-Bus libraries
 dnl #######################################################################
 
-AC_ARG_ENABLE(dbus, [AC_HELP_STRING([--enable-dbus], [enable DBUS support])], , enable_dbus=yes)
+AC_ARG_ENABLE(dbus, [AC_HELP_STRING([--enable-dbus], [enable D-Bus support])], , enable_dbus=yes)
+AC_ARG_ENABLE(nm, [AC_HELP_STRING([--enable-nm], [enable NetworkManager support (buggy) (requires D-Bus)])], enable_libnm=yes, enable_libnm=no)
 
 if test "x$enable_dbus" = "xyes" ; then
 	AC_CHECK_PROG(enable_dbus, dbus-binding-tool, yes, no)
@@ -908,18 +909,24 @@
 		enable_dbus=no
 	])
 
-dnl     Check for libnm_glib; if we don't have it, oh well
-	LIBNM_CFLAGS=""
-	LIBNM_LIBS=""
-	PKG_CHECK_MODULES(LIBNM, libnm_glib,
-	[
-    		AC_DEFINE(HAVE_LIBNM, 1, [Check to see if we have NetworkManager])
-	],
-	[
-                AC_MSG_RESULT(no)
-	])
-	AC_SUBST(LIBNM_CFLAGS)
-	AC_SUBST(LIBNM_LIBS)
+dnl Check for libnm_glib; if we don't have it, oh well
+	if test "x$enable_libnm" = "xyes" ; then
+		LIBNM_CFLAGS=""
+		LIBNM_LIBS=""
+		PKG_CHECK_MODULES(LIBNM, libnm_glib,
+		[
+			AC_DEFINE(HAVE_LIBNM, 1, [Check to see if we have NetworkManager])
+			enable_libnm=yes
+		],
+		[
+			AC_MSG_RESULT(no)
+			enable_libnm=no
+		])
+		AC_SUBST(LIBNM_CFLAGS)
+		AC_SUBST(LIBNM_LIBS)
+	fi
+else
+	enable_libnm=no
 fi
 
 dnl #######################################################################
@@ -928,7 +935,7 @@
 
 dnl Python scripts are used to auto-generate about 3000 lines of C
 dnl and XML code that wraps (part of) the existing Gaim API so that
-dnl it is now accessible through DBUS.
+dnl it is now accessible through D-Bus.
 
 dnl Python is only required if --enable-dbus is used, and only for
 dnl the build process to generate the code, not for running gaim.
@@ -1011,14 +1018,14 @@
 		fi
 	fi
 	AC_MSG_RESULT([$DBUS_SERVICES_DIR])
-	AC_DEFINE(HAVE_DBUS, 1, [Define if we are re using DBUS.])
+	AC_DEFINE(HAVE_DBUS, 1, [Define if we are re using D-Bus.])
 fi
 AC_SUBST(DBUS_SERVICES_DIR)
 
 if test "x$enable_dbus" = "xyes" ; then
-	echo "Building with DBUS support"
+	echo "Building with D-Bus support"
 else
-	echo "Building without DBUS support"
+	echo "Building without D-Bus support"
 fi
 
 AM_CONDITIONAL(ENABLE_DBUS, test "x$enable_dbus" = "xyes")
@@ -1890,7 +1897,7 @@
 		   gaim.apspec
 		   gaim.service
 		   doc/Makefile
-		   doc/gaim.1
+		   doc/pidgin.1
 		   doc/gaim-text.1
 		   m4macros/Makefile
 		   pidgin/Makefile
@@ -1985,10 +1992,11 @@
 echo Protocols to link statically.. : $STATIC_PRPLS
 echo
 echo Build with GStreamer support.. : $enable_gst
-echo Build with DBUS support....... : $enable_dbus
+echo Build with D-Bus support...... : $enable_dbus
 if test "x$enable_dbus" = "xyes" ; then
-	eval eval echo DBUS services directory....... : $DBUS_SERVICES_DIR
+	eval eval echo D-Bus services directory...... : $DBUS_SERVICES_DIR
 fi
+echo Build with NetworkManager..... : $enable_libnm
 echo SSL Library/Libraries......... : $msg_ssl
 echo Build with Cyrus SASL support. : $enable_cyrus_sasl
 echo Use kerberos 4 with zephyr.... : $kerberos
--- a/console/libgnt/gnttree.c	Mon Feb 05 12:13:18 2007 +0000
+++ b/console/libgnt/gnttree.c	Mon Feb 05 12:13:45 2007 +0000
@@ -1195,17 +1195,16 @@
 				tree->top = get_prev(row);
 			else
 				tree->top = get_next(row);
-			if (tree->current == row)
-				tree->current = tree->top;
 		}
-		else if (tree->current == row)
+		if (tree->current == row)
 		{
 			if (tree->current != tree->root)
 				tree->current = get_prev(row);
 			else
 				tree->current = get_next(row);
+			tree_selection_changed(tree, row, tree->current);
 		}
-		else if (tree->bottom == row)
+		if (tree->bottom == row)
 		{
 			tree->bottom = get_prev(row);
 		}
--- a/doc/Makefile.am	Mon Feb 05 12:13:18 2007 +0000
+++ b/doc/Makefile.am	Mon Feb 05 12:13:45 2007 +0000
@@ -1,4 +1,4 @@
-man_MANS = gaim.1 gaim-text.1
+man_MANS = pidgin.1 gaim-text.1
 
 EXTRA_DIST = \
 	C-HOWTO.dox \
@@ -12,7 +12,6 @@
 	conversation-signals.dox \
 	core-signals.dox \
 	dbus-server-signals.dox \
-	gaim.1.in \
 	gaims_funniest_home_convos.txt \
 	gaim-text.1.in \
 	gtkaccount-signals.dox \
@@ -23,6 +22,7 @@
 	gtkrc-2.0 \
 	log-signals.dox \
 	notify-signals.dox \
+	pidgin.1.in \
 	plugin-i18n.dox \
 	plugin-ids.dox \
 	plugin-signals.dox \
--- a/doc/gaim.1.in	Mon Feb 05 12:13:18 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,606 +0,0 @@
-.\" Copyright (c) 2000, Dennis Ristuccia <dennis@dennisr.net>
-.\"
-.\" This is free documentation; you can redistribute it and/or
-.\" modify it under the terms of the GNU General Public License as
-.\" published by the Free Software Foundation; either version 2 of
-.\" the License, or (at your option) any later version.
-.\"
-.\" The GNU General Public License's references to "object code"
-.\" and "executables" are to be interpreted as the output of any
-.\" document formatting or typesetting system, including
-.\" intermediate and printed output.
-.\"
-.\" This manual is distributed in the hope that it will be useful,
-.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
-.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-.\" GNU General Public License for more details.
-.\"
-.\" You should have received a copy of the GNU General Public
-.\" License along with this manual; if not, write to the Free
-.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
-.\" USA.
-.TH gaim 1
-.SH NAME
-Gaim v@VERSION@ \- Instant Messaging client
-.SH SYNOPSIS
-.TP 5
-\fBgaim \fI[options]\fR
-
-.SH DESCRIPTION
-.PP
-\fBgaim\fR is a gtk2-based modular messaging client capable of using
-AIM, MSN, Yahoo!, Jabber, ICQ, IRC, SILC, Novell GroupWise, Lotus Sametime,
-Zephyr, Gadu-Gadu, and QQ all at once. It has many common features found in
-other clients, as well as many unique features.  Gaim is not endorsed by or
-affiliated with America Online, ICQ, Microsoft, or Yahoo.
-
-.SH OPTIONS
-The following options are provided by \fBgaim\fR using the standard GNU
-command line syntax:
-.TP
-.B \-d, \-\-debug
-Print debugging messages to stdout.  These are the same debugging messages
-that are displayed in the \fBDebug\fR window.
-.TP
-.B \-c, \-\-config=\fIDIR\fB
-Use \fIDIR\fR as the directory for config files instead of \fI~/.gaim\fR.
-.TP
-.B \-h, \-\-help
-Print this help and exit.
-.TP
-.B \-n, \-\-nologin
-Don't automatically login when \fBgaim\fR starts.  Sets all accounts to
-Offline.
-.TP
-.B \-l, \-\-login[=\fINAME\fR,\fINAME\fR,...]
-Sign in the comma-separated list of accounts provided, in addition to the
-accounts that would be logged in anyway.  If you do not specify such a
-comma-separated list, your first account will be signed in.
-.TP
-.B \-v, \-\-version
-Display the version information window.
-
-.SH BUDDY LIST
-The \fBBuddy List\fR window is \fBgaim\fR's main interface window.  Using
-this window you can see which of your buddies is online, away, idle, etc.
-You can also add and remove buddies from your buddy list.
-
-The \fBBuddy List\fR window contains a list of your buddies who are online
-and have allowed you to be notified of their presence.  The icon to the
-left of each buddy indicates the buddy's current state and the protocol
-they are using.  Double clicking a buddy will open a new \fBConversation\fR
-window.  Right clicking will pop up a menu:
-.TP
-.B Get Info
-Retrieves and displays information about the buddy.  This information is
-also known as a Profile.
-.TP
-.B IM
-Opens a new \fBConversation\fR window to the selected buddy.
-.TP
-.B Send File
-Sends a file to the selected buddy (only available on protocols that support
-file transfer).
-.TP
-.B Add Buddy Pounce
-A Buddy Pounce is a configurable automated action to be performed when the
-buddy's state changes.  This will open the \fBBuddy Pounce\fR dialog to be
-discussed later.
-.TP
-.B View Log
-\fBgaim\fR is capable of automatically log its activities.  These logs are
-either plain text files (with a .log extension) or  html files (with a
-\&.html extension) located under the \fI~/.gaim/logs\fR directory.  This
-menu command will attempt to view this file with \fBgaim\fR's internal log
-viewer.
-.TP
-.B Alias
-Create an alias for this buddy.  This will open up a new dialog in which
-one can give this buddy an alternate name to appear on the buddy list and
-in conversations.
-
-For example, if a buddy's name screen name was jsmith1281xx and his real
-name was 'John Q. Smith,' one could create an alias as to identify the
-buddy by his common name.
-.LP
-The remainder of the menu will consist of protocol specific commands.
-These commands vary depending on the protocol.
-.LP
-At the bottom of the \fBBuddy List\fR are several buttons (if enabled in
-\fBPreferences\fR):
-.TP
-.B IM
-Opens a new \fBConversation\fR window to to the selected buddy, or brings
-up the \fBNew Message\fR dialog box if no buddy is selected.
-.TP
-.B Info
-Retrieves and display information about the selected buddy, or brings up
-the \fBGet User Info\fR dialog box if no buddy is selected.
-.TP
-.B Chat
-Brings up the \fBJoin Chat\fR dialog box, prompting the user to select
-which username to use and what chat group to join.
-.TP
-.B Away
-Brings up a menu of all available \fBAway Messages\fR.  If an item is
-selected, all online accounts will use this item as their away message.
-
-.SH ACCOUNT EDITOR
-The account editor consists of a list of accounts and information about
-them.  Clicking \fIDelete\fR will delete the currently selected account.
-Clicking \fIAdd\fR or \fIModify\fR will invoke a \fBModify Account\fR
-window.  Here, you can add or alter account information.  When creating a
-new account, you will submit your screen name and password.  You will also
-choose your protocol.
-
-If \fIRemember Password\fR is chosen, the password will be saved in
-\fBgaim\fR's configuration file.
-
-If \fIAuto-Login\fR is chosen, this account will automatically login upon
-starting \fBgaim\fR.
-
-Each protocol has it's own specific options that can be found in the
-modify screen.
-
-.SH PREFERENCES
-
-All options take effect immediately.
-
-.SH Interface
-
-\fIDisplay remote nicknames if no alias is set\fR: Toggles whether server
-nickname data should be used if no local alias exists.
-
-.SH Buddy List
-\fISorting\fR: Toggles the order in which buddies are shown in your
-\fBBuddy List\fR between none, alphabetical, by status and by log size.
-
-\fIShow buttons as\fR: Toggles between picture-only, text-only, picture and
-text or no buttons view of the buttons on the \fBBuddy List\fR.
-
-\fIRaise window on events\fR: Tells \fBgaim\fR to bring the \fBBuddy
-List\fR window to the top when buddies sign in or out.
-
-\fIShow numbers in groups\fR: The number of buddies from each group
-currently logged in will be shown along with the total number of buddies in
-the group.
-
-\fIShow buddy icons\fR: Toggles the display of buddies' custom icons.
-
-\fIShow warning levels\fR: Each buddy's warning level will be displayed
-next to the screen name. As a buddy's warning level increases, outgoing
-messages are more and more severely rate-limited.
-
-\fIShow idle times\fR: The amount of time each buddy has been idle will be
-displayed next to the screen name (if the buddy has opted to have their
-client report this information).
-
-\fIDim idle buddies\fR: If enabled, idle buddies will be displayed in grey
-text instead of black text.
-
-\fIAutomatically expand contacts\fR: If enabled, contacts will
-automatically expand to show the associated buddies when the mouse is held
-over the contact for a short period.
-
-.SH Conversations
-
-\fIShow buttons as...\fR: The selected item will determine whether
-picture-only, text-only, combined picture/text, or no buttons will be used
-for \fBConversation\fR windows.
-
-\fIEnable "slash" commands\fR: Determines whether messages starting with
-"slash" (eg. /help) will be interpreted as commands by \fBgaim\fR, or if they
-will just be sent as messages.
-
-\fIShow formatting toolbar\fR: Display the formatting toolbar between the
-upper and lower text boxes in conversations.
-
-\fIShow aliases in tabs/titles\fR: Displays buddy alias instead of screen
-name in window tabs and titles.
-
-\fIShow buddy icons\fR: For protocols that support it, buddy icons allow
-buddies to send small pictures to be displayed during the course of a
-conversation. Turning this option off hides those pictures.
-
-\fIEnable buddy icon animation\fR: If these pictures happen to be animated,
-this option will enable the animation, otherwise only the first frame will
-be displayed.
-
-\fINotify buddies that you are typing to them\fR: Some protocols allow
-clients to tell their buddies when they are typing. This option enables
-this feature for protocols that supports it.
-
-\fIRaise IM windows on events\fR: If enabled, IM \fBConversation\fR windows
-will be brought to the top when new messages are received.
-
-\fIRaise Chat windows on events\fR: If enabled, chat \fBConversation\fR windows
-will be brought to the top when new messages are received.
-
-\fIUse multi-colored screen names in chats\fR: Color code the screen names of
-users in chat rooms.
-
-.TP
-.B Tab Options
-\fIShow IMs and chats in tabbed windows\fR: Tabbed chatting allows one to
-have multiple conversations without multiple windows.
-
-\fIShow close buttons on tabs\fR: Adds a close button to each tab.
-
-\fITab Placement...\fR: Specifies where tabs are shown in the conversation
-window.
-
-\fI New conversation placement...\fR: Determines where new conversations will
-be placed (Last created window / New window / windows grouped by group or
-account / separate windows for IMs and Chats).
-
-.TP
-.B Message Text
-\fIShow timestamp on messages\fR: Toggles the timestamp behavior for
-conversations.  Per-conversation behavior can be changed by pressing
-\fIF2\fR in the \fBConversation\fR window.
-
-\fIHighlight misspelled words\fR: Toggles highlighting of misspelled words
-as you type.
-
-\fIIgnore colors/font faces/font sizes\fR: Tells \fBgaim\fR to disregard
-buddies' color/font/size information in displaying IMs or Chats.
-
-\fIDefault Formatting\fR: Allows specifying the default formatting to apply
-to all outgoing messages (only applicable to protocols that support
-formatting in messages).
-
-.TP
-.B Shortcuts
-Allows the user to determine which keyboard shortcuts are available.
-
-.TP
-.B Smiley Themes
-Allows the user to choose between different smiley themes. The "none" theme
-will disable graphical emoticons - they will be displayed as text instead.
-
-.SH Sounds
-
-\fISounds while away\fR: Determines whether sounds are played when an away
-message is up.
-
-\fISound Method\fR lets the user choose between different playback methods.
-The user can also manually enter a command to be executed when a sound is
-to be played (\fI%s\fR expands to the full path to the file name).
-
-.TP
-.B Sound Events
-Lets the user choose when and what sounds are to be played.
-
-.SH Network
-
-.TP
-.B IP Address
-\fIAutodetect IP Address\fR: \fBGaim\fR will attempt to automatically determine
-your IP address for use in file transfers and Direct IMs.
-
-\fIPublic IP\fR: What IP address to use for file transfer and Direct IMs. This
-is mainly useful for users with multiple network interfaces or behind NAT.
-
-.TP
-.B Ports
-\fIManually specify range of ports to listen on\fR: Specify specific ports to
-listen on, overriding any defaults.
-
-.TP
-.B Proxy Server
-The configuration section to enable \fBgaim\fR to operate through a proxy
-server.  \fBgaim\fR currently supports SOCKS 4/5 and HTTP proxies.
-
-.SH Browser
-
-Allows the user to select \fBgaim\fR's default web browser.  Firefox, Galeon,
-Konqueror, Mozilla, Netscape and Opera are supported natively.  The user
-can also manually enter a command to be executed when a link is clicked
-(\fI%s\fR expands to the URL).  For example, \fIxterm -e lynx "%s"\fR will
-open the link with lynx.  \fIOpen new window by default\fR makes the
-browser use a new window instead of using the current window (or spawning a
-new tab).
-
-.SH Logging
-
-\fIMessage Logs\fR lets the user choose whether \fBConversations\fR and/or
-\fBBuddy Chats\fR will be logged as well as whether logs will be in HTML or
-plain text format.  \fISystem Logs\fR describes the types of events to be
-logged.
-
-.SH Away / Idle
-
-\fIQueue new messages when away\fR: Messages received since going Away will
-not be shown until away status is removed.
-
-\fISend auto-response\fR: If someone messages you while away, your
-auto-response will be sent.
-
-\fIOnly send auto-response when idle\fR: If someone messages you while
-away, your auto-response will only be sent if \fBgaim\fR decides that the
-connection is idle.
-
-\fIIdle time reporting\fR: If \fINone\fR is selected, account idle time
-will not be reported.  \fIGaim usage\fR infers your idle time from your
-usage of \fBgaim\fR.  \fIX usage\fR infers your idle time from \fBX\fR
-(this option may not be universally available).
-
-\fIAuto-away\fR: Determines if and under what conditions \fBgaim\fR will
-automatically turn on the Away status.
-
-.TP
-.B Away Messages
-Lets the user add/edit/remove available \fBAway Messages\fR.
-
-.SH Plugins
-
-Allows the user to enable add-on plugins for \fBgaim\fR.  Several of these
-come with \fBgaim\fR, while others must be downloaded separately.  The
-\fIDescription\fR field gives the plugin author's description of the
-plugin, while the \fIDetails\fR field gives the plugin's authorship, URL,
-and file name/location information.
-
-Some plugins can be configured.  If you load such a plugin, its
-configuration preferences will appear as a submenu to \fBPlugins\fR, with
-the submenu title determined by the plugin's name.
-
-.SH Protocols
-
-Protocols provide protocol specific preferences here.
-
-.SH CONVERSATIONS
-When starting a new conversation, the user is presented with the
-\fBConversation\fR window.  The conversation appears in the upper text box
-and the user types his/her message in the lower text box.  Between the two
-is a row of settings, represented by icons.  Some or all buttons may not be
-active if the protocol does not support the specific formatting. From left
-to right:
-.TP
-.B Bold
-Turns on/off bold.
-.TP
-.B Italics
-Turns on/off italics.
-.TP
-.B Underline
-Turns on/off underline.
-.TP
-.B Decrease font size
-Increases the size of the message text.
-.TP
-.B Increase font size
-Decreases the size of the message text.
-.TP
-.B Select a foreground color
-Changes the foreground color of the message text.
-.TP
-.B Select a background color
-Changes the background color of the message text.
-.TP
-.B Add image
-Inserts an in-line image in the message.
-.TP
-.B Add hyperlink
-Adds a clickable link to the message.
-.TP
-.B Add smiley
-Adds an emoticon (smiley) to your message.
-
-Beneath the lower text box is a row of buttons that execute commands:
-.TP
-.B Warn
-This issues a warning to the other person in the conversation (not
-available in all protocols).
-.TP
-.B Block
-This adds the other person to your deny list (not available in all
-protocols).
-.TP
-.B Send File
-Send a file to this user. This option is only available on protocols where
-\fBGaim\fR supports file transfer.
-.TP
-.B Add
-This adds this user to your buddy list.  This option is not available if
-the user is already on your list.
-.TP
-.B Remove
-This removes this user from your buddy list.  This option is not available
-if the user is not on your list.
-.TP
-.B Info
-This gets information (a profile) about the other person in the
-conversation (not available in all protocols).
-.TP
-.B Send
-This sends what's currently in the lower text box
-
-.SH BUDDY CHATS
-For protocols that allow it, \fBBuddy Chats\fR can be entered through the
-\fIFile\fR menu or the \fIChat\fR button at the bottom of the \fBBuddy
-List\fR's \fBOnline\fR tab.
-
-Additional commands available in chat, depending on the protocol are:
-.TP
-.B Whisper
-The text will appear in the chat conversation, but it will only be visible
-to the sender and the receiver.
-.TP
-.B Invite
-Invite other people to join the chat room.
-.TP
-.B Ignore
-Ignore anything said by the chosen person
-.TP
-.B Set Topic
-Set the topic of the chat room.  This is usually a brief sentence
-describing the nature of the chat--an explanation of the chat room's name.
-
-.SH AWAY MESSAGES
-Most protocols allow for away messages.  When a user is \fIAway\fR, he can
-leave an informative message for others to see.  The \fBAway\fR submenu of
-the \fBTools\fR menu is used to add and remove away messages.
-
-\fINew Away Message\fR provides space for one to enter an away message and
-a title for that message.  If \fISave\fR or \fISave & Use\fR are chosen,
-this message will be saved.  It can later be referred to by the title given
-to it.
-
-\fIRemove Away Message\fR is a submenu containing the titles of saved away
-messages.  Clicking on one of these titles will remove the away message
-associated with it.
-
-The rest of the \fIaway\fR menu provides the user with a way to assign
-different away messages to different connections.  Choosing \fISet All
-Away\fR will set away all the connections capable of the away state.
-
-.SH BUDDY POUNCE
-A Buddy Pounce is an automated trigger that occurs when a buddy returns to
-a normal state from an away state.  The \fBNew Buddy Pounce\fR dialog box
-can be activated by selecting the \fIBuddy Pounce\fR submenu from the
-\fBTools\fR menu. A pounce can be set to occur on any combination of the
-events listed, and any combination of actions can result.  If \fISave this
-pounce after activation\fR is checked, the trigger will remain until it is
-removed from the \fIRemove Buddy Pounce\fR menu.
-
-.SH PLUGINS
-\fBGaim\fR allows for dynamic loading of plugins to add extra functionality
-to \fBgaim\fR.  Plugins can be enabled and configured from the
-\fBPreferences\fR window.  See \fIplugins/HOWTO\fR for more information on
-writing plugins.
-
-.SH PERL
-\fBGaim\fR allows for perl scripting.  See \fIPerl Scripting HOWTO\fR in
-the Gaim documentation for more information about perl scripting.
-
-.SH TCL
-\fBGaim\fR allows for Tcl scripting. See \fIplugins/tcl/TCL-HOWTO\fR for
-more information about Tcl scripting.
-
-.SH FILES
-\fI@prefix@/bin/gaim\fR: \fBgaim\fR's location.
-.br
-\fI@prefix@/lib/gaim/\fR: \fBgaim\fR's plugins directory.
-.br
-\fI~/.gaim/prefs.xml\fR: \fBgaim\fR's configuration file.
-.br
-\fI~/.gaim/accounts.xml\fR: information about your accounts.
-.br
-\fI~/.gaim/status.xml\fR: stores your away messages.
-.br
-\fI~/.gaim/pounces.xml\fR: stores your buddy pounces.
-.br
-\fI~/.gaim/logs/PROTOCOL/ACCOUNT/SCREENNAME/DATE.log\fR: conversation logs.
-.br
-\fI~/.gaim/blist.xml\fR: the buddy list.
-.br
-\fI~/.gaim/plugins/\fR: users local plugins
-
-.SH BUGS
-Known bugs are listed at
-.br
-\fIhttp://sourceforge.net/tracker/?group_id=235&atid=100235\fR
-
-.SH PATCHES
-If you fix a bug in \fBgaim\fR (or otherwise enhance it), please submit a
-patch (using \fIcvs diff -up > my.diff\fR against the latest CVS version)
-at
-.br
-\fIhttp://sourceforge.net/tracker/?func=add&group_id=235&atid=300235\fR
-
-Before sending a bug report, please verify that you have the latest
-version of \fBgaim\fR.  Many bugs (major and minor) are fixed
-at each release, and if yours is out of date, the problem may already
-have been solved.
-
-.SH SEE ALSO
-\fIhttp://gaim.sourceforge.net/\fR
-.br
-\fIhttp://www.sourceforge.net/projects/gaim/\fR
-
-.SH LICENSE
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful, but
-\fBWITHOUT ANY WARRANTY\fR; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-.SH AUTHORS
-\fBGaim\fR's active developers are:
-
- Sean Egan (lead developer) <\fIseanegan@gmail.com\fR>
-.br
- Daniel 'datallah' Atallah
-.br
- Ethan 'Paco-Paco' Blanton (developer)
-.br
- Mark 'KingAnt' Doliner (developer) <\fIthekingant@users.sourceforge.net\fR>
-.br
- Christian 'ChipX86' Hammond (developer & webmaster) <\fIchipx86@chipx86.com\fR>
-.br
- Gary 'grim' Kramlich
-.br
- Richard 'rlaager' Laager <\fIrlaager@users.sf.net\fR>
-.br
- Christopher 'siege' O'Brien
-.br
- Etan 'deryni' Reisner
-.br
- Tim 'marv' Ringenbach <\fImarv_sf@users.sf.net\fR>
-.br
- Luke 'LSchiere' Schierer (support)
-.br
- Stu 'nosnilmot' Tomlinson
-.br
- Nathan 'faceprint' Walp (developer)
-.br
-
-
-Our crazy patch writers include:
-
-Ka-Hing 'javabsp' Cheung
-.br
-Sadrul Habib Chowdhury
-.br
-Felipe 'shx' Contreras
-.br
-Decklin Foster
-.br
-Peter 'Bleeter' Lawler
-.br
-Robert 'Robot101' McQueen
-.br
-Benjamin Miller
-.br
-Kevin 'SimGuy' Stange
-.br
-
-
-The retired developers of \fBgaim\fR are:
-
- Herman Bloggs (win32 port) <\fIherman@bluedigits.com\fR>
-.br
- Jim Duchek <\fIjim@linuxpimps.com\fR> (maintainer)
-.br
- Rob Flynn <\fIgaim@robflynn.com\fR> (maintainer)
-.br
- Adam Fritzler (libfaim maintainer)
-.br
- Syd Logan (hacker and designated driver [lazy bum])
-.br
- Jim Seymour (Jabber developer)
-.br
- Mark Spencer (original author) <\fImarkster@marko.net\fR>
-.br
- Eric Warmenhoven (former lead developer) <\fIeric@warmenhoven.org\fR>
-.br
-
-This manpage was originally written by Dennis Ristuccia <\fIdennis@dennisr.net\fR>.  It has been updated and largely rewritten by Sean Egan <\fIseanegan@gmail.com\fR> and Ben Tegarden <\fItegarden@uclink.berkeley.edu\fR>.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/pidgin.1.in	Mon Feb 05 12:13:45 2007 +0000
@@ -0,0 +1,610 @@
+.\" Copyright (c) 2000, Dennis Ristuccia <dennis@dennisr.net>
+.\"
+.\" This is free documentation; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of
+.\" the License, or (at your option) any later version.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual is distributed in the hope that it will be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public
+.\" License along with this manual; if not, write to the Free
+.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
+.\" USA.
+.TH pidgin 1
+.SH NAME
+Pidgin v@VERSION@ \- Instant Messaging client
+.SH SYNOPSIS
+.TP 5
+\fBpidgin \fI[options]\fR
+
+.SH DESCRIPTION
+.PP
+Pidgin is a modular messaging client capable of using AIM, MSN, Yahoo!, Jabber,
+ICQ, IRC, SILC, SIP/SIMPLE Novell GroupWise, Lotus Sametime, Bonjour,
+Zephyr, Gadu-Gadu, and QQ all at once.  It has many common features found in
+other clients, as well as many unique features.  Pidgin is not endorsed by or
+affiliated with America Online, ICQ, Microsoft, or Yahoo.
+
+.SH OPTIONS
+The following options are provided by Pidgin using the standard GNU
+command line syntax:
+.TP
+.B \-c, \-\-config=\fIDIR\fB
+Use \fIDIR\fR as the directory for config files instead of \fI~/.gaim\fR.
+.TP
+.B \-d, \-\-debug
+Print debugging messages to stdout.  These are the same debugging messages
+that are displayed in the \fBDebug Window\fR.
+.TP
+.B \-h, \-\-help
+Print a summary of command line options and exit.
+.TP
+.B \-n, \-\-nologin
+Don't automatically login when Pidgin starts.  Sets the global status to
+\fBOffline\fR.
+.TP
+.B \-l, \-\-login[=\fINAME\fR,\fINAME\fR,...]
+Sign in the comma-separated list of accounts provided, in addition to the
+accounts that would be logged in anyway.  If you do not specify such a
+comma-separated list, your first account will be signed in.
+.TP
+.B \-v, \-\-version
+Print the current version and exit.
+
+.SH BUDDY LIST
+The \fBBuddy List\fR window is Pidgin's main interface window.  Using
+this window you can see which of your buddies is online, away, idle, etc.
+You can also add and remove buddies from your buddy list.
+
+The \fBBuddy List\fR window contains a list of your buddies who are online
+and have allowed you to be notified of their presence.  The icon to the
+left of each buddy indicates the buddy's current state and the protocol
+they are using.  Double clicking a buddy will open a new \fBConversation\fR
+window.  Right clicking will pop up a menu:
+.TP
+.B Get Info
+Retrieves and displays information about the buddy.  This information is
+also known as a Profile.
+.TP
+.B IM
+Opens a new \fBConversation\fR window to the selected buddy.
+.TP
+.B Send File
+Sends a file to the selected buddy (only available on protocols that support
+file transfer).
+.TP
+.B Add Buddy Pounce
+A Buddy Pounce is a configurable automated action to be performed when the
+buddy's state changes.  This will open the \fBBuddy Pounce\fR dialog to be
+discussed later.
+.TP
+.B View Log
+Pidgin is capable of automatically log its activities.  These logs are
+either plain text files (with a .txt extension) or html files (with a
+\&.html extension) located under the \fI~/.gaim/logs\fR directory.  This
+menu command will display Pidgin's log viewer with logs loaded for that
+buddy or chat.
+.TP
+.B Alias
+Create an alias for this buddy.  This will open up a new dialog in which
+one can give this buddy an alternate name to appear on the buddy list and
+in conversations.
+
+For example, if a buddy's name screen name was jsmith1281xx and his real
+name was 'John Q. Smith,' one could create an alias as to identify the
+buddy by his common name.
+.LP
+The remainder of the menu will consist of protocol specific commands.
+These commands vary depending on the protocol.
+.LP
+At the bottom of the \fBBuddy List\fR are several buttons (if enabled in
+\fBPreferences\fR):
+.TP
+.B IM
+Opens a new \fBConversation\fR window to to the selected buddy, or brings
+up the \fBNew Message\fR dialog box if no buddy is selected.
+.TP
+.B Info
+Retrieves and display information about the selected buddy, or brings up
+the \fBGet User Info\fR dialog box if no buddy is selected.
+.TP
+.B Chat
+Brings up the \fBJoin Chat\fR dialog box, prompting the user to select
+which username to use and what chat group to join.
+.TP
+.B Away
+Brings up a menu of all available \fBAway Messages\fR.  If an item is
+selected, all online accounts will use this item as their away message.
+
+.SH ACCOUNT EDITOR
+The account editor consists of a list of accounts and information about
+them.  Clicking \fIDelete\fR will delete the currently selected account.
+Clicking \fIAdd\fR or \fIModify\fR will invoke a \fBModify Account\fR
+window.  Here, you can add or alter account information.  When creating a
+new account, you will submit your screen name and password.  You will also
+choose your protocol.
+
+If \fIRemember Password\fR is chosen, the password will be saved in
+Pidgin's configuration file.
+
+If \fIAuto-Login\fR is chosen, this account will automatically login upon
+starting Pidgin.
+
+Each protocol has it's own specific options that can be found in the
+modify screen.
+
+.SH PREFERENCES
+
+All options take effect immediately.
+
+.SH Interface
+
+\fIDisplay remote nicknames if no alias is set\fR: Toggles whether server
+nickname data should be used if no local alias exists.
+
+.SH Buddy List
+\fISorting\fR: Toggles the order in which buddies are shown in your
+\fBBuddy List\fR between none, alphabetical, by status and by log size.
+
+\fIShow buttons as\fR: Toggles between picture-only, text-only, picture and
+text or no buttons view of the buttons on the \fBBuddy List\fR.
+
+\fIRaise window on events\fR: Tells Pidgin to bring the \fBBuddy
+List\fR window to the top when buddies sign in or out.
+
+\fIShow numbers in groups\fR: The number of buddies from each group
+currently logged in will be shown along with the total number of buddies in
+the group.
+
+\fIShow buddy icons\fR: Toggles the display of buddies' custom icons.
+
+\fIShow warning levels\fR: Each buddy's warning level will be displayed
+next to the screen name. As a buddy's warning level increases, outgoing
+messages are more and more severely rate-limited.
+
+\fIShow idle times\fR: The amount of time each buddy has been idle will be
+displayed next to the screen name (if the buddy has opted to have their
+client report this information).
+
+\fIDim idle buddies\fR: If enabled, idle buddies will be displayed in grey
+text instead of black text.
+
+\fIAutomatically expand contacts\fR: If enabled, contacts will
+automatically expand to show the associated buddies when the mouse is held
+over the contact for a short period.
+
+.SH Conversations
+
+\fIShow buttons as...\fR: The selected item will determine whether
+picture-only, text-only, combined picture/text, or no buttons will be used
+for \fBConversation\fR windows.
+
+\fIShow formatting toolbar\fR: Display the formatting toolbar between the
+upper and lower text boxes in conversations.
+
+\fIShow aliases in tabs/titles\fR: Displays buddy alias instead of screen
+name in window tabs and titles.
+
+\fIShow buddy icons\fR: For protocols that support it, buddy icons allow
+buddies to send small pictures to be displayed during the course of a
+conversation. Turning this option off hides those pictures.
+
+\fIEnable buddy icon animation\fR: If these pictures happen to be animated,
+this option will enable the animation, otherwise only the first frame will
+be displayed.
+
+\fINotify buddies that you are typing to them\fR: Some protocols allow
+clients to tell their buddies when they are typing. This option enables
+this feature for protocols that supports it.
+
+\fIRaise IM windows on events\fR: If enabled, IM \fBConversation\fR windows
+will be brought to the top when new messages are received.
+
+\fIRaise Chat windows on events\fR: If enabled, chat \fBConversation\fR windows
+will be brought to the top when new messages are received.
+
+\fIUse multi-colored screen names in chats\fR: Color code the screen names of
+users in chat rooms.
+
+.TP
+.B Tab Options
+\fIShow IMs and chats in tabbed windows\fR: Tabbed chatting allows one to
+have multiple conversations without multiple windows.
+
+\fIShow close buttons on tabs\fR: Adds a close button to each tab.
+
+\fITab Placement...\fR: Specifies where tabs are shown in the conversation
+window.
+
+\fI New conversation placement...\fR: Determines where new conversations will
+be placed (Last created window / New window / windows grouped by group or
+account / separate windows for IMs and Chats).
+
+.TP
+.B Message Text
+\fIShow timestamp on messages\fR: Toggles the timestamp behavior for
+conversations.  Per-conversation behavior can be changed by pressing
+\fIF2\fR in the \fBConversation\fR window.
+
+\fIHighlight misspelled words\fR: Toggles highlighting of misspelled words
+as you type.
+
+\fIIgnore colors/font faces/font sizes\fR: Tells Pidgin to disregard
+buddies' color/font/size information in displaying IMs or Chats.
+
+\fIDefault Formatting\fR: Allows specifying the default formatting to apply
+to all outgoing messages (only applicable to protocols that support
+formatting in messages).
+
+.TP
+.B Shortcuts
+Allows the user to determine which keyboard shortcuts are available.
+
+.TP
+.B Smiley Themes
+Allows the user to choose between different smiley themes. The "none" theme
+will disable graphical emoticons - they will be displayed as text instead.
+
+.SH Sounds
+
+\fISounds while away\fR: Determines whether sounds are played when an away
+message is up.
+
+\fISound Method\fR lets the user choose between different playback methods.
+The user can also manually enter a command to be executed when a sound is
+to be played (\fI%s\fR expands to the full path to the file name).
+
+.TP
+.B Sound Events
+Lets the user choose when and what sounds are to be played.
+
+.SH Network
+
+.TP
+.B IP Address
+\fIAutodetect IP Address\fR: Pidgin will attempt to automatically determine
+your IP address for use in file transfers and Direct IMs.
+
+\fIPublic IP\fR: What IP address to use for file transfer and Direct IMs. This
+is mainly useful for users with multiple network interfaces or behind NAT.
+
+.TP
+.B Ports
+\fIManually specify range of ports to listen on\fR: Specify specific ports to
+listen on, overriding any defaults.
+
+.TP
+.B Proxy Server
+The configuration section to enable Pidgin to operate through a proxy
+server.  Pidgin currently supports SOCKS 4/5 and HTTP proxies.
+
+.SH Browser
+
+Allows the user to select Pidgin's default web browser.  Firefox, Galeon,
+Konqueror, Mozilla, Netscape and Opera are supported natively.  The user
+can also manually enter a command to be executed when a link is clicked
+(\fI%s\fR expands to the URL).  For example, \fIxterm -e lynx "%s"\fR will
+open the link with lynx.  \fIOpen new window by default\fR makes the
+browser use a new window instead of using the current window (or spawning a
+new tab).
+
+.SH Logging
+
+\fIMessage Logs\fR lets the user choose whether \fBConversations\fR and/or
+\fBBuddy Chats\fR will be logged as well as whether logs will be in HTML or
+plain text format.  \fISystem Logs\fR describes the types of events to be
+logged.
+
+.SH Away / Idle
+
+\fIQueue new messages when away\fR: Messages received since going Away will
+not be shown until away status is removed.
+
+\fISend auto-response\fR: If someone messages you while away, your
+auto-response will be sent.
+
+\fIOnly send auto-response when idle\fR: If someone messages you while
+away, your auto-response will only be sent if Pidgin decides that the
+connection is idle.
+
+\fIIdle time reporting\fR: If \fINone\fR is selected, account idle time
+will not be reported.  \fIPidgin usage\fR infers your idle time from your
+usage of Pidgin.  \fIX usage\fR infers your idle time from \fBX\fR
+(this option may not be universally available).
+
+\fIAuto-away\fR: Determines if and under what conditions Pidgin will
+automatically turn on the Away status.
+
+.TP
+.B Away Messages
+Lets the user add/edit/remove available \fBAway Messages\fR.
+
+.SH Plugins
+
+Allows the user to enable add-on plugins for Pidgin.  Several of these
+come with Pidgin, while others must be downloaded separately.  The
+\fIDescription\fR field gives the plugin author's description of the
+plugin, while the \fIDetails\fR field gives the plugin's authorship, URL,
+and file name/location information.
+
+Some plugins can be configured.  If you load such a plugin, its
+configuration preferences will appear as a submenu to \fBPlugins\fR, with
+the submenu title determined by the plugin's name.
+
+.SH Protocols
+
+Protocols provide protocol specific preferences here.
+
+.SH CONVERSATIONS
+When starting a new conversation, the user is presented with the
+\fBConversation\fR window.  The conversation appears in the upper text box
+and the user types his/her message in the lower text box.  Between the two
+is a row of settings, represented by icons.  Some or all buttons may not be
+active if the protocol does not support the specific formatting. From left
+to right:
+.TP
+.B Bold
+Turns on/off bold.
+.TP
+.B Italics
+Turns on/off italics.
+.TP
+.B Underline
+Turns on/off underline.
+.TP
+.B Decrease font size
+Increases the size of the message text.
+.TP
+.B Increase font size
+Decreases the size of the message text.
+.TP
+.B Select a foreground color
+Changes the foreground color of the message text.
+.TP
+.B Select a background color
+Changes the background color of the message text.
+.TP
+.B Add image
+Inserts an in-line image in the message.
+.TP
+.B Add hyperlink
+Adds a clickable link to the message.
+.TP
+.B Add smiley
+Adds an emoticon (smiley) to your message.
+
+Beneath the lower text box is a row of buttons that execute commands:
+.TP
+.B Warn
+This issues a warning to the other person in the conversation (not
+available in all protocols).
+.TP
+.B Block
+This adds the other person to your deny list (not available in all
+protocols).
+.TP
+.B Send File
+Send a file to this user. This option is only available on protocols where
+Pidgin supports file transfer.
+.TP
+.B Add
+This adds this user to your buddy list.  This option is not available if
+the user is already on your list.
+.TP
+.B Remove
+This removes this user from your buddy list.  This option is not available
+if the user is not on your list.
+.TP
+.B Info
+This gets information (a profile) about the other person in the
+conversation (not available in all protocols).
+.TP
+.B Send
+This sends what's currently in the lower text box
+
+.SH BUDDY CHATS
+For protocols that allow it, \fBBuddy Chats\fR can be entered through the
+\fIFile\fR menu or the \fIChat\fR button at the bottom of the \fBBuddy
+List\fR's \fBOnline\fR tab.
+
+Additional commands available in chat, depending on the protocol are:
+.TP
+.B Whisper
+The text will appear in the chat conversation, but it will only be visible
+to the sender and the receiver.
+.TP
+.B Invite
+Invite other people to join the chat room.
+.TP
+.B Ignore
+Ignore anything said by the chosen person
+.TP
+.B Set Topic
+Set the topic of the chat room.  This is usually a brief sentence
+describing the nature of the chat--an explanation of the chat room's name.
+
+.SH AWAY MESSAGES
+Most protocols allow for away messages.  When a user is \fIAway\fR, he can
+leave an informative message for others to see.  The \fBAway\fR submenu of
+the \fBTools\fR menu is used to add and remove away messages.
+
+\fINew Away Message\fR provides space for one to enter an away message and
+a title for that message.  If \fISave\fR or \fISave & Use\fR are chosen,
+this message will be saved.  It can later be referred to by the title given
+to it.
+
+\fIRemove Away Message\fR is a submenu containing the titles of saved away
+messages.  Clicking on one of these titles will remove the away message
+associated with it.
+
+The rest of the \fIaway\fR menu provides the user with a way to assign
+different away messages to different connections.  Choosing \fISet All
+Away\fR will set away all the connections capable of the away state.
+
+.SH BUDDY POUNCE
+A Buddy Pounce is an automated trigger that occurs when a buddy returns to
+a normal state from an away state.  The \fBNew Buddy Pounce\fR dialog box
+can be activated by selecting the \fIBuddy Pounce\fR submenu from the
+\fBTools\fR menu. A pounce can be set to occur on any combination of the
+events listed, and any combination of actions can result.  If \fISave this
+pounce after activation\fR is checked, the trigger will remain until it is
+removed from the \fIRemove Buddy Pounce\fR menu.
+
+.SH PLUGINS
+Pidgin allows for dynamic loading of plugins to add extra functionality
+to Pidgin.  Plugins can be enabled and configured from the
+\fBPreferences\fR window.  See \fIplugins/HOWTO\fR for more information on
+writing plugins.
+
+.SH PERL
+Pidgin allows for perl scripting.  See \fIPerl Scripting HOWTO\fR in
+the Pidgin documentation for more information about perl scripting.
+
+.SH TCL
+Pidgin allows for Tcl scripting. See \fIplugins/tcl/TCL-HOWTO\fR for
+more information about Tcl scripting.
+
+.SH FILES
+\fI@prefix@/bin/pidgin\fR: Pidgin's location.
+.br
+\fI@prefix@/lib/pidgin/\fR: Pidgin's plugins directory.
+.br
+\fI~/.gaim/prefs.xml\fR: Pidgin's configuration file.
+.br
+\fI~/.gaim/accounts.xml\fR: information about your accounts.
+.br
+\fI~/.gaim/status.xml\fR: stores your away messages.
+.br
+\fI~/.gaim/pounces.xml\fR: stores your buddy pounces.
+.br
+\fI~/.gaim/logs/PROTOCOL/ACCOUNT/SCREENNAME/DATE.log\fR: conversation logs.
+.br
+\fI~/.gaim/blist.xml\fR: the buddy list.
+.br
+\fI~/.gaim/plugins/\fR: users local plugins
+
+.SH BUGS
+Known bugs are listed at
+.br
+\fIhttp://sourceforge.net/tracker/?group_id=235&atid=100235\fR
+
+.SH PATCHES
+If you fix a bug in Pidgin (or otherwise enhance it), please submit a
+patch (using \fImtn diff > my.diff\fR against the latest version from the
+Monotone repository) at
+.br
+\fIhttp://developer.pidgin.im/newticket\fR
+
+Before sending a bug report, please verify that you have the latest
+version of Pidgin.  Many bugs (major and minor) are fixed
+at each release, and if yours is out of date, the problem may already
+have been solved.
+
+.SH SEE ALSO
+\fIhttp://pidgin.im/\fR
+
+.SH LICENSE
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+\fBWITHOUT ANY WARRANTY\fR; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+.SH AUTHORS
+Pidgin's active developers are:
+
+ Sean Egan (lead developer) <\fIseanegan@gmail.com\fR>
+.br
+ Daniel 'datallah' Atallah (developer)
+.br
+ Ethan 'Paco-Paco' Blanton (developer)
+.br
+ Thomas Butter (developer)
+.br
+ Sadrul Habib Chowdhury (developer)
+.br
+ Mark 'KingAnt' Doliner (developer) <\fIthekingant@users.sourceforge.net\fR>
+.br
+ Christian 'ChipX86' Hammond (developer & webmaster) <\fIchipx86@chipx86.com\fR>
+.br
+ Gary 'grim' Kramlich (developer)
+.br
+ Richard 'rlaager' Laager (developer) <\fIrlaager@pidgin.im\fR>
+.br
+ Christopher 'siege' O'Brien (developer)
+.br
+ Bartosz Oler (developer)
+.br
+ Etan 'deryni' Reisner (developer)
+.br
+ Tim 'marv' Ringenbach (developer) <\fImarv_sf@users.sf.net\fR>
+.br
+ Luke 'LSchiere' Schierer (support)
+.br
+ Megan 'Cae' Schneider (support/QA)
+.br
+ Evan Schoenberg (developer)
+.br
+ Stu 'nosnilmot' Tomlinson (developer)
+.br
+ Nathan 'faceprint' Walp (developer)
+.br
+
+
+Our crazy patch writers include:
+
+Ka-Hing 'javabsp' Cheung
+.br
+Sadrul Habib Chowdhury
+.br
+Felipe 'shx' Contreras
+.br
+Decklin Foster
+.br
+Peter 'Bleeter' Lawler
+.br
+Robert 'Robot101' McQueen
+.br
+Benjamin Miller
+.br
+Kevin 'SimGuy' Stange
+.br
+
+
+The retired developers of \fBgaim\fR are:
+
+ Herman Bloggs (win32 port) <\fIherman@bluedigits.com\fR>
+.br
+ Jim Duchek <\fIjim@linuxpimps.com\fR> (maintainer)
+.br
+ Rob Flynn <\fIgaim@robflynn.com\fR> (maintainer)
+.br
+ Adam Fritzler (libfaim maintainer)
+.br
+ Syd Logan (hacker and designated driver [lazy bum])
+.br
+ Jim Seymour (Jabber developer)
+.br
+ Mark Spencer (original author) <\fImarkster@marko.net\fR>
+.br
+ Eric Warmenhoven (former lead developer) <\fIeric@warmenhoven.org\fR>
+.br
+
+This manpage was originally written by Dennis Ristuccia <\fIdennis@dennisr.net\fR>.  It has been updated and largely rewritten by Sean Egan <\fIseanegan@gmail.com\fR> and Ben Tegarden <\fItegarden@uclink.berkeley.edu\fR>.
--- a/libpurple/circbuffer.c	Mon Feb 05 12:13:18 2007 +0000
+++ b/libpurple/circbuffer.c	Mon Feb 05 12:13:45 2007 +0000
@@ -122,8 +122,8 @@
 	buf->bufused += len;
 }
 
-gsize gaim_circ_buffer_get_max_read(GaimCircBuffer *buf) {
-	int max_read;
+gsize gaim_circ_buffer_get_max_read(const GaimCircBuffer *buf) {
+	gsize max_read;
 
 	g_return_val_if_fail(buf != NULL, 0);
 
--- a/libpurple/circbuffer.h	Mon Feb 05 12:13:18 2007 +0000
+++ b/libpurple/circbuffer.h	Mon Feb 05 12:13:45 2007 +0000
@@ -97,7 +97,7 @@
  *
  * @return the number of bytes that can be read from the GaimCircBuffer
  */
-gsize gaim_circ_buffer_get_max_read(GaimCircBuffer *buf);
+gsize gaim_circ_buffer_get_max_read(const GaimCircBuffer *buf);
 
 /**
  * Mark the number of bytes that have been read from the buffer.
--- a/libpurple/plugins/Makefile.am	Mon Feb 05 12:13:18 2007 +0000
+++ b/libpurple/plugins/Makefile.am	Mon Feb 05 12:13:45 2007 +0000
@@ -28,6 +28,7 @@
 autoreply_la_LDFLAGS        = -module -avoid-version
 buddynote_la_LDFLAGS        = -module -avoid-version
 idle_la_LDFLAGS             = -module -avoid-version
+joinpart_la_LDFLAGS         = -module -avoid-version
 log_reader_la_LDFLAGS       = -module -avoid-version
 newline_la_LDFLAGS          = -module -avoid-version
 offlinemsg_la_LDFLAGS       = -module -avoid-version
@@ -44,6 +45,7 @@
 	autoreply.la        \
 	buddynote.la        \
 	idle.la             \
+	joinpart.la         \
 	log_reader.la       \
 	newline.la          \
 	offlinemsg.la       \
@@ -55,6 +57,7 @@
 autoreply_la_SOURCES        = autoreply.c
 buddynote_la_SOURCES        = buddynote.c
 idle_la_SOURCES             = idle.c
+joinpart_la_SOURCES         = joinpart.c
 log_reader_la_SOURCES       = log_reader.c
 newline_la_SOURCES          = newline.c
 offlinemsg_la_SOURCES       = offlinemsg.c
@@ -65,6 +68,7 @@
 autoreply_la_LIBADD         = $(GLIB_LIBS)
 buddynote_la_LIBADD         = $(GLIB_LIBS)
 idle_la_LIBADD              = $(GLIB_LIBS)
+joinpart_la_LIBADD          = $(GLIB_LIBS)
 log_reader_la_LIBADD        = $(GLIB_LIBS)
 newline_la_LIBADD           = $(GLIB_LIBS)
 offlinemsg_la_LIBADD        = $(GLIB_LIBS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/plugins/joinpart.c	Mon Feb 05 12:13:45 2007 +0000
@@ -0,0 +1,294 @@
+/**
+ * gaim
+ *
+ * Gaim is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include "internal.h"
+#include "conversation.h"
+#include "debug.h"
+#include "plugin.h"
+#include "version.h"
+
+#define JOINPART_PLUGIN_ID "core-rlaager-joinpart"
+
+
+/* Preferences */
+
+/* The number of minutes before a person is considered
+ * to have stopped being part of active conversation. */
+#define DELAY_PREF "/plugins/core/joinpart/delay"
+#define DELAY_DEFAULT 10
+
+/* The number of people that must be in a room for this
+ * plugin to have any effect */
+#define THRESHOLD_PREF "/plugins/core/joinpart/threshold"
+#define THRESHOLD_DEFAULT 20
+
+struct joinpart_key
+{
+	GaimConversation *conv;
+	char *user;
+};
+
+static guint joinpart_key_hash(const struct joinpart_key *key)
+{
+	g_return_val_if_fail(key != NULL, 0);
+
+	return g_direct_hash(key->conv) + g_str_hash(key->user);
+}
+
+static gboolean joinpart_key_equal(const struct joinpart_key *a, const struct joinpart_key *b)
+{
+	if (a == NULL)
+		return (b == NULL);
+	else if (b == NULL)
+		return FALSE;
+
+	return (a->conv == b->conv) && !strcmp(a->user, b->user);
+}
+
+static void joinpart_key_destroy(struct joinpart_key *key)
+{
+	g_return_if_fail(key != NULL);
+
+	g_free(key->user);
+	g_free(key);
+}
+
+static gboolean should_hide_notice(GaimConversation *conv, const char *name,
+                                   GHashTable *users)
+{
+	GaimConvChat *chat;
+	int threshold;
+	struct joinpart_key *key;
+	time_t *last_said;
+
+	g_return_val_if_fail(conv != NULL, FALSE);
+	g_return_val_if_fail(gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT, FALSE);
+
+	/* If the room is small, don't bother. */
+	chat = GAIM_CONV_CHAT(conv);
+	threshold = gaim_prefs_get_int(THRESHOLD_PREF);
+	if (g_list_length(gaim_conv_chat_get_users(chat)) < threshold)
+		return FALSE;
+
+	/* We always care about our buddies! */
+	if (gaim_find_buddy(gaim_conversation_get_account(conv), name))
+		return FALSE;
+
+	/* Only show the notice if the user has spoken recently. */
+	key = g_new(struct joinpart_key, 1);
+	key->conv = conv;
+	key->user = g_strdup(name);
+	last_said = g_hash_table_lookup(users, key);
+	if (last_said != NULL)
+	{
+		int delay = gaim_prefs_get_int(DELAY_PREF);
+		if (delay > 0 && (*last_said + (delay * 60)) >= time(NULL))
+			return FALSE;
+	}
+
+	return TRUE;
+}
+
+static gboolean chat_buddy_leaving_cb(GaimConversation *conv, const char *name,
+                               const char *reason, GHashTable *users)
+{
+	return should_hide_notice(conv, name, users);
+}
+
+static gboolean chat_buddy_joining_cb(GaimConversation *conv, const char *name,
+                                      GaimConvChatBuddyFlags flags,
+                                      GHashTable *users)
+{
+	return should_hide_notice(conv, name, users);
+}
+
+static void received_chat_msg_cb(GaimAccount *account, char *sender,
+                                 char *message, GaimConversation *conv,
+                                 GaimMessageFlags flags, GHashTable *users)
+{
+	struct joinpart_key key;
+	time_t *last_said;
+
+	/* Most of the time, we'll already have tracked the user,
+	 * so we avoid memory allocation here. */
+	key.conv = conv;
+	key.user = sender;
+	last_said = g_hash_table_lookup(users, &key);
+	if (last_said != NULL)
+	{
+		/* They just said something, so update the time. */
+		time(last_said);
+	}
+	else
+	{
+		struct joinpart_key *key2;
+
+		key2 = g_new(struct joinpart_key, 1);
+		key2->conv = conv;
+		key2->user = g_strdup(sender);
+
+		last_said = g_new(time_t, 1);
+		time(last_said);
+
+		g_hash_table_insert(users, key2, last_said);
+	}
+}
+
+static gboolean check_expire_time(struct joinpart_key *key,
+                                  time_t *last_said, time_t *limit)
+{
+	gaim_debug_info("joinpart", "Removing key for %s/%s\n", key->conv->name, key->user);
+	return (*last_said < *limit);
+}
+
+static gboolean clean_users_hash(GHashTable *users)
+{
+	int delay = gaim_prefs_get_int(DELAY_PREF);
+	time_t limit = time(NULL) - (60 * delay);
+
+	g_hash_table_foreach_remove(users, (GHRFunc)check_expire_time, &limit);
+
+	return TRUE;
+}
+
+static gboolean plugin_load(GaimPlugin *plugin)
+{
+	void *conv_handle;
+	GHashTable *users;
+	guint id;
+	gpointer *data;
+
+	users = g_hash_table_new_full((GHashFunc)joinpart_key_hash,
+	                              (GEqualFunc)joinpart_key_equal,
+	                              (GDestroyNotify)joinpart_key_destroy,
+	                              g_free);
+
+	conv_handle = gaim_conversations_get_handle();
+	gaim_signal_connect(conv_handle, "chat-buddy-joining", plugin,
+	                    GAIM_CALLBACK(chat_buddy_joining_cb), users);
+	gaim_signal_connect(conv_handle, "chat-buddy-leaving", plugin,
+	                    GAIM_CALLBACK(chat_buddy_leaving_cb), users);
+	gaim_signal_connect(conv_handle, "received-chat-msg", plugin,
+	                    GAIM_CALLBACK(received_chat_msg_cb), users);
+
+	/* Cleanup every 5 minutes */
+	id = gaim_timeout_add(1000 * 60 * 5, (GSourceFunc)clean_users_hash, users);
+
+	data = g_new(gpointer, 2);
+	data[0] = users;
+	data[1] = GUINT_TO_POINTER(id);
+	plugin->extra = data;
+
+	return TRUE;
+}
+
+static gboolean plugin_unload(GaimPlugin *plugin)
+{
+	gpointer *data = plugin->extra;
+
+	/* Destroy the hash table. The core plugin code will
+	 * disconnect the signals, and since Gaim is single-threaded,
+	 * we don't have to worry one will be called after this. */
+	g_hash_table_destroy((GHashTable *)data[0]);
+
+	g_source_remove(GPOINTER_TO_UINT(data[1]));
+	g_free(data);
+
+	return TRUE;
+}
+
+static GaimPluginPrefFrame *
+get_plugin_pref_frame(GaimPlugin *plugin)
+{
+	GaimPluginPrefFrame *frame;
+	GaimPluginPref *ppref;
+
+	g_return_val_if_fail(plugin != NULL, FALSE);
+
+	frame = gaim_plugin_pref_frame_new();
+
+	ppref = gaim_plugin_pref_new_with_label(_("Join/Part Hiding Configuration"));
+	gaim_plugin_pref_frame_add(frame, ppref);
+
+	ppref = gaim_plugin_pref_new_with_name_and_label(THRESHOLD_PREF,
+	                                                 _("Minimum Room Size"));
+	gaim_plugin_pref_set_bounds(ppref, 0, 1000);
+	gaim_plugin_pref_frame_add(frame, ppref);
+
+
+	ppref = gaim_plugin_pref_new_with_name_and_label(DELAY_PREF,
+	                                                 _("User Inactivity Timeout (in minutes)"));
+	gaim_plugin_pref_set_bounds(ppref, 0, 8 * 60); /* 8 Hours */
+	gaim_plugin_pref_frame_add(frame, ppref);
+
+	return frame;
+}
+
+static GaimPluginUiInfo prefs_info = {
+	get_plugin_pref_frame,
+	0,   /* page_num (reserved) */
+	NULL /* frame (reserved) */
+};
+
+static GaimPluginInfo info =
+{
+	GAIM_PLUGIN_MAGIC,
+	GAIM_MAJOR_VERSION,
+	GAIM_MINOR_VERSION,
+	GAIM_PLUGIN_STANDARD,                             /**< type           */
+	NULL,                                             /**< ui_requirement */
+	0,                                                /**< flags          */
+	NULL,                                             /**< dependencies   */
+	GAIM_PRIORITY_DEFAULT,                            /**< priority       */
+
+	JOINPART_PLUGIN_ID,                               /**< id             */
+	N_("Join/Part Hiding"),                           /**< name           */
+	VERSION,                                          /**< version        */
+	                                                  /**  summary        */
+	N_("Hides extraneous join/part messages."),
+	                                                  /**  description    */
+	N_("This plugin hides join/part messages in large "
+	   "rooms, except for those users actively taking "
+	   "part in a conversation."),
+	"Richard Laager <rlaager@pidgin.im>",             /**< author         */
+	GAIM_WEBSITE,                                     /**< homepage       */
+
+	plugin_load,                                      /**< load           */
+	plugin_unload,                                    /**< unload         */
+	NULL,                                             /**< destroy        */
+
+	NULL,                                             /**< ui_info        */
+	NULL,                                             /**< extra_info     */
+	&prefs_info,                                      /**< prefs_info     */
+	NULL                                              /**< actions        */
+};
+
+static void
+init_plugin(GaimPlugin *plugin)
+{
+	gaim_prefs_add_none("/plugins/core/joinpart");
+
+	gaim_prefs_add_int(DELAY_PREF, DELAY_DEFAULT);
+	gaim_prefs_add_int(THRESHOLD_PREF, THRESHOLD_DEFAULT);
+}
+
+GAIM_INIT_PLUGIN(joinpart, init_plugin, info)
--- a/libpurple/plugins/log_reader.c	Mon Feb 05 12:13:18 2007 +0000
+++ b/libpurple/plugins/log_reader.c	Mon Feb 05 12:13:45 2007 +0000
@@ -2137,7 +2137,7 @@
 	   "WARNING: This plugin is still alpha code and "
 	   "may crash frequently.  Use it at your own risk!"),
 
-	"Richard Laager <rlaager@users.sf.net>",          /**< author         */
+	"Richard Laager <rlaager@pidgin.im>",             /**< author         */
 	GAIM_WEBSITE,                                     /**< homepage       */
 	plugin_load,                                      /**< load           */
 	plugin_unload,                                    /**< unload         */
--- a/libpurple/plugins/perl/libgaimperl.c	Mon Feb 05 12:13:18 2007 +0000
+++ b/libpurple/plugins/perl/libgaimperl.c	Mon Feb 05 12:13:45 2007 +0000
@@ -1,7 +1,16 @@
 #include <gmodule.h>
+
+#ifdef  __SUNPRO_C
+#pragma init (my_init)
+void my_init(void);
+
+void my_init() {
+#else
 void __attribute__ ((constructor)) my_init(void);
 
 void __attribute__ ((constructor)) my_init() {
+#endif
+
 	/* Very evil hack...puts perl.so's symbols in the global table
 	 * but does not create a circular dependancy because g_module_open
 	 * will only open the library once. */
--- a/libpurple/whiteboard.c	Mon Feb 05 12:13:18 2007 +0000
+++ b/libpurple/whiteboard.c	Mon Feb 05 12:13:45 2007 +0000
@@ -101,9 +101,9 @@
  * usernames 'me' and 'who'.  Returns a pointer to a matching whiteboard
  * session; if none match, it returns NULL.
  */
-GaimWhiteboard *gaim_whiteboard_get_session(GaimAccount *account, const char *who)
+GaimWhiteboard *gaim_whiteboard_get_session(const GaimAccount *account, const char *who)
 {
-	GaimWhiteboard *wb = NULL;
+	GaimWhiteboard *wb;
 
 	GList *l = wbList;
 
@@ -127,7 +127,7 @@
 	g_list_free(draw_list);
 }
 
-gboolean gaim_whiteboard_get_dimensions(GaimWhiteboard *wb, int *width, int *height)
+gboolean gaim_whiteboard_get_dimensions(const GaimWhiteboard *wb, int *width, int *height)
 {
 	GaimWhiteboardPrplOps *prpl_ops = wb->prpl_ops;
 
@@ -188,7 +188,7 @@
 		prpl_ops->set_brush(wb, size, color);
 }
 
-gboolean gaim_whiteboard_get_brush(GaimWhiteboard *wb, int *size, int *color)
+gboolean gaim_whiteboard_get_brush(const GaimWhiteboard *wb, int *size, int *color)
 {
 	GaimWhiteboardPrplOps *prpl_ops = wb->prpl_ops;
 
--- a/libpurple/whiteboard.h	Mon Feb 05 12:13:18 2007 +0000
+++ b/libpurple/whiteboard.h	Mon Feb 05 12:13:45 2007 +0000
@@ -73,9 +73,9 @@
 {
 	void (*start)(GaimWhiteboard *wb);                                   /**< start function */
 	void (*end)(GaimWhiteboard *wb);                                     /**< end function */
-	void (*get_dimensions)(GaimWhiteboard *wb, int *width, int *height); /**< get_dimensions function */
+	void (*get_dimensions)(const GaimWhiteboard *wb, int *width, int *height); /**< get_dimensions function */
 	void (*set_dimensions)(GaimWhiteboard *wb, int width, int height);   /**< set_dimensions function */
-	void (*get_brush) (GaimWhiteboard *wb, int *size, int *color);       /**< get the brush size and color */
+	void (*get_brush) (const GaimWhiteboard *wb, int *size, int *color); /**< get the brush size and color */
 	void (*set_brush) (GaimWhiteboard *wb, int size, int color);         /**< set the brush size and color */
 	void (*send_draw_list)(GaimWhiteboard *wb, GList *draw_list);        /**< send_draw_list function */
 	void (*clear)(GaimWhiteboard *wb);                                   /**< clear function */
@@ -138,7 +138,7 @@
  *
  * @return The whiteboard if found, otherwise @c NULL.
  */
-GaimWhiteboard *gaim_whiteboard_get_session(GaimAccount *account, const char *who);
+GaimWhiteboard *gaim_whiteboard_get_session(const GaimAccount *account, const char *who);
 
 /**
  * Destorys a drawing list for a whiteboard
@@ -156,7 +156,7 @@
  *
  * @return TRUE if the values of width and height were set.
  */
-gboolean gaim_whiteboard_get_dimensions(GaimWhiteboard *wb, int *width, int *height);
+gboolean gaim_whiteboard_get_dimensions(const GaimWhiteboard *wb, int *width, int *height);
 
 /**
  * Sets the dimensions for a whiteboard.
@@ -231,7 +231,7 @@
  *
  * @return	TRUE if the size and color were set.
  */
-gboolean gaim_whiteboard_get_brush(GaimWhiteboard *wb, int *size, int *color);
+gboolean gaim_whiteboard_get_brush(const GaimWhiteboard *wb, int *size, int *color);
 
 /**
  * Sets the size and color of the brush.
--- a/libpurple/xmlnode.c	Mon Feb 05 12:13:18 2007 +0000
+++ b/libpurple/xmlnode.c	Mon Feb 05 12:13:45 2007 +0000
@@ -583,7 +583,7 @@
 }
 
 xmlnode *
-xmlnode_copy(xmlnode *src)
+xmlnode_copy(const xmlnode *src)
 {
 	xmlnode *ret;
 	xmlnode *child;
--- a/libpurple/xmlnode.h	Mon Feb 05 12:13:18 2007 +0000
+++ b/libpurple/xmlnode.h	Mon Feb 05 12:13:45 2007 +0000
@@ -249,7 +249,7 @@
  *
  * @return A new copy of the src node.
  */
-xmlnode *xmlnode_copy(xmlnode *src);
+xmlnode *xmlnode_copy(const xmlnode *src);
 
 /**
  * Frees a node and all of it's children.
--- a/pidgin/gtkdialogs.c	Mon Feb 05 12:13:18 2007 +0000
+++ b/pidgin/gtkdialogs.c	Mon Feb 05 12:13:45 2007 +0000
@@ -518,9 +518,9 @@
 
 #ifndef _WIN32
 #ifdef HAVE_DBUS
-	g_string_append_printf(str, "    <b>D-BUS:</b> Enabled<br/>");
+	g_string_append_printf(str, "    <b>D-Bus:</b> Enabled<br/>");
 #else
-	g_string_append_printf(str, "    <b>D-BUS:</b> Disabled<br/>");
+	g_string_append_printf(str, "    <b>D-Bus:</b> Disabled<br/>");
 #endif
 
 #ifdef HAVE_EVOLUTION_ADDRESSBOOK
--- a/pidgin/gtklog.c	Mon Feb 05 12:13:18 2007 +0000
+++ b/pidgin/gtklog.c	Mon Feb 05 12:13:45 2007 +0000
@@ -205,13 +205,40 @@
 		gtk_tree_view_expand_row(tv, path, FALSE);
 }
 
-static void delete_log_cb(GaimLog *log)
+static void delete_log_cleanup_cb(gpointer *data)
 {
-	if (!gaim_log_delete(log))
+	g_free(data[1]); /* iter */
+	g_free(data);
+}
+
+static void delete_log_cb(gpointer *data)
+{
+	if (!gaim_log_delete((GaimLog *)data[2]))
 	{
 		gaim_notify_error(NULL, NULL, "Log Deletion Failed",
 		                  "Check permissions and try again.");
 	}
+	else
+	{
+		GtkTreeStore *treestore = data[0];
+		GtkTreeIter *iter = (GtkTreeIter *)data[1];
+		GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), iter);
+		gboolean first = !gtk_tree_path_prev(path);
+
+		if (!gtk_tree_store_remove(treestore, iter) && first)
+		{
+			/* iter was the last child at its level */
+
+			if (gtk_tree_path_up(path))
+			{
+				gtk_tree_model_get_iter(GTK_TREE_MODEL(treestore), iter, path);
+				gtk_tree_store_remove(treestore, iter);
+			}
+		}
+		gtk_tree_path_free(path);
+	}
+
+	delete_log_cleanup_cb(data);
 }
 
 static void log_delete_log_cb(GtkWidget *menuitem, gpointer *data)
@@ -221,6 +248,7 @@
 	const char *time = log_get_date(log);
 	const char *name;
 	char *tmp;
+	gpointer *data2;
 
 	if (log->type == GAIM_LOG_IM)
 	{
@@ -252,8 +280,17 @@
 	else
 		g_return_if_reached();
 
+	/* The only way to free data in all cases is to tie it to the menuitem with
+	 * g_object_set_data_full().  But, since we need to get some data down to
+	 * delete_log_cb() to delete the log from the log viewer after the file is
+	 * deleted, we have to allocate a new data array and make sure it gets freed
+	 * either way. */
+	data2 = g_new(gpointer, 3);
+	data2[0] = lv->treestore;
+	data2[1] = data[3]; /* iter */
+	data2[2] = log;
 	gaim_request_action(lv, NULL, "Delete Log?", tmp,
-	                    0, log, 2, _("Delete"), delete_log_cb, _("Cancel"), NULL);
+	                    0, data2, 2, _("Delete"), delete_log_cb, _("Cancel"), delete_log_cleanup_cb);
 	g_free(tmp);
 }
 
@@ -266,11 +303,11 @@
 		gtk_widget_set_sensitive(menuitem, FALSE);
 
 	g_signal_connect(menuitem, "activate", G_CALLBACK(log_delete_log_cb), data);
-	g_object_set_data_full(menuitem, "log-viewer-data", data, g_free);
+	g_object_set_data_full(G_OBJECT(menuitem), "log-viewer-data", data, g_free);
 	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
 	gtk_widget_show_all(menu);
 
-	gtk_menu_popup(GTK_MENU(menu), NULL, (GtkMenuPositionFunc)data[2], NULL, NULL,
+	gtk_menu_popup(GTK_MENU(menu), NULL, NULL, (GtkMenuPositionFunc)data[2], NULL,
 	               (event != NULL) ? event->button : 0,
 	               gdk_event_get_time((GdkEvent *)event));
 }
@@ -280,26 +317,31 @@
 	if (event->type == GDK_BUTTON_PRESS && event->button == 3)
 	{
 		GtkTreePath *path;
-		GtkTreeIter iter;
+		GtkTreeIter *iter;
 		GValue val;
 		GaimLog *log;
 		gpointer *data;
 
 		if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(treeview), event->x, event->y, &path, NULL, NULL, NULL))
 			return FALSE;
-		gtk_tree_model_get_iter(GTK_TREE_MODEL(lv->treestore), &iter, path);
+		iter = g_new(GtkTreeIter, 1);
+		gtk_tree_model_get_iter(GTK_TREE_MODEL(lv->treestore), iter, path);
 		val.g_type = 0;
-		gtk_tree_model_get_value(GTK_TREE_MODEL(lv->treestore), &iter, 1, &val);
+		gtk_tree_model_get_value(GTK_TREE_MODEL(lv->treestore), iter, 1, &val);
 
 		log = g_value_get_pointer(&val);
 
 		if (log == NULL)
+		{
+			g_free(iter);
 			return FALSE;
+		}
 
-		data = g_new(gpointer, 3);
+		data = g_new(gpointer, 4);
 		data[0] = lv;
 		data[1] = log;
 		data[2] = NULL;
+		data[3] = iter;
 
 		log_show_popup_menu(treeview, event, data);
 		return TRUE;
@@ -311,28 +353,32 @@
 static gboolean log_popup_menu_cb(GtkWidget *treeview, PidginLogViewer *lv)
 {
 	GtkTreeSelection *sel;
-	GtkTreeIter iter;
+	GtkTreeIter *iter;
 	GValue val;
 	GaimLog *log;
 	gpointer *data;
 
+	iter = g_new(GtkTreeIter, 1);
 	sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(lv));
-	if (!gtk_tree_selection_get_selected(sel, NULL, &iter))
+	if (!gtk_tree_selection_get_selected(sel, NULL, iter))
+	{
 		return FALSE;
+	}
 
 	val.g_type = 0;
 	gtk_tree_model_get_value(GTK_TREE_MODEL(lv->treestore),
-	                         &iter, NODE_COLUMN, &val);
+	                         iter, NODE_COLUMN, &val);
 
 	log = g_value_get_pointer(&val);
 
 	if (log == NULL)
 		return FALSE;
 
-	data = g_new(gpointer, 3);
+	data = g_new(gpointer, 4);
 	data[0] = lv;
 	data[1] = log;
 	data[2] = pidgin_treeview_popup_menu_position_func;
+	data[3] = iter;
 
 	log_show_popup_menu(treeview, NULL, data);
 	return TRUE;
--- a/pidgin/plugins/crazychat/configure.ac	Mon Feb 05 12:13:18 2007 +0000
+++ b/pidgin/plugins/crazychat/configure.ac	Mon Feb 05 12:13:45 2007 +0000
@@ -1443,7 +1443,7 @@
 		   Doxyfile
 		   gaim.apspec
 		   doc/Makefile
-		   doc/gaim.1
+		   doc/pidgin.1
 		   intl/Makefile
 		   m4macros/Makefile
 		   pixmaps/Makefile
--- a/pidgin/plugins/timestamp_format.c	Mon Feb 05 12:13:18 2007 +0000
+++ b/pidgin/plugins/timestamp_format.c	Mon Feb 05 12:13:45 2007 +0000
@@ -57,12 +57,11 @@
                                  gboolean force,
                                  const char *dates)
 {
-	g_return_val_if_fail(conv != NULL, NULL);
 	g_return_val_if_fail(dates != NULL, NULL);
 
 	if (show_date ||
 	    !strcmp(dates, "always") ||
-	    (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT && !strcmp(dates, "chats")))
+	    (conv != NULL && gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT && !strcmp(dates, "chats")))
 	{
 		struct tm *tm = localtime(&t);
 		if (force)
@@ -147,7 +146,7 @@
 	N_("This plugin allows the user to customize "
 	   "conversation and logging message timestamp "
 	   "formats."),
-	"Richard Laager <rlaager@users.sf.net>",          /**< author         */
+	"Richard Laager <rlaager@pidgin.im>",             /**< author         */
 	GAIM_WEBSITE,                                     /**< homepage       */
 
 	plugin_load,                                      /**< load           */