diff src/buddy.c @ 2170:c24595d3c364

[gaim-migrate @ 2180] buddy_menu committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Mon, 27 Aug 2001 07:11:50 +0000
parents 66a84ff0445a
children 657dbe515608
line wrap: on
line diff
--- a/src/buddy.c	Mon Aug 27 04:53:19 2001 +0000
+++ b/src/buddy.c	Mon Aug 27 07:11:50 2001 +0000
@@ -618,6 +618,17 @@
 	alias_dialog_bud(b);
 }
 
+static void menu_click(GtkObject *obj, char *who)
+{
+	GList *list = gtk_object_get_user_data(obj);
+	GList *first = g_list_first(list);
+	struct proto_buddy_menu *pbm = list->data;
+	if (pbm->callback)
+		pbm->callback(pbm->gc, who);
+	g_list_foreach(first, (GFunc)g_free, NULL);
+	g_list_free(first);
+}
+
 void handle_click_buddy(GtkWidget *widget, GdkEventButton *event, struct buddy_show *b)
 {
 	if (!b->connlist) return;
@@ -673,6 +684,8 @@
 			while (cn) {
 				g = (struct gaim_connection *)cn->data;
 				if (g->prpl->buddy_menu) {
+					GList *mo = (*g->prpl->buddy_menu)(g, b->name);
+
 					menuitem = gtk_menu_item_new_with_label(g->username);
 					gtk_menu_append(GTK_MENU(menu), menuitem);
 					gtk_widget_show(menuitem);
@@ -681,14 +694,41 @@
 					gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), conmenu);
 					gtk_widget_show(conmenu);
 
-					(*g->prpl->buddy_menu)(conmenu, g, b->name);
+					while (mo) {
+						struct proto_buddy_menu *pbm = mo->data;
+						GtkWidget *button;
+
+						button = gtk_menu_item_new_with_label(pbm->label);
+						gtk_signal_connect(GTK_OBJECT(button), "activate",
+								   GTK_SIGNAL_FUNC(menu_click), b->name);
+						gtk_object_set_user_data(GTK_OBJECT(button), mo);
+						gtk_menu_append(GTK_MENU(conmenu), button);
+						gtk_widget_show(button);
+
+						mo = mo->next;
+					}
 				}
 				cn = g_slist_next(cn);
 			}
 		} else {
 			g = (struct gaim_connection *)cn->data;
-			if (g->prpl->buddy_menu)
-				(*g->prpl->buddy_menu)(menu, g, b->name);
+			if (g->prpl->buddy_menu) {
+				GList *mo = (*g->prpl->buddy_menu)(g, b->name);
+
+				while (mo) {
+					struct proto_buddy_menu *pbm = mo->data;
+					GtkWidget *button;
+
+					button = gtk_menu_item_new_with_label(pbm->label);
+					gtk_signal_connect(GTK_OBJECT(button), "activate",
+							   GTK_SIGNAL_FUNC(menu_click), b->name);
+					gtk_object_set_user_data(GTK_OBJECT(button), mo);
+					gtk_menu_append(GTK_MENU(menu), button);
+					gtk_widget_show(button);
+
+					mo = mo->next;
+				}
+			}
 		}
 
 		/* we send the menu widget so we can add menuitems within a plugin */