comparison src/gtkblist.c @ 8710:36b043fe2740

[gaim-migrate @ 9464] Plugins can now add menu items to the buddy context menu (Christopher O'Brien). committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Mon, 19 Apr 2004 04:20:24 +0000
parents 725413cc9fb9
children ada0cf2f49fe
comparison
equal deleted inserted replaced
8709:e67d9b67ee56 8710:36b043fe2740
1077 pbm->callback(pbm->gc, b->name); 1077 pbm->callback(pbm->gc, b->name);
1078 } 1078 }
1079 1079
1080 static void make_buddy_menu(GtkWidget *menu, GaimPluginProtocolInfo *prpl_info, GaimBuddy *b) 1080 static void make_buddy_menu(GtkWidget *menu, GaimPluginProtocolInfo *prpl_info, GaimBuddy *b)
1081 { 1081 {
1082 GList *list; 1082 GList *list = NULL, *l = NULL;
1083 gboolean dup_separator = FALSE;
1083 GtkWidget *menuitem; 1084 GtkWidget *menuitem;
1084 1085
1085 if (prpl_info && prpl_info->get_info) { 1086 if (prpl_info && prpl_info->get_info) {
1086 gaim_new_item_from_stock(menu, _("Get _Info"), GAIM_STOCK_INFO, 1087 gaim_new_item_from_stock(menu, _("Get _Info"), GAIM_STOCK_INFO,
1087 G_CALLBACK(gtk_blist_menu_info_cb), b, 0, 0, NULL); 1088 G_CALLBACK(gtk_blist_menu_info_cb), b, 0, 0, NULL);
1093 gaim_new_item_from_stock(menu, _("View _Log"), NULL, 1094 gaim_new_item_from_stock(menu, _("View _Log"), NULL,
1094 G_CALLBACK(gtk_blist_menu_showlog_cb), b, 0, 0, NULL); 1095 G_CALLBACK(gtk_blist_menu_showlog_cb), b, 0, 0, NULL);
1095 1096
1096 if (prpl_info && prpl_info->buddy_menu) { 1097 if (prpl_info && prpl_info->buddy_menu) {
1097 list = prpl_info->buddy_menu(b->account->gc, b->name); 1098 list = prpl_info->buddy_menu(b->account->gc, b->name);
1098 while (list) { 1099
1099 struct proto_buddy_menu *pbm = list->data; 1100 for(l = list; l; l = l->next) {
1101 struct proto_buddy_menu *pbm = l->data;
1102
1103 /* draw "-" titled menu items as a separator. Since the
1104 pbm is not being used in a callback, it needs to be
1105 freed. Also, do some simple checking to prevent
1106 doubled-up separators */
1107 if('-' == *pbm->label) {
1108 if(! dup_separator) {
1109 gaim_separator(menu);
1110 dup_separator = TRUE;
1111 }
1112 g_free(pbm);
1113 continue;
1114 } else {
1115 dup_separator = FALSE;
1116 }
1117
1100 menuitem = gtk_menu_item_new_with_mnemonic(pbm->label); 1118 menuitem = gtk_menu_item_new_with_mnemonic(pbm->label);
1101 g_object_set_data(G_OBJECT(menuitem), "gaimcallback", pbm); 1119 g_object_set_data(G_OBJECT(menuitem), "gaimcallback", pbm);
1102 g_signal_connect(G_OBJECT(menuitem), "activate", 1120 g_signal_connect(G_OBJECT(menuitem), "activate",
1103 G_CALLBACK(gaim_proto_menu_cb), b); 1121 G_CALLBACK(gaim_proto_menu_cb), b);
1104 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 1122 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
1105 list = list->next; 1123 }
1106 } 1124 g_list_free(list);
1107 } 1125 }
1108 1126
1127 /* check for additional menu items which may be added by other
1128 plugins. */
1129 list = gaim_buddy_get_extended_menu(b);
1130 for(l = list; l; l = l->next) {
1131 struct proto_buddy_menu *pbm = l->data;
1132
1133 /* draw "-" titled menu items as a separator. see previous,
1134 identical-looking code. */
1135 if('-' == *pbm->label) {
1136 if(! dup_separator) {
1137 gaim_separator(menu);
1138 dup_separator = TRUE;
1139 }
1140 g_free(pbm);
1141 continue;
1142 } else {
1143 dup_separator = FALSE;
1144 }
1145
1146 menuitem = gtk_menu_item_new_with_mnemonic(pbm->label);
1147 g_object_set_data(G_OBJECT(menuitem), "gaimcallback", pbm);
1148 g_signal_connect(G_OBJECT(menuitem), "activate",
1149 G_CALLBACK(gaim_proto_menu_cb), b);
1150 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
1151 }
1152 g_list_free(list);
1153
1154 /* moving on to the old ui-specific plugin menus */
1109 gaim_signal_emit(GAIM_GTK_BLIST(gaim_get_blist()), 1155 gaim_signal_emit(GAIM_GTK_BLIST(gaim_get_blist()),
1110 "drawing-menu", menu, b); 1156 "drawing-menu", menu, b);
1111 1157
1112 gaim_separator(menu); 1158 gaim_separator(menu);
1113 gaim_new_item_from_stock(menu, _("_Alias..."), GAIM_STOCK_ALIAS, 1159 gaim_new_item_from_stock(menu, _("_Alias..."), GAIM_STOCK_ALIAS,