diff pidgin/gtkconv.c @ 17725: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 a8e63ed98673
children 68d034c6e65d 7935fe8ed901 2f9eabdc6011 e62ec4b475ff
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)