Mercurial > pidgin
comparison src/gtkconv.c @ 12638:7a2a2ca48703
[gaim-migrate @ 14974]
Bleeter reported that the Send To menu doesn't deal with users not on the buddy list.
committer: Tailor Script <tailor@pidgin.im>
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Fri, 23 Dec 2005 05:00:47 +0000 |
parents | 886498a66961 |
children | 366326fa9cb4 |
comparison
equal
deleted
inserted
replaced
12637:101c421bb396 | 12638:7a2a2ca48703 |
---|---|
2874 | 2874 |
2875 return FALSE; | 2875 return FALSE; |
2876 } | 2876 } |
2877 | 2877 |
2878 static void | 2878 static void |
2879 create_sendto_item(GtkWidget *menu, GtkSizeGroup *sg, GSList **group, GaimBuddy *bud) | 2879 create_sendto_item(GtkWidget *menu, GtkSizeGroup *sg, GSList **group, GaimBuddy *buddy, GaimAccount *account, const char *name) |
2880 { | 2880 { |
2881 GaimAccount *account; | |
2882 GtkWidget *box; | 2881 GtkWidget *box; |
2883 GtkWidget *label; | 2882 GtkWidget *label; |
2884 GtkWidget *image; | 2883 GtkWidget *image; |
2885 GtkWidget *menuitem; | 2884 GtkWidget *menuitem; |
2886 GdkPixbuf *pixbuf; | 2885 GdkPixbuf *pixbuf; |
2887 gchar *text; | 2886 gchar *text; |
2888 | 2887 |
2889 account = bud->account; | |
2890 | |
2891 /* Create a pixmap for the protocol icon. */ | 2888 /* Create a pixmap for the protocol icon. */ |
2892 pixbuf = gaim_gtk_blist_get_status_icon((GaimBlistNode*)bud, GAIM_STATUS_ICON_SMALL); | 2889 if (buddy != NULL) |
2890 pixbuf = gaim_gtk_blist_get_status_icon((GaimBlistNode*)buddy, GAIM_STATUS_ICON_SMALL); | |
2891 else | |
2892 { | |
2893 GdkPixbuf *unscaled = gaim_gtk_create_prpl_icon(account); | |
2894 | |
2895 /* XXX: 15 is the size for GAIM_STATUS_ICON_SMALL in gtkblist.c */ | |
2896 pixbuf = gdk_pixbuf_scale_simple(unscaled, 15, 15, | |
2897 GDK_INTERP_BILINEAR); | |
2898 g_object_unref(G_OBJECT(unscaled)); | |
2899 } | |
2900 | |
2893 /* Now convert it to GtkImage */ | 2901 /* Now convert it to GtkImage */ |
2894 if (pixbuf == NULL) | 2902 if (pixbuf == NULL) |
2895 image = gtk_image_new(); | 2903 image = gtk_image_new(); |
2896 else | 2904 else |
2897 image = gtk_image_new_from_pixbuf(pixbuf); | 2905 image = gtk_image_new_from_pixbuf(pixbuf); |
2899 gtk_size_group_add_widget(sg, image); | 2907 gtk_size_group_add_widget(sg, image); |
2900 | 2908 |
2901 g_object_unref(G_OBJECT(pixbuf)); | 2909 g_object_unref(G_OBJECT(pixbuf)); |
2902 | 2910 |
2903 /* Make our menu item */ | 2911 /* Make our menu item */ |
2904 text = g_strdup_printf("%s (%s)", gaim_buddy_get_name(bud), gaim_account_get_username(bud->account)); | 2912 text = g_strdup_printf("%s (%s)", name, gaim_account_get_username(account)); |
2905 menuitem = gtk_radio_menu_item_new_with_label(*group, text); | 2913 menuitem = gtk_radio_menu_item_new_with_label(*group, text); |
2906 g_free(text); | 2914 g_free(text); |
2907 *group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); | 2915 *group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); |
2908 | 2916 |
2909 /* Do some evil, see some evil, speak some evil. */ | 2917 /* Do some evil, see some evil, speak some evil. */ |
2924 gtk_widget_show(image); | 2932 gtk_widget_show(image); |
2925 gtk_widget_show(box); | 2933 gtk_widget_show(box); |
2926 | 2934 |
2927 /* Set our data and callbacks. */ | 2935 /* Set our data and callbacks. */ |
2928 g_object_set_data(G_OBJECT(menuitem), "gaim_account", account); | 2936 g_object_set_data(G_OBJECT(menuitem), "gaim_account", account); |
2929 g_object_set_data_full(G_OBJECT(menuitem), "gaim_buddy_name", g_strdup(gaim_buddy_get_name(bud)), g_free); | 2937 g_object_set_data_full(G_OBJECT(menuitem), "gaim_buddy_name", g_strdup(name), g_free); |
2930 | 2938 |
2931 g_signal_connect(G_OBJECT(menuitem), "activate", | 2939 g_signal_connect(G_OBJECT(menuitem), "activate", |
2932 G_CALLBACK(menu_conv_sel_send_cb), NULL); | 2940 G_CALLBACK(menu_conv_sel_send_cb), NULL); |
2933 | 2941 |
2934 gtk_widget_show(menuitem); | 2942 gtk_widget_show(menuitem); |
2964 | 2972 |
2965 gtk_widget_show(menu); | 2973 gtk_widget_show(menu); |
2966 | 2974 |
2967 if (gtkconv->active_conv->type == GAIM_CONV_TYPE_IM) { | 2975 if (gtkconv->active_conv->type == GAIM_CONV_TYPE_IM) { |
2968 buds = gaim_find_buddies(gtkconv->active_conv->account, gtkconv->active_conv->name); | 2976 buds = gaim_find_buddies(gtkconv->active_conv->account, gtkconv->active_conv->name); |
2969 for (l = buds; l != NULL; l = l->next) { | 2977 |
2970 GaimBuddy *b; | 2978 if (buds == NULL) |
2971 GaimBlistNode *node; | 2979 { |
2972 | 2980 /* The user isn't on the buddy list. */ |
2973 b = l->data; | 2981 create_sendto_item(menu, sg, &group, NULL, gtkconv->active_conv->account, gtkconv->active_conv->name); |
2974 node = (GaimBlistNode *) gaim_buddy_get_contact(b); | 2982 } |
2975 | 2983 else |
2976 for (node = node->child; node != NULL; node = node->next) | 2984 { |
2977 if (GAIM_BLIST_NODE_IS_BUDDY(node) && gaim_account_is_connected(((GaimBuddy *)node)->account)) | 2985 for (l = buds; l != NULL; l = l->next) |
2978 create_sendto_item(menu, sg, &group, (GaimBuddy *) node); | 2986 { |
2979 } | 2987 GaimBlistNode *node; |
2980 | 2988 |
2981 g_slist_free(buds); | 2989 node = (GaimBlistNode *) gaim_buddy_get_contact((GaimBuddy *)l->data); |
2990 | |
2991 for (node = node->child; node != NULL; node = node->next) | |
2992 { | |
2993 GaimBuddy *buddy = node; | |
2994 GaimAccount *account; | |
2995 | |
2996 if (!GAIM_BLIST_NODE_IS_BUDDY(node)) | |
2997 continue; | |
2998 | |
2999 account = gaim_buddy_get_account(buddy); | |
3000 if (gaim_account_is_connected(account)) | |
3001 create_sendto_item(menu, sg, &group, buddy, account, gaim_buddy_get_name(buddy)); | |
3002 } | |
3003 } | |
3004 | |
3005 g_slist_free(buds); | |
3006 } | |
2982 } | 3007 } |
2983 | 3008 |
2984 g_object_unref(sg); | 3009 g_object_unref(sg); |
2985 | 3010 |
2986 gtk_widget_show(win->menu.send_to); | 3011 gtk_widget_show(win->menu.send_to); |