Mercurial > pidgin
changeset 17487:1873848dfddb
Make the Conversation->More menu work for Chats. The chat needs to be on
your buddy list for this to work.
Creating a transient PurpleChat blist node for generating the menu for
chats not on the buddy list does not work well because the menu item
callbacks expect the node to still exist.
author | Stu Tomlinson <stu@nosnilmot.com> |
---|---|
date | Mon, 04 Jun 2007 16:18:34 +0000 |
parents | ac504f643092 |
children | 7e856734b712 a2c36e2010f1 |
files | pidgin/gtkconv.c |
diffstat | 1 files changed, 16 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/pidgin/gtkconv.c Mon Jun 04 14:31:08 2007 +0000 +++ b/pidgin/gtkconv.c Mon Jun 04 16:18:34 2007 +0000 @@ -2897,14 +2897,25 @@ GList *list; PidginConversation *gtkconv; PurpleConversation *conv; - PurpleBuddy *buddy; + PurpleBlistNode *node = NULL; + PurpleChat *chat = NULL; + PurpleBuddy *buddy = NULL; gtkconv = pidgin_conv_window_get_active_gtkconv(win); conv = gtkconv->active_conv; - buddy = purple_find_buddy(conv->account, conv->name); menu = gtk_item_factory_get_widget(win->menu.item_factory, N_("/Conversation/More")); + if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) + chat = purple_blist_find_chat(conv->account, conv->name); + else + buddy = purple_find_buddy(conv->account, conv->name); + + if (chat) + node = (PurpleBlistNode *)chat; + else if (buddy) + node = (PurpleBlistNode *)buddy; + /* Remove the previous entries */ for (list = gtk_container_get_children(GTK_CONTAINER(menu)); list; ) { @@ -2914,12 +2925,11 @@ } /* Now add the stuff */ - if (buddy) + if (node) { if (purple_account_is_connected(conv->account)) - pidgin_append_blist_node_proto_menu(menu, conv->account->gc, - (PurpleBlistNode *)buddy); - pidgin_append_blist_node_extended_menu(menu, (PurpleBlistNode *)buddy); + pidgin_append_blist_node_proto_menu(menu, conv->account->gc, node); + pidgin_append_blist_node_extended_menu(menu, node); } if ((list = gtk_container_get_children(GTK_CONTAINER(menu))) == NULL)