# HG changeset patch # User Luke Schierer # Date 1085411869 0 # Node ID 826013efffcb36ab042a6cb67234681956f490d0 # Parent f5fd42679095eb83bfd8275808dc3ec265c157a3 [gaim-migrate @ 9827] " - Makes (gaim_gtk_)append_blist_node_extended_menu and (gaim_gtk_)append_blist_node_proto_menu public so that plugins can use them to duplicate the right-click menus (Guifications needs this for right-clicking on the notification) - Adds extended menu support for Contacts - Removes the "drawing-menu" signal (It was UI specific, and no-one except the gevolution plugin used it) - Updates the gevolution plugin to use the new blist-node-extended-menu signal (I can't compile the gevolution plugin here, so my changes should be checked by someone who can :) ) - Updates the blist signals documentation with the new blist-node-extended-menu signal - Updates the signals-test.c plugin to handle blist-node-extended-menu, wrote/writing-im/chat-msg and fixes displayed-im/chat-msg handling" --Stu Tomlinson this moves a string but doesn't change it. committer: Tailor Script diff -r f5fd42679095 -r 826013efffcb doc/blist-signals.dox --- a/doc/blist-signals.dox Mon May 24 15:15:09 2004 +0000 +++ b/doc/blist-signals.dox Mon May 24 15:17:49 2004 +0000 @@ -8,6 +8,7 @@ @signal buddy-signed-on @signal buddy-signed-off @signal update-idle + @signal blist-node-extended-menu @endsignals
@@ -74,5 +75,14 @@ Emitted when the buddy list is refreshed and the idle times are updated. @endsignaldef + @signaldef blist-node-extended-menu + @signalproto +void (*blist_node_extended_menu)(GaimBlistNode *node, GList **menu) + @endsignalproto + @signaldesc + Emitted when a buddlist menu is being constructed @a menu is a pointer to + a GList of GaimBlistNodeAction's allowing a plugin to add menu items + @endsignaldef + */ // vim: syntax=c tw=75 et diff -r f5fd42679095 -r 826013efffcb plugins/gevolution/gevolution.c --- a/plugins/gevolution/gevolution.c Mon May 24 15:15:09 2004 +0000 +++ b/plugins/gevolution/gevolution.c Mon May 24 15:17:49 2004 +0000 @@ -199,23 +199,29 @@ } static void -menu_item_activate_cb(GtkWidget *item, GaimBuddy *buddy) +menu_item_activate_cb(GaimBlistNode *node) { + GaimBuddy *buddy = (GaimBuddy *)node; gevo_associate_buddy_dialog_new(buddy); } static void -drawing_menu_cb(GtkWidget *menu, GaimBuddy *buddy) +blist_node_extended_menu_cb(GaimBlistNode *node, GList **menu) { + GaimBlistNodeAction *act; + GaimBuddy *buddy; GtkWidget *item; + if (!GAIM_BLIST_NODE_IS_BUDDY(node)) + return; + + buddy = (GaimBuddy *)node; + if (gevo_prpl_is_supported(buddy->account, buddy)) { - item = gtk_menu_item_new_with_label(_("Add to Address Book")); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); - - g_signal_connect(G_OBJECT(item), "activate", - G_CALLBACK(menu_item_activate_cb), buddy); + act = gaim_blist_node_action_new(_("Add to Address Book"), + menu_item_activate_cb, NULL); + *menu = g_list_append(*menu, act); } } @@ -237,8 +243,8 @@ e_book_query_unref(query); - gaim_signal_connect(GAIM_GTK_BLIST(gaim_get_blist()), "drawing-menu", - plugin, GAIM_CALLBACK(drawing_menu_cb), NULL); + gaim_signal_connect(gaim_blist_get_handle(), "blist-node-extended-menu", + plugin, GAIM_CALLBACK(blist_node_extended_menu_cb), NULL); return FALSE; } diff -r f5fd42679095 -r 826013efffcb plugins/signals-test.c --- a/plugins/signals-test.c Mon May 24 15:15:09 2004 +0000 +++ b/plugins/signals-test.c Mon May 24 15:17:49 2004 +0000 @@ -109,15 +109,24 @@ } static void -buddy_extended_menu_cb(GaimBuddy *buddy, void *data) +blist_node_extended_menu_cb(GaimBlistNode *node, void *data) { - gaim_debug_misc("signals test", "buddy-extended-menu (%s)\n", buddy->name); -} + GaimContact *p = (GaimContact *)node; + GaimBuddy *b = (GaimBuddy *)node; + GaimChat *c = (GaimChat *)node; + GaimGroup *g = (GaimGroup *)node; -static void -group_extended_menu_cb(GaimGroup *group, void *data) -{ - gaim_debug_misc("signals test", "group-extended-menu (%s)\n", group->name); + if (GAIM_BLIST_NODE_IS_CONTACT(node)) + gaim_debug_misc("signals test", "blist-node-extended-menu (Contact: %s)\n", p->alias); + else if (GAIM_BLIST_NODE_IS_BUDDY(node)) + gaim_debug_misc("signals test", "blist-node-extended-menu (Buddy: %s)\n", b->name); + else if (GAIM_BLIST_NODE_IS_CHAT(node)) + gaim_debug_misc("signals test", "blist-node-extended-menu (Chat: %s)\n", c->alias); + else if (GAIM_BLIST_NODE_IS_GROUP(node)) + gaim_debug_misc("signals test", "blist-node-extended-menu (Group: %s)\n", g->name); + else + gaim_debug_misc("signals test", "blist-node-extended-menu (UNKNOWN: %d)\n", node->type); + } @@ -166,12 +175,29 @@ } static void -displayed_im_msg_cb(GaimConversation *conv, const char *buffer, void *data) +displayed_im_msg_cb(GaimAccount *account, GaimConversation *conv, const char *buffer, void *data) { gaim_debug_misc("signals test", "displayed-im-msg (%s, %s)\n", gaim_conversation_get_name(conv), buffer); } +static gboolean +writing_im_msg_cb(GaimAccount *account, GaimConversation *conv, char **buffer, void *data) +{ + gaim_debug_misc("signals test", "writing-im-msg (%s, %s, %s)\n", + gaim_account_get_username(account), gaim_conversation_get_name(conv), *buffer); + + return FALSE; + +} + +static void +wrote_im_msg_cb(GaimAccount *account, GaimConversation *conv, const char *buffer, void *data) +{ + gaim_debug_misc("signals test", "wrote-im-msg (%s, %s, %s)\n", + gaim_account_get_username(account), gaim_conversation_get_name(conv), buffer); +} + static void sending_im_msg_cb(GaimAccount *account, char *recipient, char **buffer, void *data) { @@ -218,13 +244,30 @@ } static void -displayed_chat_msg_cb(GaimConversation *conv, const char *buffer, void *data) +displayed_chat_msg_cb(GaimAccount *account, GaimConversation *conv, const char *buffer, void *data) { gaim_debug_misc("signals test", "displayed-chat-msg (%s, %s)\n", gaim_conversation_get_name(conv), buffer); } static gboolean +writing_chat_msg_cb(GaimAccount *account, GaimConversation *conv, + char **buffer, void *data) +{ + gaim_debug_misc("signals test", "writing-chat-msg (%s, %s)\n", + gaim_conversation_get_name(conv), *buffer); + + return FALSE; +} + +static void +wrote_chat_msg_cb(GaimAccount *account, GaimConversation *conv, const char *buffer, void *data) +{ + gaim_debug_misc("signals test", "wrote-chat-msg (%s, %s)\n", + gaim_conversation_get_name(conv), buffer); +} + +static gboolean sending_chat_msg_cb(GaimAccount *account, char **buffer, int id, void *data) { gaim_debug_misc("signals test", "sending-chat-msg (%s, %s, %d)\n", @@ -416,10 +459,8 @@ 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); + gaim_signal_connect(blist_handle, "blist-node-extended-menu", + plugin, GAIM_CALLBACK(blist_node_extended_menu_cb), NULL); /* Connection subsystem signals */ gaim_signal_connect(conn_handle, "signing-on", @@ -436,6 +477,10 @@ plugin, GAIM_CALLBACK(displaying_im_msg_cb), NULL); gaim_signal_connect(conv_handle, "displayed-im-msg", plugin, GAIM_CALLBACK(displayed_im_msg_cb), NULL); + gaim_signal_connect(conv_handle, "writing-im-msg", + plugin, GAIM_CALLBACK(writing_im_msg_cb), NULL); + gaim_signal_connect(conv_handle, "wrote-im-msg", + plugin, GAIM_CALLBACK(wrote_im_msg_cb), NULL); gaim_signal_connect(conv_handle, "sending-im-msg", plugin, GAIM_CALLBACK(sending_im_msg_cb), NULL); gaim_signal_connect(conv_handle, "sent-im-msg", @@ -448,6 +493,10 @@ plugin, GAIM_CALLBACK(displaying_chat_msg_cb), NULL); gaim_signal_connect(conv_handle, "displayed-chat-msg", plugin, GAIM_CALLBACK(displayed_chat_msg_cb), NULL); + gaim_signal_connect(conv_handle, "writing-chat-msg", + plugin, GAIM_CALLBACK(writing_chat_msg_cb), NULL); + gaim_signal_connect(conv_handle, "wrote-chat-msg", + plugin, GAIM_CALLBACK(wrote_chat_msg_cb), NULL); gaim_signal_connect(conv_handle, "sending-chat-msg", plugin, GAIM_CALLBACK(sending_chat_msg_cb), NULL); gaim_signal_connect(conv_handle, "sent-chat-msg", diff -r f5fd42679095 -r 826013efffcb src/gtkblist.c --- a/src/gtkblist.c Mon May 24 15:15:09 2004 +0000 +++ b/src/gtkblist.c Mon May 24 15:17:49 2004 +0000 @@ -1094,8 +1094,8 @@ } -static void -append_blist_node_proto_menu (GtkWidget *menu, GaimConnection *gc, GaimBlistNode *node) +void +gaim_gtk_append_blist_node_proto_menu (GtkWidget *menu, GaimConnection *gc, GaimBlistNode *node) { GList *l, *ll; gboolean dup_separator = FALSE; @@ -1112,8 +1112,8 @@ } -static void -append_blist_node_extended_menu (GtkWidget *menu, GaimBlistNode *node) +void +gaim_gtk_append_blist_node_extended_menu (GtkWidget *menu, GaimBlistNode *node) { GList *l, *ll; gboolean dup_separator = FALSE; @@ -1139,11 +1139,8 @@ gaim_new_item_from_stock(menu, _("View _Log"), NULL, G_CALLBACK(gtk_blist_menu_showlog_cb), b, 0, 0, NULL); - append_blist_node_proto_menu(menu, b->account->gc, (GaimBlistNode *) b); - append_blist_node_extended_menu(menu, (GaimBlistNode *) b); - - /* moving on to the old ui-specific plugin menus */ - gaim_signal_emit(gaim_gtk_blist_get_handle(), "drawing-menu", menu, b); + gaim_gtk_append_blist_node_proto_menu(menu, b->account->gc, (GaimBlistNode *) b); + gaim_gtk_append_blist_node_extended_menu(menu, (GaimBlistNode *) b); gaim_separator(menu); @@ -1204,7 +1201,7 @@ gaim_new_item_from_stock(menu, _("_Rename"), NULL, G_CALLBACK(show_rename_group), node, 0, 0, NULL); - append_blist_node_extended_menu(menu, node); + gaim_gtk_append_blist_node_extended_menu(menu, node); return menu; } @@ -1228,11 +1225,8 @@ gaim_new_check_item(menu, _("Auto-Join"), G_CALLBACK(gtk_blist_menu_autojoin_cb), node, autojoin); - append_blist_node_proto_menu(menu, c->account->gc, node); - append_blist_node_extended_menu(menu, node); - - /* moving on to the old ui-specific plugin menus */ - gaim_signal_emit(gaim_gtk_blist_get_handle(), "drawing-menu", menu, c); + gaim_gtk_append_blist_node_proto_menu(menu, c->account->gc, node); + gaim_gtk_append_blist_node_extended_menu(menu, node); gaim_separator(menu); @@ -1257,6 +1251,9 @@ node, 0, 0, NULL); gaim_new_item_from_stock(menu, _("_Remove"), GTK_STOCK_REMOVE, G_CALLBACK(gaim_gtk_blist_remove_cb), node, 0, 0, NULL); + + gaim_gtk_append_blist_node_extended_menu(menu, node); + return menu; } @@ -4497,12 +4494,6 @@ gaim_prefs_add_int("/gaim/gtk/blist/tooltip_delay", 500); /* Register our signals */ - gaim_signal_register(gtk_blist_handle, "drawing-menu", - gaim_marshal_VOID__POINTER_POINTER, NULL, 2, - gaim_value_new(GAIM_TYPE_BOXED, "GtkMenu"), - gaim_value_new(GAIM_TYPE_SUBTYPE, - GAIM_SUBTYPE_BLIST_BUDDY)); - gaim_signal_register(gtk_blist_handle, "gtkblist-created", gaim_marshal_VOID__POINTER, NULL, 1, gaim_value_new(GAIM_TYPE_SUBTYPE, diff -r f5fd42679095 -r 826013efffcb src/gtkblist.h --- a/src/gtkblist.h Mon May 24 15:15:09 2004 +0000 +++ b/src/gtkblist.h Mon May 24 15:17:49 2004 +0000 @@ -226,4 +226,14 @@ */ void gaim_gtk_blist_joinchat_show(void); +/** + * Appends the protocol specific menu items for a GaimBlistNode + */ +void gaim_gtk_append_blist_node_proto_menu (GtkWidget *menu, GaimConnection *gc, GaimBlistNode *node); + +/** + * Appends the extended menu items for a GaimBlistNode + */ +void gaim_gtk_append_blist_node_extended_menu(GtkWidget *menu, GaimBlistNode *node); + #endif /* _GAIM_GTK_LIST_H_ */