# HG changeset patch # User Luke Schierer # Date 1085150012 0 # Node ID 8f838ae3e710d6c9e38b60f7502bdafca00b6c9f # Parent 3738d1eac0adc7e251614707d3ce188ed18e403b [gaim-migrate @ 9774] " This patch renames the existing received-*-msg signals to receiving-*msg to fit the naming of other signals where a pointer to the message is passed (writing, sending, displaying) It adds new received-*-msg signals which are emitted after the receiving signals, in line with the other conversation signals (wrote, sent, displayed) This is necessary to allow plugins which depend on the final received message to work alongside plugins which may modify the message. One known example of this is festival-gaim alongside gaim-encryption - festival-gaim would try to "speak" the encrypted text: http://sf.net/tracker/?func=detail&aid=943216&group_id=89763&atid=591320 I've tested this with gaim-encryption and festival-gaim (locally modified so gaim-encryption uses the receiving signal and festival uses the received signal) All in-tree users of received-*-msg are updated to use receiving-*-msg if they do modify the message, the conversation-signals documentation is updated, the signals-test.c & signal-test.tcl plugins are also updated." --Stu Tomlinson committer: Tailor Script diff -r 3738d1eac0ad -r 8f838ae3e710 ChangeLog --- a/ChangeLog Fri May 21 14:26:31 2004 +0000 +++ b/ChangeLog Fri May 21 14:33:32 2004 +0000 @@ -42,6 +42,7 @@ Direct IM and inherits all its bugs. * Direct IM for AIM should be slightly less buggy, and may actually work now, if at least one side isn't behind a NAT or firewall. + * Made the recieve-*-msg signals match the sending ones (Stu Tomlinson) Preference Changes(Stu Tomlinson): * Added a "none" smiley theme to replace the "Show graphical diff -r 3738d1eac0ad -r 8f838ae3e710 doc/conversation-signals.dox --- a/doc/conversation-signals.dox Fri May 21 14:26:31 2004 +0000 +++ b/doc/conversation-signals.dox Fri May 21 14:33:32 2004 +0000 @@ -7,6 +7,7 @@ @signal displayed-im-msg @signal sending-im-msg @signal sent-im-msg + @signal receiving-im-msg @signal received-im-msg @signal writing-chat-msg @signal wrote-chat-msg @@ -14,6 +15,7 @@ @signal displayed-chat-msg @signal sending-chat-msg @signal sent-chat-msg + @signal receiving-chat-msg @signal received-chat-msg @signal conversation-switching @signal conversation-switched @@ -118,9 +120,9 @@ @param message The message that was sent. @endsignaldef - @signaldef received-im-msg + @signaldef receiving-im-msg @signalproto -gboolean (*received_im_msg)(GaimAccount *account, char **sender, +gboolean (*receiving_im_msg)(GaimAccount *account, char **sender, char **message, int *flags); @endsignalproto @signaldesc @@ -137,6 +139,19 @@ @param flags The message flags. @endsignaldef + @signaldef received-im-msg + @signalproto +void (*received_im_msg)(GaimAccount *account, char *sender, + char *message, int flags); + @endsignalproto + @signaldesc + Emitted after an IM is received. + @param account The account the message was received on. + @param sender The username of the sender. + @param message The message that was sent. + @param flags The message flags. + @endsignaldef + @signaldef writing-chat-msg @signalproto gboolean (*writing_chat_msg)(GaimAccount *account, GaimConversation *conv, char **message); @@ -222,9 +237,9 @@ @param id The ID of the chat. @endsignaldef - @signaldef received-chat-msg + @signaldef receiving-chat-msg @signalproto -gboolean (*received_chat_msg)(GaimAccount *account, char **sender, +gboolean (*receiving_chat_msg)(GaimAccount *account, char **sender, char **message, GaimConversation *conv); @endsignalproto @signaldesc @@ -241,6 +256,19 @@ @param conv The chat conversation. @endsignaldef + @signaldef received-chat-msg + @signalproto +void (*received_chat_msg)(GaimAccount *account, char *sender, + char *message, GaimConversation *conv); + @endsignalproto + @signaldesc + Emitted after a chat message is received. + @param account The account the message was received on. + @param sender The username of the sender. + @param message The message that was sent. + @param conv The chat conversation. + @endsignaldef + @signaldef conversation-switching @signalproto void (*conversation_switching)(GaimConversation *old_conv, diff -r 3738d1eac0ad -r 8f838ae3e710 plugins/docklet/docklet.c --- a/plugins/docklet/docklet.c Fri May 21 14:26:31 2004 +0000 +++ b/plugins/docklet/docklet.c Fri May 21 14:33:32 2004 +0000 @@ -376,8 +376,8 @@ } static gboolean -gaim_conv_im_recv(GaimAccount *account, char **sender, - char **message, int *flags, void *data) +gaim_conv_im_recv(GaimAccount *account, char *sender, + char *message, int flags, void *data) { /* if message queuing while away is enabled, this event could be the first message so we need to see if the status (and hence icon) needs changing. diff -r 3738d1eac0ad -r 8f838ae3e710 plugins/gaiminc.c --- a/plugins/gaiminc.c Fri May 21 14:26:31 2004 +0000 +++ b/plugins/gaiminc.c Fri May 21 14:33:32 2004 +0000 @@ -64,7 +64,7 @@ plugin, GAIM_CALLBACK(echo_hi), NULL); /* this is for doing something fun when we get a message */ - gaim_signal_connect(gaim_conversations_get_handle(), "received-im-msg", + gaim_signal_connect(gaim_conversations_get_handle(), "receiving-im-msg", plugin, GAIM_CALLBACK(reverse), NULL); /* this is for doing something fun when a buddy comes online */ diff -r 3738d1eac0ad -r 8f838ae3e710 plugins/notify.c --- a/plugins/notify.c Fri May 21 14:26:31 2004 +0000 +++ b/plugins/notify.c Fri May 21 14:33:32 2004 +0000 @@ -231,7 +231,7 @@ } static gboolean -chat_recv_im(GaimAccount *account, char **who, char **text, int id, void *m) +chat_recv_im(GaimAccount *account, char *who, char *text, int id, void *m) { GaimConversation *conv = gaim_find_chat(gaim_account_get_connection(account), id); @@ -253,9 +253,9 @@ } static gboolean -im_recv_im(GaimAccount *account, char **who, char **what, int *flags, void *m) +im_recv_im(GaimAccount *account, char *who, char *what, int flags, void *m) { - GaimConversation *conv = gaim_find_conversation_with_account(*who, account); + GaimConversation *conv = gaim_find_conversation_with_account(who, account); notify(conv, TRUE); diff -r 3738d1eac0ad -r 8f838ae3e710 plugins/signals-test.c --- a/plugins/signals-test.c Fri May 21 14:26:31 2004 +0000 +++ b/plugins/signals-test.c Fri May 21 14:33:32 2004 +0000 @@ -108,6 +108,19 @@ gaim_debug_misc("signals test", "buddy-signed-off (%s)\n", buddy->name); } +static void +buddy_extended_menu_cb(GaimBuddy *buddy, void *data) +{ + gaim_debug_misc("signals test", "buddy-extended-menu (%s)\n", buddy->name); +} + +static void +group_extended_menu_cb(GaimGroup *group, void *data) +{ + gaim_debug_misc("signals test", "group-extended-menu (%s)\n", group->name); +} + + /************************************************************************** * Connection subsystem signal callbacks **************************************************************************/ @@ -175,16 +188,25 @@ } static gboolean -received_im_msg_cb(GaimAccount *account, char **sender, char **buffer, +receiving_im_msg_cb(GaimAccount *account, char **sender, char **buffer, int *flags, void *data) { - gaim_debug_misc("signals test", "received-im-msg (%s, %s, %s, %d)\n", + gaim_debug_misc("signals test", "receiving-im-msg (%s, %s, %s, %d)\n", gaim_account_get_username(account), *sender, *buffer, *flags); return FALSE; } +static void +received_im_msg_cb(GaimAccount *account, char *sender, char *buffer, + int flags, void *data) +{ + gaim_debug_misc("signals test", "received-im-msg (%s, %s, %s, %d)\n", + gaim_account_get_username(account), sender, buffer, + flags); +} + static gboolean displaying_chat_msg_cb(GaimAccount *account, GaimConversation *conv, char **buffer, void *data) @@ -219,11 +241,11 @@ } static gboolean -received_chat_msg_cb(GaimAccount *account, char **sender, char **buffer, +receiving_chat_msg_cb(GaimAccount *account, char **sender, char **buffer, GaimConversation *chat, void *data) { gaim_debug_misc("signals test", - "received-chat-msg (%s, %s, %s, %s, %s)\n", + "receiving-chat-msg (%s, %s, %s, %s)\n", gaim_account_get_username(account), *sender, *buffer, gaim_conversation_get_name(chat)); @@ -231,6 +253,16 @@ } static void +received_chat_msg_cb(GaimAccount *account, char *sender, char *buffer, + GaimConversation *chat, void *data) +{ + gaim_debug_misc("signals test", + "received-chat-msg (%s, %s, %s, %s)\n", + gaim_account_get_username(account), sender, buffer, + gaim_conversation_get_name(chat)); +} + +static void conversation_switching_cb(GaimConversation *old_conv, GaimConversation *new_conv, void *data) { @@ -384,6 +416,10 @@ plugin, GAIM_CALLBACK(buddy_signed_on_cb), NULL); gaim_signal_connect(blist_handle, "buddy-signed-off", plugin, GAIM_CALLBACK(buddy_signed_off_cb), NULL); + gaim_signal_connect(blist_handle, "buddy-extended-menu", + plugin, GAIM_CALLBACK(buddy_extended_menu_cb), NULL); + gaim_signal_connect(blist_handle, "group-extended-menu", + plugin, GAIM_CALLBACK(group_extended_menu_cb), NULL); /* Connection subsystem signals */ gaim_signal_connect(conn_handle, "signing-on", @@ -404,6 +440,8 @@ plugin, GAIM_CALLBACK(sending_im_msg_cb), NULL); gaim_signal_connect(conv_handle, "sent-im-msg", plugin, GAIM_CALLBACK(sent_im_msg_cb), NULL); + gaim_signal_connect(conv_handle, "receiving-im-msg", + plugin, GAIM_CALLBACK(receiving_im_msg_cb), NULL); gaim_signal_connect(conv_handle, "received-im-msg", plugin, GAIM_CALLBACK(received_im_msg_cb), NULL); gaim_signal_connect(conv_handle, "displaying-chat-msg", @@ -414,6 +452,8 @@ plugin, GAIM_CALLBACK(sending_chat_msg_cb), NULL); gaim_signal_connect(conv_handle, "sent-chat-msg", plugin, GAIM_CALLBACK(sent_chat_msg_cb), NULL); + gaim_signal_connect(conv_handle, "receiving-chat-msg", + plugin, GAIM_CALLBACK(receiving_chat_msg_cb), NULL); gaim_signal_connect(conv_handle, "received-chat-msg", plugin, GAIM_CALLBACK(received_chat_msg_cb), NULL); gaim_signal_connect(conv_handle, "conversation-switching", diff -r 3738d1eac0ad -r 8f838ae3e710 plugins/tcl/TCL-HOWTO --- a/plugins/tcl/TCL-HOWTO Fri May 21 14:26:31 2004 +0000 +++ b/plugins/tcl/TCL-HOWTO Fri May 21 14:33:32 2004 +0000 @@ -296,7 +296,7 @@ intended to be a list only of their arguments. Signal callbacks will be made in their own namespace, and arguments to those signal callbacks will live in the namespace 'event' underneath that -namespace. To briefly illustrate, the signal received-im-msg is +namespace. To briefly illustrate, the signal receiving-im-msg is provided with three arguments; the account on which the IM was received, the screen name of the user sending the IM, and the text of the IM. These arguments live in the variables event::account, @@ -304,14 +304,14 @@ which notifies the user of an incoming IM containing the word 'shizzle' might look like this: -gaim::signal connect [gaim::conversation handle] received-im-msg { +gaim::signal connect [gaim::conversation handle] receiving-im-msg { if {[ string match "*shizzle*" $event::buffer ]} { gaim::notify -info "tcl plugin" "Fo' shizzle" \ "$event::sender is down with the shizzle" } } -Note that for some signals (notably received-im-msg, sending-im-msg, +Note that for some signals (notably receiving-im-msg, sending-im-msg, and their chat counterparts), changes to the event arguments will change the message itself from Gaim's vantage. For those signals whose return value is meaningful, returning a value from the Tcl event diff -r 3738d1eac0ad -r 8f838ae3e710 plugins/tcl/signal-test.tcl --- a/plugins/tcl/signal-test.tcl Fri May 21 14:26:31 2004 +0000 +++ b/plugins/tcl/signal-test.tcl Fri May 21 14:33:32 2004 +0000 @@ -46,14 +46,22 @@ gaim::debug -info "tcl signal" "quitting" } +gaim::signal connect [gaim::conversation handle] receiving-chat-msg { account who what id } { + gaim::debug -info "tcl signal" "receiving-chat-msg [gaim::account username $account] $id $who \"$what\"" + return 0 +} + +gaim::signal connect [gaim::conversation handle] receiving-im-msg { account who what flags } { + gaim::debug -info "tcl signal" "receiving-im-msg [gaim::account username $account] $flags $who \"$what\"" + return 0 +} + gaim::signal connect [gaim::conversation handle] received-chat-msg { account who what id } { gaim::debug -info "tcl signal" "received-chat-msg [gaim::account username $account] $id $who \"$what\"" - return 0 } gaim::signal connect [gaim::conversation handle] received-im-msg { account who what flags } { gaim::debug -info "tcl signal" "received-im-msg [gaim::account username $account] $flags $who \"$what\"" - return 0 } gaim::signal connect [gaim::conversation handle] sending-chat-msg { account what id } { diff -r 3738d1eac0ad -r 8f838ae3e710 src/conversation.c --- a/src/conversation.c Fri May 21 14:26:31 2004 +0000 +++ b/src/conversation.c Fri May 21 14:33:32 2004 +0000 @@ -2706,7 +2706,7 @@ gaim_value_new(GAIM_TYPE_STRING), gaim_value_new(GAIM_TYPE_STRING)); - gaim_signal_register(handle, "received-im-msg", + gaim_signal_register(handle, "receiving-im-msg", gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER, gaim_value_new(GAIM_TYPE_BOOLEAN), 4, gaim_value_new(GAIM_TYPE_SUBTYPE, @@ -2715,6 +2715,15 @@ gaim_value_new_outgoing(GAIM_TYPE_STRING), gaim_value_new_outgoing(GAIM_TYPE_UINT)); + gaim_signal_register(handle, "received-im-msg", + gaim_marshal_VOID__POINTER_POINTER_POINTER_UINT, + NULL, 4, + gaim_value_new(GAIM_TYPE_SUBTYPE, + GAIM_SUBTYPE_ACCOUNT), + gaim_value_new(GAIM_TYPE_STRING), + gaim_value_new(GAIM_TYPE_STRING), + gaim_value_new(GAIM_TYPE_UINT)); + gaim_signal_register(handle, "writing-chat-msg", gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER, gaim_value_new(GAIM_TYPE_BOOLEAN), 3, @@ -2765,7 +2774,7 @@ gaim_value_new(GAIM_TYPE_STRING), gaim_value_new(GAIM_TYPE_UINT)); - gaim_signal_register(handle, "received-chat-msg", + gaim_signal_register(handle, "receiving-chat-msg", gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER, gaim_value_new(GAIM_TYPE_BOOLEAN), 4, gaim_value_new(GAIM_TYPE_SUBTYPE, @@ -2775,6 +2784,16 @@ gaim_value_new(GAIM_TYPE_SUBTYPE, GAIM_SUBTYPE_CONVERSATION)); + gaim_signal_register(handle, "received-chat-msg", + gaim_marshal_VOID__POINTER_POINTER_POINTER_POINTER, + NULL, 4, + gaim_value_new(GAIM_TYPE_SUBTYPE, + GAIM_SUBTYPE_ACCOUNT), + gaim_value_new(GAIM_TYPE_STRING), + gaim_value_new(GAIM_TYPE_STRING), + gaim_value_new(GAIM_TYPE_SUBTYPE, + GAIM_SUBTYPE_CONVERSATION)); + gaim_signal_register(handle, "conversation-switching", gaim_marshal_VOID__POINTER_POINTER, NULL, 2, gaim_value_new(GAIM_TYPE_SUBTYPE, diff -r 3738d1eac0ad -r 8f838ae3e710 src/server.c --- a/src/server.c Fri May 21 14:26:31 2004 +0000 +++ b/src/server.c Fri May 21 14:33:32 2004 +0000 @@ -827,7 +827,7 @@ plugin_return = GPOINTER_TO_INT( gaim_signal_emit_return_1(gaim_conversations_get_handle(), - "received-im-msg", gc->account, + "receiving-im-msg", gc->account, &angel, &buffy, &imflags)); if (!buffy || !angel || plugin_return) { @@ -837,10 +837,13 @@ g_free(angel); return; } - name = angel; + name = angel; message = buffy; + gaim_signal_emit(gaim_conversations_get_handle(), "received-im-msg", gc->account, + name, message, imflags); + /* Make sure URLs are clickable */ buffy = gaim_markup_linkify(message); g_free(message); @@ -1485,7 +1488,7 @@ plugin_return = GPOINTER_TO_INT( gaim_signal_emit_return_1(gaim_conversations_get_handle(), - "received-chat-msg", g->account, + "receiving-chat-msg", g->account, &angel, &buffy, conv)); if (!buffy || !angel || plugin_return) { @@ -1498,6 +1501,9 @@ who = angel; message = buffy; + gaim_signal_emit(gaim_conversations_get_handle(), "received-chat-msg", g->account, + who, message, conv); + /* Make sure URLs are clickable */ buf = gaim_markup_linkify(message);