src/gtkblist.c

changeset 9013
ba3119be4967
parent 8986
30ba617356bb
child 9015
3c27e9074fa2
equal deleted inserted replaced
9012:875d22b5a2ff 9013:ba3119be4967
1063 struct proto_buddy_menu *pbm = g_object_get_data(G_OBJECT(item), "gaimcallback"); 1063 struct proto_buddy_menu *pbm = g_object_get_data(G_OBJECT(item), "gaimcallback");
1064 if (pbm->callback) 1064 if (pbm->callback)
1065 pbm->callback(pbm->gc, b->name); 1065 pbm->callback(pbm->gc, b->name);
1066 } 1066 }
1067 1067
1068 static void gaim_proto_group_menu_cb(GtkMenuItem *item, GaimGroup *g)
1069 {
1070 struct proto_group_menu *pgm = g_object_get_data(G_OBJECT(item), "gaimcallback");
1071 if (pgm->callback)
1072 pgm->callback(g);
1073 }
1074
1075 static void make_buddy_menu(GtkWidget *menu, GaimPluginProtocolInfo *prpl_info, GaimBuddy *b) 1068 static void make_buddy_menu(GtkWidget *menu, GaimPluginProtocolInfo *prpl_info, GaimBuddy *b)
1076 { 1069 {
1077 GList *list = NULL, *l = NULL; 1070 GList *list = NULL, *l = NULL;
1078 gboolean dup_separator = FALSE; 1071 gboolean dup_separator = FALSE;
1079 GtkWidget *menuitem; 1072 GtkWidget *menuitem;
1093 list = prpl_info->buddy_menu(b->account->gc, b->name); 1086 list = prpl_info->buddy_menu(b->account->gc, b->name);
1094 1087
1095 for(l = list; l; l = l->next) { 1088 for(l = list; l; l = l->next) {
1096 struct proto_buddy_menu *pbm = l->data; 1089 struct proto_buddy_menu *pbm = l->data;
1097 1090
1098 /* draw NULL menu items as a separator. Since the 1091 /* draw NULL menu items as a separator.
1099 pbm is not being used in a callback, it needs to be 1092 Also, do some simple checking to prevent
1100 freed. Also, do some simple checking to prevent
1101 doubled-up separators */ 1093 doubled-up separators */
1102 if(pbm == NULL) { 1094 if(pbm == NULL) {
1103 if(! dup_separator) { 1095 if(! dup_separator) {
1104 gaim_separator(menu); 1096 gaim_separator(menu);
1105 dup_separator = TRUE; 1097 dup_separator = TRUE;
1129 if(pbm == NULL) { 1121 if(pbm == NULL) {
1130 if(! dup_separator) { 1122 if(! dup_separator) {
1131 gaim_separator(menu); 1123 gaim_separator(menu);
1132 dup_separator = TRUE; 1124 dup_separator = TRUE;
1133 } 1125 }
1134 g_free(pbm);
1135 continue; 1126 continue;
1136 } else { 1127 } else {
1137 dup_separator = FALSE; 1128 dup_separator = FALSE;
1138 } 1129 }
1139 1130
1187 if(buddy) 1178 if(buddy)
1188 serv_get_info(buddy->account->gc, buddy->name); 1179 serv_get_info(buddy->account->gc, buddy->name);
1189 } 1180 }
1190 1181
1191 return FALSE; 1182 return FALSE;
1183 }
1184
1185 static void gaim_proto_group_menu_cb(GtkMenuItem *item, GaimGroup *g)
1186 {
1187 struct proto_group_menu *pgm = g_object_get_data(G_OBJECT(item), "gaimcallback");
1188 if (pgm->callback)
1189 pgm->callback(g);
1192 } 1190 }
1193 1191
1194 static GtkWidget * 1192 static GtkWidget *
1195 create_group_menu (GaimBlistNode *node, GaimGroup *g) 1193 create_group_menu (GaimBlistNode *node, GaimGroup *g)
1196 { 1194 {
1248 GaimChat *c, 1246 GaimChat *c,
1249 GaimPlugin *prpl, 1247 GaimPlugin *prpl,
1250 GaimPluginProtocolInfo *prpl_info) 1248 GaimPluginProtocolInfo *prpl_info)
1251 { 1249 {
1252 GtkWidget *menu; 1250 GtkWidget *menu;
1253 GList *list; 1251 GList *list, *l;
1254 GtkWidget *menuitem; 1252 GtkWidget *menuitem;
1253 gboolean dup_separator = FALSE;
1255 gboolean autojoin = (gaim_blist_node_get_bool(node, 1254 gboolean autojoin = (gaim_blist_node_get_bool(node,
1256 "gtk-autojoin") || (gaim_blist_node_get_string(node, 1255 "gtk-autojoin") || (gaim_blist_node_get_string(node,
1257 "gtk-autojoin") != NULL)); 1256 "gtk-autojoin") != NULL));
1258 1257
1259 menu = gtk_menu_new(); 1258 menu = gtk_menu_new();
1265 1264
1266 if (prpl_info && prpl_info->chat_menu) { 1265 if (prpl_info && prpl_info->chat_menu) {
1267 list = prpl_info->chat_menu(c->account->gc, c->components); 1266 list = prpl_info->chat_menu(c->account->gc, c->components);
1268 while (list) { 1267 while (list) {
1269 struct proto_chat_menu *pcm = list->data; 1268 struct proto_chat_menu *pcm = list->data;
1269
1270 /* draw NULL menu items as a separator.
1271 Also, do some simple checking to prevent
1272 doubled-up separators */
1273 if(pcm == NULL) {
1274 if(! dup_separator) {
1275 gaim_separator(menu);
1276 dup_separator = TRUE;
1277 }
1278 continue;
1279 } else {
1280 dup_separator = FALSE;
1281 }
1282
1270 menuitem = gtk_menu_item_new_with_mnemonic(pcm->label); 1283 menuitem = gtk_menu_item_new_with_mnemonic(pcm->label);
1271 g_object_set_data(G_OBJECT(menuitem), "gaimcallback", pcm); 1284 g_object_set_data(G_OBJECT(menuitem), "gaimcallback", pcm);
1272 g_signal_connect(G_OBJECT(menuitem), "activate", 1285 g_signal_connect(G_OBJECT(menuitem), "activate",
1273 G_CALLBACK(gaim_proto_chat_menu_cb), c); 1286 G_CALLBACK(gaim_proto_chat_menu_cb), c);
1274 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 1287 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
1275 list = list->next; 1288 list = list->next;
1276 } 1289 }
1277 } 1290 }
1291
1292 /* check for additional menu items which may be added by other
1293 plugins. */
1294 list = gaim_chat_get_extended_menu(c);
1295 for(l = list; l; l = l->next) {
1296 struct proto_chat_menu *pcm = l->data;
1297
1298 /* draw NULL menu items as a separator. see previous,
1299 identical-looking code. */
1300 if(pcm == NULL) {
1301 if(! dup_separator) {
1302 gaim_separator(menu);
1303 dup_separator = TRUE;
1304 }
1305 continue;
1306 } else {
1307 dup_separator = FALSE;
1308 }
1309
1310 menuitem = gtk_menu_item_new_with_mnemonic(pcm->label);
1311 g_object_set_data(G_OBJECT(menuitem), "gaimcallback", pcm);
1312 g_signal_connect(G_OBJECT(menuitem), "activate",
1313 G_CALLBACK(gaim_proto_chat_menu_cb), c);
1314 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
1315 }
1316 g_list_free(list);
1317
1318 /* moving on to the old ui-specific plugin menus */
1278 gaim_signal_emit(gaim_gtk_blist_get_handle(), 1319 gaim_signal_emit(gaim_gtk_blist_get_handle(),
1279 "drawing-menu", menu, c); 1320 "drawing-menu", menu, c);
1280 1321
1281 gaim_separator(menu); 1322 gaim_separator(menu);
1282 gaim_new_item_from_stock(menu, _("_Alias..."), GAIM_STOCK_ALIAS, 1323 gaim_new_item_from_stock(menu, _("_Alias..."), GAIM_STOCK_ALIAS,

mercurial