# HG changeset patch # User Luke Schierer # Date 1092829606 0 # Node ID ec6ff57d7b06a5f6bf0e1b69bb22ca3cd01e6bad # Parent 09f18996c2eaa51c25cc958a67a373a8b2f59338 [gaim-migrate @ 10642] " moves make_buddy_menu to gaim_gtk_blist_make_buddy_menu and makes it public. Also, cleaned up a lot of extra pointers we were passing around. No need to pass the menu, buddy, prpl, and prplinfo when we can get the prpl and the prplinfo from the buddy with buddy->account->gc->prpl, and GAIM_PLUGIN_PROTOCOL_INFO();" --Gary Kramlich committer: Tailor Script diff -r 09f18996c2ea -r ec6ff57d7b06 src/gtkblist.c --- a/src/gtkblist.c Wed Aug 18 04:40:59 2004 +0000 +++ b/src/gtkblist.c Wed Aug 18 11:46:46 2004 +0000 @@ -1123,41 +1123,51 @@ } -static void make_buddy_menu(GtkWidget *menu, GaimPluginProtocolInfo *prpl_info, GaimBuddy *b) -{ +void +gaim_gtk_blist_make_buddy_menu(GtkWidget *menu, GaimBuddy *buddy) { + GaimPluginProtocolInfo *prpl_info; + + g_return_if_fail(menu); + g_return_if_fail(buddy); + + prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(buddy->account->gc->prpl); + if (prpl_info && prpl_info->get_info) { gaim_new_item_from_stock(menu, _("Get _Info"), GAIM_STOCK_INFO, - G_CALLBACK(gtk_blist_menu_info_cb), b, 0, 0, NULL); + G_CALLBACK(gtk_blist_menu_info_cb), buddy, 0, 0, NULL); } gaim_new_item_from_stock(menu, _("I_M"), GAIM_STOCK_IM, - G_CALLBACK(gtk_blist_menu_im_cb), b, 0, 0, NULL); + G_CALLBACK(gtk_blist_menu_im_cb), buddy, 0, 0, NULL); if (prpl_info && prpl_info->send_file) { - if (!prpl_info->can_receive_file - || prpl_info->can_receive_file(b->account->gc, b->name)) { - gaim_new_item_from_stock(menu, _("_Send File"), GAIM_STOCK_FILE_TRANSFER, - G_CALLBACK(gtk_blist_menu_send_file_cb), b, 0, 0, NULL); + if (!prpl_info->can_receive_file || + prpl_info->can_receive_file(buddy->account->gc, buddy->name)) + { + gaim_new_item_from_stock(menu, _("_Send File"), + GAIM_STOCK_FILE_TRANSFER, + G_CALLBACK(gtk_blist_menu_send_file_cb), + buddy, 0, 0, NULL); } } gaim_new_item_from_stock(menu, _("Add Buddy _Pounce"), NULL, - G_CALLBACK(gtk_blist_menu_bp_cb), b, 0, 0, NULL); + G_CALLBACK(gtk_blist_menu_bp_cb), buddy, 0, 0, NULL); gaim_new_item_from_stock(menu, _("View _Log"), NULL, - G_CALLBACK(gtk_blist_menu_showlog_cb), b, 0, 0, NULL); - - gaim_gtk_append_blist_node_proto_menu(menu, b->account->gc, (GaimBlistNode *) b); - gaim_gtk_append_blist_node_extended_menu(menu, (GaimBlistNode *) b); + G_CALLBACK(gtk_blist_menu_showlog_cb), buddy, 0, 0, NULL); + + gaim_gtk_append_blist_node_proto_menu(menu, buddy->account->gc, + (GaimBlistNode *)buddy); + gaim_gtk_append_blist_node_extended_menu(menu, (GaimBlistNode *)buddy); gaim_separator(menu); gaim_new_item_from_stock(menu, _("_Alias..."), GAIM_STOCK_ALIAS, - G_CALLBACK(gtk_blist_menu_alias_cb), b, 0, 0, NULL); + G_CALLBACK(gtk_blist_menu_alias_cb), buddy, 0, 0, NULL); gaim_new_item_from_stock(menu, _("_Remove"), GTK_STOCK_REMOVE, - G_CALLBACK(gaim_gtk_blist_remove_cb), b, + G_CALLBACK(gaim_gtk_blist_remove_cb), buddy, 0, 0, NULL); } -static gboolean gtk_blist_key_press_cb(GtkWidget *tv, GdkEventKey *event, - gpointer null) -{ +static gboolean +gtk_blist_key_press_cb(GtkWidget *tv, GdkEventKey *event, gpointer data) { GaimBlistNode *node; GValue val = { 0, }; GtkTreeIter iter; @@ -1212,11 +1222,7 @@ static GtkWidget * -create_chat_menu (GaimBlistNode *node, - GaimChat *c, - GaimPlugin *prpl, - GaimPluginProtocolInfo *prpl_info) -{ +create_chat_menu(GaimBlistNode *node, GaimChat *c) { GtkWidget *menu; gboolean autojoin; @@ -1262,18 +1268,14 @@ } static GtkWidget * -create_buddy_menu (GaimBlistNode *node, - GaimBuddy *b, - GaimPlugin *prpl, - GaimPluginProtocolInfo *prpl_info) -{ +create_buddy_menu(GaimBlistNode *node, GaimBuddy *b) { struct _gaim_gtk_blist_node *gtknode = (struct _gaim_gtk_blist_node *)node->ui_data; GtkWidget *menu; GtkWidget *menuitem; gboolean show_offline = gaim_prefs_get_bool("/gaim/gtk/blist/show_offline_buddies"); menu = gtk_menu_new(); - make_buddy_menu(menu, prpl_info, b); + gaim_gtk_blist_make_buddy_menu(menu, b); if(GAIM_BLIST_NODE_IS_CONTACT(node)) { gaim_separator(menu); @@ -1320,10 +1322,7 @@ gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); gtk_widget_show(submenu); - prpl = gaim_find_prpl(gaim_account_get_protocol_id(buddy->account)); - prpl_info = prpl ? GAIM_PLUGIN_PROTOCOL_INFO(prpl) : NULL; - - make_buddy_menu(submenu, prpl_info, buddy); + gaim_gtk_blist_make_buddy_menu(submenu, buddy); } } } @@ -1346,31 +1345,23 @@ /* Create a menu based on the thing we right-clicked on */ if (GAIM_BLIST_NODE_IS_GROUP(node)) { GaimGroup *g = (GaimGroup *)node; + menu = create_group_menu(node, g); } else if (GAIM_BLIST_NODE_IS_CHAT(node)) { GaimChat *c = (GaimChat *)node; - GaimPlugin *prpl = NULL; - GaimPluginProtocolInfo *prpl_info = NULL; - prpl = gaim_find_prpl(gaim_account_get_protocol_id(c->account)); - if (prpl != NULL) - prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl); - menu = create_chat_menu(node, c, prpl, prpl_info); + + menu = create_chat_menu(node, c); } else if ((GAIM_BLIST_NODE_IS_CONTACT(node)) && (gtknode->contact_expanded)) { menu = create_contact_menu(node); } else if (GAIM_BLIST_NODE_IS_CONTACT(node) || GAIM_BLIST_NODE_IS_BUDDY(node)) { GaimBuddy *b; - GaimPlugin *prpl = NULL; - GaimPluginProtocolInfo *prpl_info = NULL; if (GAIM_BLIST_NODE_IS_CONTACT(node)) b = gaim_contact_get_priority_buddy((GaimContact*)node); else b = (GaimBuddy *)node; - prpl = gaim_find_prpl(gaim_account_get_protocol_id(b->account)); - if (prpl != NULL) - prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl); - menu = create_buddy_menu(node, b, prpl, prpl_info); + menu = create_buddy_menu(node, b); } /* Now display the menu */ @@ -2973,6 +2964,7 @@ /********************************************************************************** * Public API Functions * **********************************************************************************/ + static void gaim_gtk_blist_new_list(GaimBuddyList *blist) { GaimGtkBuddyList *gtkblist; diff -r 09f18996c2ea -r ec6ff57d7b06 src/gtkblist.h --- a/src/gtkblist.h Wed Aug 18 04:40:59 2004 +0000 +++ b/src/gtkblist.h Wed Aug 18 11:46:46 2004 +0000 @@ -129,6 +129,14 @@ GdkPixbuf *create_prpl_icon(GaimAccount *account); /** + * Populates a menu with the items shown on the buddy list for a buddy. + * + * @param menu The menu to populate + * @param buddy The buddy who's menu to get + */ +void gaim_gtk_blist_make_buddy_menu(GtkWidget *menu, GaimBuddy *buddy); + +/** * Refreshes all the nodes of the buddy list. * This should only be called when something changes to affect most of the nodes (such as a ui preference changing) *