Mercurial > pidgin
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, |