Mercurial > pidgin.yaz
comparison src/dialogs.c @ 5882:ea6dfabdf60f
[gaim-migrate @ 6314]
The Add Buddy and Add Chat dialogs now have protocol icons.
committer: Tailor Script <tailor@pidgin.im>
| author | Christian Hammond <chipx86@chipx86.com> |
|---|---|
| date | Sun, 15 Jun 2003 06:03:13 +0000 |
| parents | 1b85ff65be57 |
| children | 390d32a6b130 |
comparison
equal
deleted
inserted
replaced
| 5881:cc7870e1e3b3 | 5882:ea6dfabdf60f |
|---|---|
| 917 | 917 |
| 918 gtk_widget_show_all(a->window); | 918 gtk_widget_show_all(a->window); |
| 919 gtk_widget_grab_focus(GTK_WIDGET(a->entry)); | 919 gtk_widget_grab_focus(GTK_WIDGET(a->entry)); |
| 920 } | 920 } |
| 921 | 921 |
| 922 static void addbuddy_select_account(GObject *w, GaimConnection *gc) | 922 static void |
| 923 { | 923 addbuddy_select_account(GObject *w, GaimAccount *account, |
| 924 struct addbuddy *b = g_object_get_data(w, "addbuddy"); | 924 struct addbuddy *b) |
| 925 | 925 { |
| 926 /* Save our account */ | 926 /* Save our account */ |
| 927 b->gc = gc; | 927 b->gc = gaim_account_get_connection(account); |
| 928 } | |
| 929 | |
| 930 static void create_online_user_names(struct addbuddy *b) | |
| 931 { | |
| 932 char buf[2048]; /* Never hurts to be safe ;-) */ | |
| 933 GList *g = gaim_connections_get_all(); | |
| 934 GaimConnection *c; | |
| 935 GaimAccount *account; | |
| 936 GtkWidget *menu, *opt; | |
| 937 int count = 0; | |
| 938 int place = 0; | |
| 939 | |
| 940 menu = gtk_menu_new(); | |
| 941 | |
| 942 while (g) { | |
| 943 c = (GaimConnection *)g->data; | |
| 944 | |
| 945 account = gaim_connection_get_account(c); | |
| 946 | |
| 947 g_snprintf(buf, sizeof(buf), "%s (%s)", | |
| 948 gaim_account_get_username(account), | |
| 949 c->prpl->info->name); | |
| 950 opt = gtk_menu_item_new_with_label(buf); | |
| 951 g_object_set_data(G_OBJECT(opt), "addbuddy", b); | |
| 952 g_signal_connect(G_OBJECT(opt), "activate", | |
| 953 G_CALLBACK(addbuddy_select_account), | |
| 954 c); | |
| 955 gtk_widget_show(opt); | |
| 956 gtk_menu_shell_append(GTK_MENU_SHELL(menu), opt); | |
| 957 | |
| 958 /* Now check to see if it's our current menu */ | |
| 959 if (c == b->gc) { | |
| 960 place = count; | |
| 961 gtk_menu_item_activate(GTK_MENU_ITEM(opt)); | |
| 962 gtk_option_menu_set_history(GTK_OPTION_MENU(b->account), count); | |
| 963 | |
| 964 /* Do the cha cha cha */ | |
| 965 } | |
| 966 | |
| 967 count++; | |
| 968 | |
| 969 g = g->next; | |
| 970 } | |
| 971 | |
| 972 gtk_option_menu_remove_menu(GTK_OPTION_MENU(b->account)); | |
| 973 gtk_option_menu_set_menu(GTK_OPTION_MENU(b->account), menu); | |
| 974 gtk_option_menu_set_history(GTK_OPTION_MENU(b->account), place); | |
| 975 | |
| 976 gtk_widget_show(b->account); | |
| 977 gtk_widget_show(b->account->parent); | |
| 978 | |
| 979 } | 928 } |
| 980 | 929 |
| 981 void show_add_buddy(GaimConnection *gc, char *buddy, char *group, char *alias) | 930 void show_add_buddy(GaimConnection *gc, char *buddy, char *group, char *alias) |
| 982 { | 931 { |
| 983 GtkWidget *table; | 932 GtkWidget *table; |
| 1064 /* Set up stuff for the account box */ | 1013 /* Set up stuff for the account box */ |
| 1065 label = gtk_label_new(_("Add To")); | 1014 label = gtk_label_new(_("Add To")); |
| 1066 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); | 1015 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); |
| 1067 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 3, 4); | 1016 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 3, 4); |
| 1068 | 1017 |
| 1069 a->account = gtk_option_menu_new(); | 1018 a->account = gaim_gtk_account_option_menu_new(NULL, FALSE, |
| 1019 G_CALLBACK(addbuddy_select_account), a); | |
| 1020 | |
| 1070 gtk_table_attach_defaults(GTK_TABLE(table), a->account, 1, 2, 3, 4); | 1021 gtk_table_attach_defaults(GTK_TABLE(table), a->account, 1, 2, 3, 4); |
| 1071 | 1022 |
| 1072 create_online_user_names(a); | |
| 1073 | |
| 1074 /* End of account box */ | 1023 /* End of account box */ |
| 1075 | 1024 |
| 1076 g_signal_connect(G_OBJECT(a->window), "response", G_CALLBACK(do_add_buddy), a); | 1025 g_signal_connect(G_OBJECT(a->window), "response", |
| 1026 G_CALLBACK(do_add_buddy), a); | |
| 1077 | 1027 |
| 1078 gtk_widget_show_all(a->window); | 1028 gtk_widget_show_all(a->window); |
| 1079 | 1029 |
| 1080 if (group != NULL) | 1030 if (group != NULL) |
| 1081 gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(a->combo)->entry), group); | 1031 gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(a->combo)->entry), group); |
| 1221 } | 1171 } |
| 1222 | 1172 |
| 1223 static void create_online_account_menu_for_add_chat(struct addchat *ac) | 1173 static void create_online_account_menu_for_add_chat(struct addchat *ac) |
| 1224 { | 1174 { |
| 1225 char buf[2048]; /* Never hurts to be safe ;-) */ | 1175 char buf[2048]; /* Never hurts to be safe ;-) */ |
| 1226 GList *g = gaim_connections_get_all(); | 1176 GList *g; |
| 1227 GaimConnection *c; | 1177 GaimConnection *c; |
| 1228 GaimAccount *account; | 1178 GaimAccount *account; |
| 1229 GtkWidget *menu, *opt; | 1179 GtkWidget *menu, *opt; |
| 1180 GtkWidget *hbox; | |
| 1181 GtkWidget *label; | |
| 1182 GtkWidget *image; | |
| 1183 GdkPixbuf *pixbuf; | |
| 1184 GdkPixbuf *scale; | |
| 1185 GtkSizeGroup *sg; | |
| 1186 char *filename; | |
| 1187 const char *proto_name; | |
| 1230 int count = 0; | 1188 int count = 0; |
| 1231 int place = 0; | 1189 int place = 0; |
| 1232 | 1190 |
| 1233 menu = gtk_menu_new(); | 1191 menu = gtk_menu_new(); |
| 1234 | 1192 |
| 1235 while (g) { | 1193 sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); |
| 1194 | |
| 1195 for (g = gaim_connections_get_all(); g != NULL; g = g->next) { | |
| 1196 GaimPluginProtocolInfo *prpl_info = NULL; | |
| 1197 GaimPlugin *plugin; | |
| 1198 | |
| 1236 c = (GaimConnection *)g->data; | 1199 c = (GaimConnection *)g->data; |
| 1237 account = gaim_connection_get_account(c); | 1200 account = gaim_connection_get_account(c); |
| 1238 | 1201 |
| 1239 if (GAIM_PLUGIN_PROTOCOL_INFO(c->prpl)->join_chat) { | 1202 plugin = c->prpl; |
| 1240 g_snprintf(buf, sizeof(buf), "%s (%s)", | 1203 |
| 1241 gaim_account_get_username(account), | 1204 if (plugin == NULL) |
| 1242 c->prpl->info->name); | 1205 continue; |
| 1243 opt = gtk_menu_item_new_with_label(buf); | 1206 |
| 1244 g_object_set_data(G_OBJECT(opt), "addchat", ac); | 1207 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(plugin); |
| 1245 g_signal_connect(G_OBJECT(opt), "activate", | 1208 |
| 1246 G_CALLBACK(addchat_select_account), | 1209 if (prpl_info == NULL || prpl_info->join_chat == NULL) |
| 1247 c); | 1210 continue; |
| 1248 gtk_widget_show(opt); | 1211 |
| 1249 gtk_menu_shell_append(GTK_MENU_SHELL(menu), opt); | 1212 opt = gtk_menu_item_new(); |
| 1250 | 1213 |
| 1251 /* Now check to see if it's our current menu */ | 1214 /* Create the hbox. */ |
| 1252 if (c->account == ac->account) { | 1215 hbox = gtk_hbox_new(FALSE, 4); |
| 1253 place = count; | 1216 gtk_container_add(GTK_CONTAINER(opt), hbox); |
| 1254 gtk_menu_item_activate(GTK_MENU_ITEM(opt)); | 1217 gtk_widget_show(hbox); |
| 1255 gtk_option_menu_set_history(GTK_OPTION_MENU(ac->account_menu), count); | 1218 |
| 1256 | 1219 /* Load the image. */ |
| 1257 /* Do the cha cha cha */ | 1220 if (prpl_info != NULL) { |
| 1221 proto_name = prpl_info->list_icon(NULL, NULL); | |
| 1222 g_snprintf(buf, sizeof(buf), "%s.png", proto_name); | |
| 1223 | |
| 1224 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", | |
| 1225 "default", buf, NULL); | |
| 1226 pixbuf = gdk_pixbuf_new_from_file(filename, NULL); | |
| 1227 g_free(filename); | |
| 1228 | |
| 1229 if (pixbuf != NULL) { | |
| 1230 /* Scale and insert the image */ | |
| 1231 scale = gdk_pixbuf_scale_simple(pixbuf, 16, 16, | |
| 1232 GDK_INTERP_BILINEAR); | |
| 1233 image = gtk_image_new_from_pixbuf(scale); | |
| 1234 | |
| 1235 g_object_unref(G_OBJECT(pixbuf)); | |
| 1236 g_object_unref(G_OBJECT(scale)); | |
| 1258 } | 1237 } |
| 1259 | 1238 else |
| 1260 count++; | 1239 image = gtk_image_new(); |
| 1261 } | 1240 } |
| 1262 | 1241 else |
| 1263 g = g->next; | 1242 image = gtk_image_new(); |
| 1264 } | 1243 |
| 1244 gtk_size_group_add_widget(sg, image); | |
| 1245 | |
| 1246 gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 0); | |
| 1247 gtk_widget_show(image); | |
| 1248 | |
| 1249 g_snprintf(buf, sizeof(buf), "%s (%s)", | |
| 1250 gaim_account_get_username(account), | |
| 1251 c->prpl->info->name); | |
| 1252 | |
| 1253 /* Create the label. */ | |
| 1254 label = gtk_label_new(buf); | |
| 1255 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); | |
| 1256 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); | |
| 1257 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0); | |
| 1258 gtk_widget_show(label); | |
| 1259 | |
| 1260 | |
| 1261 g_object_set_data(G_OBJECT(opt), "addchat", ac); | |
| 1262 g_signal_connect(G_OBJECT(opt), "activate", | |
| 1263 G_CALLBACK(addchat_select_account), c); | |
| 1264 gtk_widget_show(opt); | |
| 1265 gtk_menu_shell_append(GTK_MENU_SHELL(menu), opt); | |
| 1266 | |
| 1267 /* Now check to see if it's our current menu */ | |
| 1268 if (c->account == ac->account) { | |
| 1269 place = count; | |
| 1270 gtk_menu_item_activate(GTK_MENU_ITEM(opt)); | |
| 1271 gtk_option_menu_set_history(GTK_OPTION_MENU(ac->account_menu), | |
| 1272 count); | |
| 1273 | |
| 1274 /* Do the cha cha cha */ | |
| 1275 } | |
| 1276 | |
| 1277 count++; | |
| 1278 } | |
| 1279 | |
| 1280 g_object_unref(sg); | |
| 1265 | 1281 |
| 1266 gtk_option_menu_remove_menu(GTK_OPTION_MENU(ac->account_menu)); | 1282 gtk_option_menu_remove_menu(GTK_OPTION_MENU(ac->account_menu)); |
| 1267 gtk_option_menu_set_menu(GTK_OPTION_MENU(ac->account_menu), menu); | 1283 gtk_option_menu_set_menu(GTK_OPTION_MENU(ac->account_menu), menu); |
| 1268 gtk_option_menu_set_history(GTK_OPTION_MENU(ac->account_menu), place); | 1284 gtk_option_menu_set_history(GTK_OPTION_MENU(ac->account_menu), place); |
| 1269 } | 1285 } |
