Mercurial > pidgin.yaz
view doc/gtkconv-signals.dox @ 23995:85bed17fe5c1
The variable we use to keep track of the watcher of the ssl connection
should be unsigned. This isn't really a problem in Pidgin, where we
use glib's mainloop and GIOChannels because glib starts assigning the
handle IDs sequentially starting from 1.
But if an eventloop implementation ever returns a handle ID greater
than the largest possible signed integer (2,147,483,647) then we
won't be able to remove the watcher because purple_ssl_close() in
sslconn.c only removes it if inpa > 0, and since it interprets inpa
as a signed value then handles over 2,147,483,647 appear as negative
numbers.
I stumbled upon this when playing around with libevent, which can
use epoll. My implementation generated a random handle ID which
was sometimes greater than 2,147,483,647.
I don't believe this breaks binary compatibility. And I don't think
it breaks source compatibility, but I guess it might depend on what
compiler you're using.
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Thu, 04 Sep 2008 18:04:29 +0000 |
parents | 0d8061bbfc1d |
children | 02a2e8183b1d |
line wrap: on
line source
/** @page gtkconv-signals GtkConv Signals @signals @signal conversation-dragging @signal conversation-timestamp @signal displaying-im-msg @signal displayed-im-msg @signal displaying-chat-msg @signal displayed-chat-msg @signal conversation-switched @signal conversation-hiding @signal conversation-displayed @endsignals @see gtkconv.h <hr> @signaldef conversation-dragging @signalproto void (*conversation_dragging)(PidginWindow *source, PidginWindow *destination); @endsignalproto @signaldesc Emitted when a conversation is being drag and dropped between windows. @param source The window where the conversation is. @param destination The window where the conversation will be moved to. @endsignaldef @signaldef conversation-timestamp @signalproto char *(*conversation_timestamp)(PurpleConversation *conv, time_t when, gboolean show_date); @endsignalproto @signaldesc Emitted to allow plugins to customize the timestamp on a message. @param conv The conversation the message belongs to. @param when The time to be converted to a string. @param show_date Whether the date should be displayed. @return A textual representation of the time, or @c NULL to use a default format. @endsignaldef @signaldef displaying-im-msg @signalproto gboolean (*displaying_im_msg)(PurpleAccount *account, const char *who, char **message, PurpleConversation *conv, PurpleMessageFlags flags); @endsignalproto @signaldesc Emitted just before a message is displayed in an IM conversation. @a message is a pointer to a string, so the plugin can replace the message that will be displayed. This can also be used to cancel displaying a message by returning @c TRUE. @note Make sure to free @a *message before you replace it! @param account The account. @param who The name of the user. @param message A pointer to the message. @param conv The conversation. @param flags Flags for this message. @return @c TRUE if the message should be canceled, or @c FALSE otherwise. @endsignaldef @signaldef displayed-im-msg @signalproto void (*displayed_im_msg)(PurpleAccount *account, const char *who, char *message, PurpleConversation *conv, PurpleMessageFlags flags); @endsignalproto @signaldesc Emitted after a message is displayed in an IM conversation. @param account The account. @param who The name of the user. @param message The message. @param conv The conversation. @param flags Flags for this message. @endsignaldef @signaldef displaying-chat-msg @signalproto gboolean (*displaying_chat_msg)(PurpleAccount *account, const char *who, char **message, PurpleConversation *conv, PurpleMessageFlags flags); @endsignalproto @signaldesc Emitted just before a message is displayed in a chat. @a message is a pointer to a string, so the plugin can replace the message that will be displayed. This can also be used to cancel displaying a message by returning @c TRUE. @note Make sure to free @a *message before you replace it! @param account The account the message is being displayed and sent on. @param who The name of the user. @param message A pointer to the message that will be displayed and sent. @param conv The conversation the message is being displayed and sent on. @param flags Flags for this message. @return @c TRUE if the message should be canceled, or @c FALSE otherwise. @endsignaldef @signaldef displayed-chat-msg @signalproto void (*displayed_chat_msg)(PurpleAccount *account, const char *who, char *message, PurpleConversation *conv, PurpleMessageFlags flags); @endsignalproto @signaldesc Emitted after a message is displayed in a chat conversation. @param account The account the message is being displayed and sent on. @param who The name of the user. @param message A pointer to the message that will be displayed and sent. @param conv The conversation the message is being displayed and sent on. @param flags Flags for this message. @endsignaldef @signaldef conversation-switched @signalproto void (*conversation_switched)(PurpleConversation *conv); @endsignalproto @signaldesc Emitted when a window switched from one conversation to another. @param new_conv The now active conversation. @endsignaldef @signaldef conversation-hiding @signalproto void (*conversation_hiding)(PidginConversation *gtkconv); @endsignalproto @signaldesc Emitted immediately before an existing conversation is hidden. @param gtkconv The PidginConversation @since 2.2.0 @endsignaldef @signaldef conversation-displayed @signalproto void (*conversation_displayed)(PidginConversation *gtkconv); @endsignalproto @signaldesc Emitted right after the Pidgin UI is attached to a new or a hidden conversation. @param gtkconv The PidginConversation @since 2.2.0 @endsignaldef */ // vim: syntax=c.doxygen tw=75 et