| 229 purple_request_field_bool_set_value(field, |
229 purple_request_field_bool_set_value(field, |
| 230 gtk_toggle_button_get_active(button)); |
230 gtk_toggle_button_get_active(button)); |
| 231 } |
231 } |
| 232 |
232 |
| 233 static void |
233 static void |
| 234 field_choice_menu_cb(GtkOptionMenu *menu, PurpleRequestField *field) |
234 field_choice_menu_cb(GtkComboBox *menu, PurpleRequestField *field) |
| 235 { |
235 { |
| 236 purple_request_field_choice_set_value(field, |
236 purple_request_field_choice_set_value(field, |
| 237 gtk_option_menu_get_history(menu)); |
237 gtk_combo_box_get_active(menu)); |
| 238 } |
238 } |
| 239 |
239 |
| 240 static void |
240 static void |
| 241 field_choice_option_cb(GtkRadioButton *button, PurpleRequestField *field) |
241 field_choice_option_cb(GtkRadioButton *button, PurpleRequestField *field) |
| 242 { |
242 { |
| 956 int num_labels = g_list_length(labels); |
956 int num_labels = g_list_length(labels); |
| 957 GList *l; |
957 GList *l; |
| 958 |
958 |
| 959 if (num_labels > 5) |
959 if (num_labels > 5) |
| 960 { |
960 { |
| 961 GtkWidget *menu; |
961 widget = gtk_combo_box_new_text(); |
| 962 GtkWidget *item; |
|
| 963 |
|
| 964 widget = gtk_option_menu_new(); |
|
| 965 |
|
| 966 menu = gtk_menu_new(); |
|
| 967 |
962 |
| 968 for (l = labels; l != NULL; l = l->next) |
963 for (l = labels; l != NULL; l = l->next) |
| 969 { |
964 { |
| 970 const char *text = l->data; |
965 const char *text = l->data; |
| 971 |
966 gtk_combo_box_append_text(GTK_COMBO_BOX(widget), text); |
| 972 item = gtk_menu_item_new_with_label(text); |
|
| 973 gtk_widget_show(item); |
|
| 974 |
|
| 975 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); |
|
| 976 } |
967 } |
| 977 |
968 |
| 978 gtk_widget_show(menu); |
969 gtk_combo_box_set_active(GTK_COMBO_BOX(widget), |
| 979 gtk_option_menu_set_menu(GTK_OPTION_MENU(widget), menu); |
|
| 980 gtk_option_menu_set_history(GTK_OPTION_MENU(widget), |
|
| 981 purple_request_field_choice_get_default_value(field)); |
970 purple_request_field_choice_get_default_value(field)); |
| 982 |
971 |
| 983 g_signal_connect(G_OBJECT(widget), "changed", |
972 g_signal_connect(G_OBJECT(widget), "changed", |
| 984 G_CALLBACK(field_choice_menu_cb), field); |
973 G_CALLBACK(field_choice_menu_cb), field); |
| 985 } |
974 } |
| 1092 GtkCellRenderer *renderer; |
1081 GtkCellRenderer *renderer; |
| 1093 GtkTreeSelection *sel; |
1082 GtkTreeSelection *sel; |
| 1094 GtkTreeViewColumn *column; |
1083 GtkTreeViewColumn *column; |
| 1095 GtkTreeIter iter; |
1084 GtkTreeIter iter; |
| 1096 GList *l; |
1085 GList *l; |
| |
1086 GList *icons = NULL; |
| |
1087 |
| |
1088 icons = purple_request_field_list_get_icons(field); |
| 1097 |
1089 |
| 1098 /* Create the scrolled window */ |
1090 /* Create the scrolled window */ |
| 1099 sw = gtk_scrolled_window_new(NULL, NULL); |
1091 sw = gtk_scrolled_window_new(NULL, NULL); |
| 1100 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), |
1092 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), |
| 1101 GTK_POLICY_AUTOMATIC, |
1093 GTK_POLICY_AUTOMATIC, |
| 1103 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), |
1095 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), |
| 1104 GTK_SHADOW_IN); |
1096 GTK_SHADOW_IN); |
| 1105 gtk_widget_show(sw); |
1097 gtk_widget_show(sw); |
| 1106 |
1098 |
| 1107 /* Create the list store */ |
1099 /* Create the list store */ |
| 1108 store = gtk_list_store_new(2, G_TYPE_POINTER, G_TYPE_STRING); |
1100 if (icons) |
| |
1101 store = gtk_list_store_new(3, G_TYPE_POINTER, G_TYPE_STRING, GDK_TYPE_PIXBUF); |
| |
1102 else |
| |
1103 store = gtk_list_store_new(2, G_TYPE_POINTER, G_TYPE_STRING); |
| 1109 |
1104 |
| 1110 /* Create the tree view */ |
1105 /* Create the tree view */ |
| 1111 treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); |
1106 treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); |
| 1112 g_object_unref(G_OBJECT(store)); |
1107 g_object_unref(G_OBJECT(store)); |
| 1113 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE); |
1108 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE); |
| 1122 |
1117 |
| 1123 renderer = gtk_cell_renderer_text_new(); |
1118 renderer = gtk_cell_renderer_text_new(); |
| 1124 gtk_tree_view_column_pack_start(column, renderer, TRUE); |
1119 gtk_tree_view_column_pack_start(column, renderer, TRUE); |
| 1125 gtk_tree_view_column_add_attribute(column, renderer, "text", 1); |
1120 gtk_tree_view_column_add_attribute(column, renderer, "text", 1); |
| 1126 |
1121 |
| |
1122 if (icons) |
| |
1123 { |
| |
1124 renderer = gtk_cell_renderer_pixbuf_new(); |
| |
1125 gtk_tree_view_column_pack_start(column, renderer, TRUE); |
| |
1126 gtk_tree_view_column_add_attribute(column, renderer, "pixbuf", 2); |
| |
1127 |
| |
1128 gtk_widget_set_size_request(treeview, 200, 400); |
| |
1129 } |
| |
1130 |
| 1127 for (l = purple_request_field_list_get_items(field); l != NULL; l = l->next) |
1131 for (l = purple_request_field_list_get_items(field); l != NULL; l = l->next) |
| 1128 { |
1132 { |
| 1129 const char *text = (const char *)l->data; |
1133 const char *text = (const char *)l->data; |
| 1130 |
1134 |
| 1131 gtk_list_store_append(store, &iter); |
1135 gtk_list_store_append(store, &iter); |
| 1132 |
1136 |
| 1133 gtk_list_store_set(store, &iter, |
1137 if (icons) |
| |
1138 { |
| |
1139 const char *icon_path = (const char *)icons->data; |
| |
1140 GdkPixbuf* pixbuf = NULL; |
| |
1141 |
| |
1142 if (icon_path) |
| |
1143 pixbuf = gdk_pixbuf_new_from_file(icon_path, NULL); |
| |
1144 |
| |
1145 gtk_list_store_set(store, &iter, |
| |
1146 0, purple_request_field_list_get_data(field, text), |
| |
1147 1, text, |
| |
1148 2, pixbuf, |
| |
1149 -1); |
| |
1150 icons = icons->next; |
| |
1151 } |
| |
1152 else |
| |
1153 gtk_list_store_set(store, &iter, |
| 1134 0, purple_request_field_list_get_data(field, text), |
1154 0, purple_request_field_list_get_data(field, text), |
| 1135 1, text, |
1155 1, text, |
| 1136 -1); |
1156 -1); |
| 1137 |
1157 |
| 1138 if (purple_request_field_list_is_selected(field, text)) |
1158 if (purple_request_field_list_is_selected(field, text)) |