pidgin/gtkrequest.c

branch
cpw.qulogic.gtk3
changeset 32433
f539a2c083b2
parent 32424
be4a642b2d45
parent 31992
7b7a143ddfaf
child 32438
dc8991868906
child 33120
f6f1a27ade72
equal deleted inserted replaced
32432:47b61b9e08e6 32433:f539a2c083b2
677 gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), 677 gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
678 hbox); 678 hbox);
679 679
680 /* Dialog icon. */ 680 /* Dialog icon. */
681 if (icon_data) { 681 if (icon_data) {
682 GdkPixbufLoader *loader = gdk_pixbuf_loader_new(); 682 GdkPixbuf *pixbuf = pidgin_pixbuf_from_data(icon_data, icon_size);
683 GdkPixbuf *pixbuf = NULL; 683 if (pixbuf) {
684 if (gdk_pixbuf_loader_write(loader, icon_data, icon_size, NULL)) { 684 /* scale the image if it is too large */
685 pixbuf = gdk_pixbuf_loader_get_pixbuf(loader); 685 int width = gdk_pixbuf_get_width(pixbuf);
686 if (pixbuf) { 686 int height = gdk_pixbuf_get_height(pixbuf);
687 /* scale the image if it is too large */ 687 if (width > 128 || height > 128) {
688 int width = gdk_pixbuf_get_width(pixbuf); 688 int scaled_width = width > height ? 128 : (128 * width) / height;
689 int height = gdk_pixbuf_get_height(pixbuf); 689 int scaled_height = height > width ? 128 : (128 * height) / width;
690 if (width > 128 || height > 128) { 690 GdkPixbuf *scaled =
691 int scaled_width = width > height ? 128 : (128 * width) / height; 691 gdk_pixbuf_scale_simple(pixbuf, scaled_width, scaled_height,
692 int scaled_height = height > width ? 128 : (128 * height) / width; 692 GDK_INTERP_BILINEAR);
693 GdkPixbuf *scaled = 693
694 gdk_pixbuf_scale_simple(pixbuf, scaled_width, scaled_height, 694 purple_debug_info("pidgin",
695 GDK_INTERP_BILINEAR); 695 "dialog icon was too large, scaled it down\n");
696 696 if (scaled) {
697 purple_debug_info("pidgin", 697 g_object_unref(pixbuf);
698 "dialog icon was too large, scale it down\n"); 698 pixbuf = scaled;
699 if (scaled) {
700 g_object_unref(pixbuf);
701 pixbuf = scaled;
702 }
703 } 699 }
704 img = gtk_image_new_from_pixbuf(pixbuf);
705 } 700 }
701 img = gtk_image_new_from_pixbuf(pixbuf);
702 g_object_unref(pixbuf);
706 } else { 703 } else {
707 purple_debug_info("pidgin", "failed to parse dialog icon\n"); 704 purple_debug_info("pidgin", "failed to parse dialog icon\n");
708 } 705 }
709 gdk_pixbuf_loader_close(loader, NULL);
710 g_object_unref(loader);
711 } 706 }
712 707
713 if (!img) { 708 if (!img) {
714 img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, 709 img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION,
715 gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); 710 gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE));
886 buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)); 881 buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
887 882
888 gtk_text_buffer_set_text(buffer, value, -1); 883 gtk_text_buffer_set_text(buffer, value, -1);
889 } 884 }
890 885
886 #if GTK_CHECK_VERSION(2,12,0)
887 gtk_widget_set_tooltip_text(textview, purple_request_field_get_tooltip(field));
888 #endif
889
891 gtk_text_view_set_editable(GTK_TEXT_VIEW(textview), 890 gtk_text_view_set_editable(GTK_TEXT_VIEW(textview),
892 purple_request_field_string_is_editable(field)); 891 purple_request_field_string_is_editable(field));
893 892
894 g_signal_connect(G_OBJECT(textview), "focus-out-event", 893 g_signal_connect(G_OBJECT(textview), "focus-out-event",
895 G_CALLBACK(field_string_focus_out_cb), field); 894 G_CALLBACK(field_string_focus_out_cb), field);
909 908
910 setup_entry_field(widget, field); 909 setup_entry_field(widget, field);
911 910
912 if (value != NULL) 911 if (value != NULL)
913 gtk_entry_set_text(GTK_ENTRY(widget), value); 912 gtk_entry_set_text(GTK_ENTRY(widget), value);
913
914 #if GTK_CHECK_VERSION(2,12,0)
915 gtk_widget_set_tooltip_text(widget, purple_request_field_get_tooltip(field));
916 #endif
914 917
915 if (purple_request_field_string_is_masked(field)) 918 if (purple_request_field_string_is_masked(field))
916 { 919 {
917 gtk_entry_set_visibility(GTK_ENTRY(widget), FALSE); 920 gtk_entry_set_visibility(GTK_ENTRY(widget), FALSE);
918 #if !GTK_CHECK_VERSION(2,16,0) 921 #if !GTK_CHECK_VERSION(2,16,0)
950 g_snprintf(buf, sizeof(buf), "%d", value); 953 g_snprintf(buf, sizeof(buf), "%d", value);
951 954
952 gtk_entry_set_text(GTK_ENTRY(widget), buf); 955 gtk_entry_set_text(GTK_ENTRY(widget), buf);
953 } 956 }
954 957
958 #if GTK_CHECK_VERSION(2,12,0)
959 gtk_widget_set_tooltip_text(widget, purple_request_field_get_tooltip(field));
960 #endif
961
955 g_signal_connect(G_OBJECT(widget), "focus-out-event", 962 g_signal_connect(G_OBJECT(widget), "focus-out-event",
956 G_CALLBACK(field_int_focus_out_cb), field); 963 G_CALLBACK(field_int_focus_out_cb), field);
957 964
958 return widget; 965 return widget;
959 } 966 }
963 { 970 {
964 GtkWidget *widget; 971 GtkWidget *widget;
965 972
966 widget = gtk_check_button_new_with_label( 973 widget = gtk_check_button_new_with_label(
967 purple_request_field_get_label(field)); 974 purple_request_field_get_label(field));
975
976 #if GTK_CHECK_VERSION(2,12,0)
977 gtk_widget_set_tooltip_text(widget, purple_request_field_get_tooltip(field));
978 #endif
968 979
969 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), 980 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget),
970 purple_request_field_bool_get_default_value(field)); 981 purple_request_field_bool_get_default_value(field));
971 982
972 g_signal_connect(G_OBJECT(widget), "toggled", 983 g_signal_connect(G_OBJECT(widget), "toggled",
993 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widget), text); 1004 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widget), text);
994 } 1005 }
995 1006
996 gtk_combo_box_set_active(GTK_COMBO_BOX(widget), 1007 gtk_combo_box_set_active(GTK_COMBO_BOX(widget),
997 purple_request_field_choice_get_default_value(field)); 1008 purple_request_field_choice_get_default_value(field));
1009
1010 #if GTK_CHECK_VERSION(2,12,0)
1011 gtk_widget_set_tooltip_text(widget, purple_request_field_get_tooltip(field));
1012 #endif
998 1013
999 g_signal_connect(G_OBJECT(widget), "changed", 1014 g_signal_connect(G_OBJECT(widget), "changed",
1000 G_CALLBACK(field_choice_menu_cb), field); 1015 G_CALLBACK(field_choice_menu_cb), field);
1001 } 1016 }
1002 else 1017 else
1011 else 1026 else
1012 box = gtk_vbox_new(FALSE, 0); 1027 box = gtk_vbox_new(FALSE, 0);
1013 1028
1014 widget = box; 1029 widget = box;
1015 1030
1031 #if GTK_CHECK_VERSION(2,12,0)
1032 gtk_widget_set_tooltip_text(widget, purple_request_field_get_tooltip(field));
1033 #endif
1034
1016 for (l = labels, i = 0; l != NULL; l = l->next, i++) 1035 for (l = labels, i = 0; l != NULL; l = l->next, i++)
1017 { 1036 {
1018 const char *text = l->data; 1037 const char *text = l->data;
1019 1038
1020 radio = gtk_radio_button_new_with_label_from_widget( 1039 radio = gtk_radio_button_new_with_label_from_widget(
1040 static GtkWidget * 1059 static GtkWidget *
1041 create_image_field(PurpleRequestField *field) 1060 create_image_field(PurpleRequestField *field)
1042 { 1061 {
1043 GtkWidget *widget; 1062 GtkWidget *widget;
1044 GdkPixbuf *buf, *scale; 1063 GdkPixbuf *buf, *scale;
1045 GdkPixbufLoader *loader; 1064
1046 1065 buf = pidgin_pixbuf_from_data(
1047 loader = gdk_pixbuf_loader_new(); 1066 (const guchar *)purple_request_field_image_get_buffer(field),
1048 gdk_pixbuf_loader_write(loader, 1067 purple_request_field_image_get_size(field));
1049 (const guchar *)purple_request_field_image_get_buffer(field),
1050 purple_request_field_image_get_size(field),
1051 NULL);
1052 gdk_pixbuf_loader_close(loader, NULL);
1053 buf = gdk_pixbuf_loader_get_pixbuf(loader);
1054 1068
1055 scale = gdk_pixbuf_scale_simple(buf, 1069 scale = gdk_pixbuf_scale_simple(buf,
1056 purple_request_field_image_get_scale_x(field) * gdk_pixbuf_get_width(buf), 1070 purple_request_field_image_get_scale_x(field) * gdk_pixbuf_get_width(buf),
1057 purple_request_field_image_get_scale_y(field) * gdk_pixbuf_get_height(buf), 1071 purple_request_field_image_get_scale_y(field) * gdk_pixbuf_get_height(buf),
1058 GDK_INTERP_BILINEAR); 1072 GDK_INTERP_BILINEAR);
1059 widget = gtk_image_new_from_pixbuf(scale); 1073 widget = gtk_image_new_from_pixbuf(scale);
1060 g_object_unref(G_OBJECT(loader)); 1074 g_object_unref(G_OBJECT(buf));
1061 g_object_unref(G_OBJECT(scale)); 1075 g_object_unref(G_OBJECT(scale));
1076
1077 #if GTK_CHECK_VERSION(2,12,0)
1078 gtk_widget_set_tooltip_text(widget, purple_request_field_get_tooltip(field));
1079 #endif
1062 1080
1063 return widget; 1081 return widget;
1064 } 1082 }
1065 1083
1066 static GtkWidget * 1084 static GtkWidget *
1072 purple_request_field_account_get_default_value(field), 1090 purple_request_field_account_get_default_value(field),
1073 purple_request_field_account_get_show_all(field), 1091 purple_request_field_account_get_show_all(field),
1074 G_CALLBACK(field_account_cb), 1092 G_CALLBACK(field_account_cb),
1075 purple_request_field_account_get_filter(field), 1093 purple_request_field_account_get_filter(field),
1076 field); 1094 field);
1095
1096 #if GTK_CHECK_VERSION(2,12,0)
1097 gtk_widget_set_tooltip_text(widget, purple_request_field_get_tooltip(field));
1098 #endif
1077 1099
1078 return widget; 1100 return widget;
1079 } 1101 }
1080 1102
1081 static void 1103 static void
1156 { 1178 {
1157 const char *icon_path = (const char *)icons->data; 1179 const char *icon_path = (const char *)icons->data;
1158 GdkPixbuf* pixbuf = NULL; 1180 GdkPixbuf* pixbuf = NULL;
1159 1181
1160 if (icon_path) 1182 if (icon_path)
1161 pixbuf = gdk_pixbuf_new_from_file(icon_path, NULL); 1183 pixbuf = pidgin_pixbuf_new_from_file(icon_path);
1162 1184
1163 gtk_list_store_set(store, &iter, 1185 gtk_list_store_set(store, &iter,
1164 0, purple_request_field_list_get_data(field, text), 1186 0, purple_request_field_list_get_data(field, text),
1165 1, text, 1187 1, text,
1166 2, pixbuf, 1188 2, pixbuf,

mercurial