Use G_DECLARE_DERIVABLE_TYPE for PurpleConversation and additional cleanups

The setters for PurpleConversation are kind of crappy because of the
conversation cache in the purple_conversations api, which we'll address at a
later time.

Testing Done:
Compiled and ran locally, parted a chat and just signed out to verify no new issues.

Reviewed at
.\" 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
.\" 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., 51 Franklin Street, Fifth Floor,
.\" Boston, MA 02111-1301 USA.
.TH pidgin3 1 "" "Pidgin v@VERSION@"
pidgin3 \- Instant Messaging client
.TP 5
\fBpidgin3 \fI[options]\fR
\fBpidgin3\fR is a graphical modular messaging client based on libpurple
which is capable of connecting to AIM, XMPP, 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.
Pidgin is not endorsed by or affiliated with America Online, ICQ, or Microsoft.
Pidgin can be extended by plugins written in multiple programming languages.
The following options are provided by Pidgin using the standard GNU
command line syntax:
.B \-c, \-\-config=\fIDIR\fB
Use \fIDIR\fR as the directory for config files instead of \fI~/.purple\fR.
.B \-d, \-\-debug
Print debugging messages to stdout. These are the same debugging messages
that are displayed in the \fBDebug Window\fR.
.B \-f, \-\-force-online
Try to be online even if the network is reported (by Windows, or NetworkManager
on Linux) to be unavailable.
.B \-h, \-\-help
Print a summary of command line options and exit.
.B \-m, \-\-multiple
Allow multiple instances of Pidgin to run.
.B \-n, \-\-nologin
Don't automatically login when Pidgin starts. Sets the global status to
.B \-l, \-\-login[=\fINAME\fR,\fINAME\fR,...]
Enable the comma-separated list of accounts provided, disabling all other
accounts. If the user does not specify such a comma-separated list, the
first account in accounts.xml will be enabled.
.B \-v, \-\-version
Print the current version and exit.
Pidgin uses a few terms differently from other applications. For convenience
they are defined here:
.B Buddy List
The list of other users who the user wants to see status information for
and have quick access to for messaging.
.B Buddy
A user who has been added to the Buddy List.
.B Contact
A grouping of more than one buddy who are all the same person. A contact may
contain buddies from any protocol and may contain as many buddies as the user
desires. Contact arrangements are stored locally only.
.B Alias
A private "nickname" that may be set for Buddies or the user himself. On some
protocols, aliases are saved on the server but not visible to other users. On
other protocols, aliases are saved only locally.
.B Protocol
A messaging service. AIM, XMPP, Zephyr, etc. are protocols. Others may
call these "service types," "account types," "services," and so on.
The \fBBuddy List\fR window is Pidgin's main interface window. Using
this window a user can see which of his/her buddies is online, away, idle,
etc. The user can also add buddies to and remove buddies from the buddy list.
The \fBBuddy List\fR window contains a list of the user's buddies who are
online and have allowed the user to be notified of their presence. The icon
to the left of each buddy indicates the buddy's current status. Double
clicking a buddy will open a new \fBConversation\fR window. Right clicking
will pop up a menu:
.B Get Info
Retrieves and displays information about the buddy. This information is
also known as a Profile.
Opens a new \fBConversation\fR window to the selected buddy.
.B Send File
Sends a file to the selected buddy (only available on protocols that support
file transfer).
.B View Log
Pidgin is capable of automatically logging messages. These logs are
either plain text files (with a .txt extension) or html files (with a
\&.html extension) located under the \fI~/.purple/logs\fR directory. This
menu command will display Pidgin's log viewer with logs loaded for that
buddy or chat.
.B Alias
Create an alias for this buddy. This will show an editable text field where
the buddy's name was displayed. In this field one can give this
buddy an alternate, more friendly name to appear on the buddy list and in
For example, if a buddy's 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.
The remainder of the menu will consist of protocol specific commands.
These commands vary depending on the protocol.
.B Status Selector
At the bottom of the \fBBuddy List\fR is a status selector which allows one to
change his/her status. This will be discussed further in the \fBSTATUS
MESSAGES\fR section below.
The account editor consists of a list of accounts and information about
them. It can be accessed by selecting \fBManage\fR from the Accounts menu.
Clicking \fIDelete\fR will delete the currently selected account.
Clicking \fIAdd\fR or \fIModify\fR will invoke a \fBModify Account\fR
window. Here, the user can add or alter account information. When creating
a new account, the user will submit a username and password. The user will
also choose the protocol for the account.
If \fIRemember Password\fR is chosen, the password will be saved in
Pidgin's \fI~/.purple/accounts.xml\fR configuration file.
If \fIEnabled\fR is checked in the accounts dialog, this account will
follow the status currently selected in the status selector. If it is
not checked, the account will always be offline.
Each protocol has its own specific options that can be found in the
modify screen.
All options take effect immediately.
.SH Interface
.B Show system tray icon
Specifies when to show a Pidgin icon in the notification area of the user's
panel (commonly referred to as the System Tray).
.B Hide new IM conversations
Specifies when to hide new IM messages. Messages will queue under the
specified condition until shown. Clicking the Pidgin icon in the
notification area or system tray will display the queued messages. An
icon also appears in the buddy list's menu bar; this icon may also be
used to display queued messages.
.B Show IMs and chats in tabbed windows
When checked, this option will cause IM and chat sessions to appear in
windows with multiple tabs. One tab will represent one conversation or
chat. Where tabs are placed will be dictated by the preferences below.
.B Show close buttons on tabs
When checked, this option will cause a clickable "U+2715 MULTIPLICATION X"
unicode character to appear at the right edge of each tab. Clicking this
will cause the tab to be closed.
.B Placement
Specifies where to place tabs in the window. Some tab orientations may
allow some users to fit more tabs into a single window comfortably.
.B New conversations
Specifies under which conditions tabs are placed into existing windows or
into new windows. For a single window, select \fILast created window\fR here.
.SH Conversations
.B Enable buddy icon animation
If a buddy's icon happens to be animated, this option will enable the
animation, otherwise only the first frame will be displayed.
.B Notify buddies that you are typing to them
Some protocols allow clients to tell their buddies when they are typing.
This option enables this feature for protocols that supports it.
.B Default Formatting
Allows specifying the default formatting to apply to all outgoing messages
(only applicable to protocols that support formatting in messages).
.SH 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.
The \fBAdd\fR and \fBRemove\fR buttons may be used to install or uninstall
smiley themes. Themes may also be installed by dragging and dropping them
onto the list of themes.
.SH Sounds
.B Method
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).
.B Sounds when conversation has focus
When checked, sounds will play for events in the active conversation if
the window is focused. When unchecked, sounds will not play for the
active conversation when the window is focused.
.B Enable Sounds
Determines when to play sounds.
.B Sound Events
Lets the user choose when and what sounds are to be played.
.SH Network
.B STUN server
This allows specifying a server which uses the STUN protocol to determine
a host's public IP address. This can be particularly useful for some
.B Autodetect IP address
When checked, causes Pidign to attempt to determine the public IP address
of the host on which Pidgin is running and disables the \fBPublic IP\fR
text field listed below.
.B Public IP
If \fBAutodetect IP address\fR is disabled, this field allows manually
specifying the public IP address for the host on which Pidgin is running.
This is mainly useful for users with multiple network interfaces or behind
.B Manually specify range of ports to listen on
Specify a range ports to listen on, overriding any defaults. This is
sometimes useful for file transfers and Direct IM.
.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
.B 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.
.B Open link in
Allows the user to specify whether to use an existing window, a new tab, a
new window, or to let the browser to decide what to do when calling the
browser to open a link. Which options are available will depend on which
browser is selected.
.SH Logging
.B Log format
Specifies how to log. Pidgin supports HTML and plain text, but plugins can
provide other logging methods.
.B Log all instant messages
When enabled, all IM conversations are logged. This can be overridden on a
per-conversation basis in the conversation window.
.B Log all chats
When enabled, all chat conversations are logged. This can be overridden on a
per-conversation basis in the conversation window.
.B Log all status changes to system log
When enabled, status changes are logged.
.SH Status / Idle
.B Report idle time
Determines under which conditions to report idle time. \fBBased on keyboard
and mouse use\fR uses keyboard and mouse activity to determine idle time.
\fBFrom last sent message\fR uses the time at which the user last sent a
message in Pidgin to determine idle. \fBNever\fR disables idle reporting.
.B Auto-reply
Determines when to send an auto-reply on protocols which support it
(currently only AIM).
.B Change status when idle
When enabled, this uses the \fBMinutes before becoming idle\fR and \fBChange
status to\fR preferences described below to set status on idle.
.B Minutes before becoming idle
Specifies how many minutes of inactivity are required before considering the
user to be idle.
.B Change status to
Specifies which "primitive" or "saved" status to use when setting status on
.B Use status from last exit at startup
If this is checked, Pidgin will remember what status was active when the
user closed Pidgin and restore it at the next run. When disabled, Pidgin
will always set the status selected in \fBStatus to apply at startup\fR
at startup.
.B Status to apply at startup
When \fBUse status from last exit at startup\fR is disabled, this specifies
which "primitive" or "saved" status to use at startup.
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 options, represented by icons. Some or all buttons may not be
active if the protocol does not support the specific formatting. From left
to right:
.B Font
This menu provides font control options for the current conversation. Size,
style, and face may be configured here.
.B Insert
This menu provides the ability to insert images, horizontal rules, and links
where the protocol supports each of these features.
.B Smile!
Allows the insertion of graphical smileys via the mouse. This button shows
the user a dialog with the available smileys for the current conversation.
For protocols that allow it, \fBChats\fR can be entered through the
\fIBuddies\fR menu.
Additional features available in chat, depending on the protocol are:
.B Whisper
The text will appear in the chat conversation, but it will only be visible
to the sender and the receiver.
.B Invite
Invite other people to join the chat room.
.B Ignore
Ignore anything said by the chosen person
.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.
.B Private Message (IM)
Send a message to a specific person in the chat. Messages sent this way will
not appear in the chat window, but instead open a new IM conversation.
Most protocols allow for status messages. By using status messages, a user
can leave an informative message for others to see. Status and status
messages are configured via the status selector at the bottom of the Buddy
List window. By default the menu shown here is divided into sections for
"primitive" status types, such as \fIAvailable\fR, \fIAway\fR, etc.; a few
"popular" statuses (including "transient" statuses) which have been
recently used, and a section which shows \fBNew Status...\fR and \fBSaved
Statuses...\fR options for more advanced status manipulation.
.B Primitive Statuses
A primitive status is a basic status supported by the protocol. Examples of
primitive statuses would be Available, Away, Invisible, etc. A primitive
status can be used to create a \fBTransient Status\fB or a \fBSaved Status\fR,
both explained below. Essentially, primitive statuses are building blocks
of more complicated statuses.
.B Transient Statuses
When one of the statuses from the topmost section of the status selector's
menu is selected, this creates a transient, or temporary, status. The status
will show in the "popular statuses" section in the menu until it has not been
used for a sufficiently long time. A transient status may also be created by
selecting \fINew Status...\fR from the status selector's menu, then clicking
\fIUse\fR once the user has entered the message.
.B Saved Statuses
Saved statuses are permanent--once created, they will exist until deleted.
Saved statuses are useful for statuses and status messages that will be used
on a regular basis. They are also useful for creating complex statuses in
which some accounts should always have a different status from others. For
example, one might wish to create a status called "Sleeping" that has all
accounts set to "Away", then create another status called "Working" that
has three accounts set to "Away" and another account set to "Available."
.B New Status Window
When the user selects \fINew Status...\fR from the status selector menu,
Pidgin presents the user with a dialog asking for status-related information.
That information is discussed below:
\fITitle\fR - The name of the status that will appear in the status selctor's
menu. If the user clicks the \fISave\fR or \fISave & Use\fR button, this
name will also be shown in the \fBSaved Status Window\fR. The title should
be a short description of the status.
\fIStatus\fR - The type of status being created, such as Available, Away, etc.
\fIMessage\fR - The content of the status message. This is what is visible
to other users. Some protocols will allow formatting in some status messages;
where formatting is not supported it will be stripped to the bare text entered.
\fIUse a different status for some accounts\fR - This allows the creation of
complex statuses in which some accounts' status differs from that of other
accounts. To use this, the user will click the expander to the left of the
text, then select individual accounts which will have a different status
and/or status message. When the user selects an account, Pidgin will present
another status dialog asking for a status and a message just for the selected
.B Saved Status Window
When the user selects \fISaved Statuses...\fR from the status selector's menu,
Pidgin presents a dialog that lists all saved statuses. "Transient" statuses,
discussed above, are \fB\fINOT\fR\fR shown here. This window provides the
ability to manage saved statuses by allowing the creation, modification, and
deletion of saved statuses. The \fIUse\fR, \fIModify\fR, and \fIDelete\fR
buttons here allow operation on the status selected from the list; the \fAdd\fR
button allows creation of a new saved status, and the \fIClose\fR button closes
the window.
Pidgin 2.5.0 introduced support for custom smilies on those protocols for which
interested contributors have developed support. The custom smiley manager can
be accessed by selecting \fISmiley\fR from the \fITools\fR menu. From here,
custom smilies may be added, edited, or deleted by clicking the \fIAdd\fR,
\fIEdit\fR, or \fIDelete\fR buttons, respectively.
During a conversation with another user, that user's custom smileys may be
added to the user's own custom smiley list directly from the conversation
window by right-clicking the new custom smiley and selecting \fIAdd Custom
Pidgin allows for dynamic loading of plugins to add extra functionality
to Pidgin. See \fIplugins/HOWTO\fR or
\fI\fR for information on writing
The plugins dialog can be accessed by selecting \fIPlugins\fR from the
\fITools\fR menu. Each plugin available appears in this dialog with its name,
version, and a short summary of its functionality. Plugins can be enabled
with the checkbox beside the name and short description. More information on
the currently selected plugin is available by clicking the expander beside the
text \fIPlugin Details\fR. If the selected plugin has preferences or
configuration options, the \fIConfigure Plugin\fR button will present the
plugin's preferences dialog.
.SH D-Bus
Pidgin allows for interaction via D-Bus. Currently very little documentation
about this interaction exists.
\fI@prefix@/bin/pidgin3\fR: Pidgin's location.
\fI~/.purple/blist.xml\fR: the buddy list.
\fI~/.purple/accounts.xml\fR: information about the user's accounts.
\fI~/.purple/prefs.xml\fR: Pidgin's configuration file.
\fI~/.purple/status.xml\fR: stores the user's away messages.
\fI~/.purple/logs/PROTOCOL/ACCOUNT/BUDDYNAME/DATE.{html,txt}\fR: conversation logs.
\fI@prefix@/lib/pidgin3/\fR: Pidgin's plugins directory.
\fI@prefix@/lib/purple-3/\fR: libpurple's plugins directory.
\fI~/.purple\fR: users' local settings
\fI~/.purple/plugins/\fR: users' local plugins
The bug tracker can be reached by visiting \fI\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.
If you fix a bug in Pidgin (or otherwise enhance it), please submit a
patch (using \fBmtn diff > my.diff\fR against the latest version from the
Mercurial repository) at \fI\fR
You are also encouraged to drop by at \fB#pidgin\fR on \\fR
to discuss development.
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
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., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
Pidgin's active developers are:
Daniel 'datallah' Atallah (developer)
Paul 'darkrain42' Aurich (developer)
John 'rekkanoryo' Bailey (developer and bugmaster)
Ethan 'Paco-Paco' Blanton (developer)
Sadrul Habib Chowdhury (developer)
Gary 'grim' Kramlich (developer)
Richard 'rlaager' Laager (developer) <\\fR>
Marcus 'malu' Lundblad (developer)
Sulabh 'sulabh_m' Mahajan (developer)
Richard 'wabz' Nelson (developer)
Etan 'deryni' Reisner (developer)
Michael 'Maiku' Ruprecht (developer, voice and video)
Elliott 'QuLogic' Sales de Andrade (developer)
Luke 'LSchiere' Schierer (support)
Evan Schoenberg (developer)
Kevin 'SimGuy' Stange (developer and webmaster)
Will 'resiak' Thompson (developer)
Stu 'nosnilmot' Tomlinson (developer)
Jorge 'Masca' VillaseƱor
Tomasz Wasilczyk
Our crazy patch writers include:
Jakub 'haakon' Adam
Krzysztof Klinikowski
Eion Robb
Our artists are:
Hylke Bons <\\fR>
Our retired developers are:
Herman Bloggs (win32 port) <\\fR>
Thomas Butter (developer)
Ka-Hing Cheung (developer)
Mark 'KingAnt' Doliner (developer) <\\fR>
Jim Duchek <\\fR> (maintainer)
Sean Egan (developer) <\\fR>
Rob Flynn <\\fR> (maintainer)
Adam Fritzler (libfaim maintainer)
Christian 'ChipX86' Hammond (developer & webmaster) <\\fR>
Casey Harkins (developer)
Ivan Komarov
Syd Logan (hacker and designated driver [lazy bum])
Christopher 'siege' O'Brien (developer)
Bartosz Oler (developer)
Tim 'marv' Ringenbach (developer) <\\fR>
Megan 'Cae' Schneider (support/QA)
Jim Seymour (XMPP developer)
Mark Spencer (original author) <\\fR>
Nathan 'faceprint' Walp (developer)
Eric Warmenhoven (former lead developer) <\\fR>
Our retired crazy patch writers include:
Felipe 'shx' Contreras
Decklin Foster
Peter 'Bleeter' Lawler
Robert 'Robot101' McQueen
Benjamin Miller
Dennis 'EvilDennisR' Ristuccia
Peter 'fmoo' Ruibal
Gabriel 'Nix' Schulhof
This manpage was originally written by Dennis Ristuccia
<\\fR>. It has been updated and largely rewritten by
Sean Egan <\\fR>,
Ben Tegarden <\\fR>,
and John Bailey <\\fR>.