# HG changeset patch # User Jim Seymour # Date 1024172461 0 # Node ID b0d5ce77f7ddc40a9daad5bf3a108ebf847a3914 # Parent 0c7bd995eb03b0e7cc4c0f4381b01289ac65405d [gaim-migrate @ 3331] Added capability for protocol-specific "edit buddy menu" items. committer: Tailor Script diff -r 0c7bd995eb03 -r b0d5ce77f7dd src/buddy.c --- a/src/buddy.c Sat Jun 15 17:26:58 2002 +0000 +++ b/src/buddy.c Sat Jun 15 20:21:01 2002 +0000 @@ -789,6 +789,7 @@ int row, column; static GtkWidget *menu = NULL; GtkWidget *button; + static GList *mo_top = NULL; if (event->button != 3 || event->type != GDK_BUTTON_PRESS) return FALSE; @@ -806,6 +807,11 @@ if(menu) { gtk_widget_destroy(menu); menu = NULL; /* safety measure */ + if(mo_top) { + g_list_foreach(mo_top, (GFunc)g_free, NULL); + g_list_free(mo_top); + mo_top = NULL; + } } if (*type == EDIT_GROUP) { @@ -861,6 +867,27 @@ gtk_menu_append(GTK_MENU(menu), button); gtk_widget_show(button); + /* + * Add protocol-specific edit buddy menu items if they exist + */ + if (b->gc->prpl->edit_buddy_menu) { + GList *mo = mo_top = b->gc->prpl->edit_buddy_menu(b->gc, 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; + } + } + gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, event->button, event->time); return TRUE; diff -r 0c7bd995eb03 -r b0d5ce77f7dd src/prpl.h --- a/src/prpl.h Sat Jun 15 17:26:58 2002 +0000 +++ b/src/prpl.h Sat Jun 15 20:21:01 2002 +0000 @@ -99,6 +99,7 @@ /* user_opts returns a GList* of g_malloc'd struct proto_user_opts */ GList *(* user_opts)(); GList *(* buddy_menu)(struct gaim_connection *, char *); + GList *(* edit_buddy_menu)(struct gaim_connection *, char *); GList *(* chat_info)(struct gaim_connection *); GSList *(* smiley_list)();