# HG changeset patch # User Sean Egan # Date 1170677625 0 # Node ID 8eaa1f23443b19e661db5e6d4194a9c78e334147 # Parent 442128853bdbec64c61cc93397d3808cd6c2662e# Parent 01c293ca8196e7f66b0b443960ab7687a3a29b68 merge of '017eca04bf34860761af5c6fe3ff1c1ea28f0fc3' and '01871e9d112ea919162917990541a5fe9132611d' diff -r 442128853bdb -r 8eaa1f23443b AUTHORS --- 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 diff -r 442128853bdb -r 8eaa1f23443b COPYRIGHT --- 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 +Markus Elfring Nelson Elhage Ignacio J. Elia Brian Enigma diff -r 442128853bdb -r 8eaa1f23443b configure.ac --- 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 diff -r 442128853bdb -r 8eaa1f23443b console/libgnt/gnttree.c --- 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); } diff -r 442128853bdb -r 8eaa1f23443b doc/Makefile.am --- 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 \ diff -r 442128853bdb -r 8eaa1f23443b doc/gaim.1.in --- 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 -.\" -.\" 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>. diff -r 442128853bdb -r 8eaa1f23443b doc/pidgin.1.in --- /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 +.\" +.\" 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>. diff -r 442128853bdb -r 8eaa1f23443b libpurple/circbuffer.c --- 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); diff -r 442128853bdb -r 8eaa1f23443b libpurple/circbuffer.h --- 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. diff -r 442128853bdb -r 8eaa1f23443b libpurple/plugins/Makefile.am --- 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) diff -r 442128853bdb -r 8eaa1f23443b libpurple/plugins/joinpart.c --- /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 ", /**< 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) diff -r 442128853bdb -r 8eaa1f23443b libpurple/plugins/log_reader.c --- 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 ", /**< author */ + "Richard Laager ", /**< author */ GAIM_WEBSITE, /**< homepage */ plugin_load, /**< load */ plugin_unload, /**< unload */ diff -r 442128853bdb -r 8eaa1f23443b libpurple/plugins/perl/libgaimperl.c --- 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 + +#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. */ diff -r 442128853bdb -r 8eaa1f23443b libpurple/whiteboard.c --- 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; diff -r 442128853bdb -r 8eaa1f23443b libpurple/whiteboard.h --- 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. diff -r 442128853bdb -r 8eaa1f23443b libpurple/xmlnode.c --- 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; diff -r 442128853bdb -r 8eaa1f23443b libpurple/xmlnode.h --- 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. diff -r 442128853bdb -r 8eaa1f23443b pidgin/gtkdialogs.c --- 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, " D-BUS: Enabled
"); + g_string_append_printf(str, " D-Bus: Enabled
"); #else - g_string_append_printf(str, " D-BUS: Disabled
"); + g_string_append_printf(str, " D-Bus: Disabled
"); #endif #ifdef HAVE_EVOLUTION_ADDRESSBOOK diff -r 442128853bdb -r 8eaa1f23443b pidgin/gtklog.c --- 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; diff -r 442128853bdb -r 8eaa1f23443b pidgin/plugins/crazychat/configure.ac --- 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 diff -r 442128853bdb -r 8eaa1f23443b pidgin/plugins/timestamp_format.c --- 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 ", /**< author */ + "Richard Laager ", /**< author */ GAIM_WEBSITE, /**< homepage */ plugin_load, /**< load */