| 224 |
224 |
| 225 return FALSE; |
225 return FALSE; |
| 226 } |
226 } |
| 227 |
227 |
| 228 static void |
228 static void |
| |
229 req_field_changed_common(GtkWidget *widget, PurpleRequestField *field) |
| |
230 { |
| |
231 PurpleRequestFieldGroup *group; |
| |
232 PurpleRequestFields *fields; |
| |
233 PidginRequestData *req_data; |
| |
234 const GList *it; |
| |
235 |
| |
236 group = purple_request_field_get_group(field); |
| |
237 fields = purple_request_field_group_get_fields_list(group); |
| |
238 req_data = purple_request_fields_get_ui_data(fields); |
| |
239 |
| |
240 gtk_widget_set_sensitive(req_data->ok_button, |
| |
241 purple_request_fields_all_required_filled(fields) && |
| |
242 purple_request_fields_all_valid(fields)); |
| |
243 |
| |
244 it = purple_request_fields_get_autosensitive(fields); |
| |
245 for(; it != NULL; it = g_list_next(it)) { |
| |
246 PurpleRequestField *field = it->data; |
| |
247 GtkWidget *widget = purple_request_field_get_ui_data(field); |
| |
248 gboolean sensitive; |
| |
249 |
| |
250 sensitive = purple_request_field_is_sensitive(field); |
| |
251 gtk_widget_set_sensitive(widget, sensitive); |
| |
252 |
| |
253 /* XXX: and what about multiline? */ |
| |
254 if(GTK_IS_EDITABLE(widget)) { |
| |
255 gtk_editable_set_editable(GTK_EDITABLE(widget), sensitive); |
| |
256 } |
| |
257 } |
| |
258 } |
| |
259 |
| |
260 static void |
| 229 field_bool_cb(GtkCheckButton *button, PurpleRequestField *field) |
261 field_bool_cb(GtkCheckButton *button, PurpleRequestField *field) |
| 230 { |
262 { |
| 231 purple_request_field_bool_set_value(field, |
263 purple_request_field_bool_set_value(field, |
| 232 gtk_check_button_get_active(button)); |
264 gtk_check_button_get_active(button)); |
| |
265 |
| |
266 req_field_changed_common(GTK_WIDGET(button), field); |
| 233 } |
267 } |
| 234 |
268 |
| 235 static void |
269 static void |
| 236 field_choice_menu_cb(GtkComboBox *menu, PurpleRequestField *field) |
270 field_choice_menu_cb(GtkComboBox *menu, PurpleRequestField *field) |
| 237 { |
271 { |
| 1031 req_entry_field_changed_cb(GtkWidget *entry, PurpleRequestField *field) |
1067 req_entry_field_changed_cb(GtkWidget *entry, PurpleRequestField *field) |
| 1032 { |
1068 { |
| 1033 if (purple_request_field_get_field_type(field) == PURPLE_REQUEST_FIELD_INTEGER) { |
1069 if (purple_request_field_get_field_type(field) == PURPLE_REQUEST_FIELD_INTEGER) { |
| 1034 int value = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(entry)); |
1070 int value = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(entry)); |
| 1035 purple_request_field_int_set_value(field, value); |
1071 purple_request_field_int_set_value(field, value); |
| 1036 return; |
1072 |
| 1037 } |
1073 } else if (purple_request_field_string_is_multiline(field)) { |
| 1038 |
|
| 1039 if (purple_request_field_string_is_multiline(field)) |
|
| 1040 { |
|
| 1041 char *text; |
1074 char *text; |
| 1042 GtkTextIter start_iter, end_iter; |
1075 GtkTextIter start_iter, end_iter; |
| 1043 |
1076 |
| 1044 gtk_text_buffer_get_start_iter(GTK_TEXT_BUFFER(entry), &start_iter); |
1077 gtk_text_buffer_get_start_iter(GTK_TEXT_BUFFER(entry), &start_iter); |
| 1045 gtk_text_buffer_get_end_iter(GTK_TEXT_BUFFER(entry), &end_iter); |
1078 gtk_text_buffer_get_end_iter(GTK_TEXT_BUFFER(entry), &end_iter); |
| 1046 |
1079 |
| 1047 text = gtk_text_buffer_get_text(GTK_TEXT_BUFFER(entry), &start_iter, &end_iter, FALSE); |
1080 text = gtk_text_buffer_get_text(GTK_TEXT_BUFFER(entry), &start_iter, &end_iter, FALSE); |
| 1048 purple_request_field_string_set_value(field, (!text || !*text) ? NULL : text); |
1081 purple_request_field_string_set_value(field, (!text || !*text) ? NULL : text); |
| 1049 g_free(text); |
1082 g_free(text); |
| 1050 } |
1083 |
| 1051 else |
1084 } else { |
| 1052 { |
|
| 1053 const char *text = NULL; |
1085 const char *text = NULL; |
| 1054 text = gtk_editable_get_text(GTK_EDITABLE(entry)); |
1086 text = gtk_editable_get_text(GTK_EDITABLE(entry)); |
| 1055 purple_request_field_string_set_value(field, (*text == '\0') ? NULL : text); |
1087 purple_request_field_string_set_value(field, (*text == '\0') ? NULL : text); |
| 1056 } |
1088 } |
| 1057 } |
1089 |
| 1058 |
1090 req_field_changed_common(entry, field); |
| 1059 static void |
|
| 1060 req_field_changed_cb(GtkWidget *widget, PurpleRequestField *field) |
|
| 1061 { |
|
| 1062 PurpleRequestFieldGroup *group; |
|
| 1063 PurpleRequestFields *fields; |
|
| 1064 PidginRequestData *req_data; |
|
| 1065 const GList *it; |
|
| 1066 |
|
| 1067 group = purple_request_field_get_group(field); |
|
| 1068 fields = purple_request_field_group_get_fields_list(group); |
|
| 1069 req_data = purple_request_fields_get_ui_data(fields); |
|
| 1070 |
|
| 1071 gtk_widget_set_sensitive(req_data->ok_button, |
|
| 1072 purple_request_fields_all_required_filled(fields) && |
|
| 1073 purple_request_fields_all_valid(fields)); |
|
| 1074 |
|
| 1075 it = purple_request_fields_get_autosensitive(fields); |
|
| 1076 for (; it != NULL; it = g_list_next(it)) { |
|
| 1077 PurpleRequestField *field = it->data; |
|
| 1078 GtkWidget *widget = purple_request_field_get_ui_data(field); |
|
| 1079 gboolean sensitive; |
|
| 1080 |
|
| 1081 sensitive = purple_request_field_is_sensitive(field); |
|
| 1082 gtk_widget_set_sensitive(widget, sensitive); |
|
| 1083 |
|
| 1084 /* XXX: and what about multiline? */ |
|
| 1085 if (GTK_IS_EDITABLE(widget)) |
|
| 1086 gtk_editable_set_editable(GTK_EDITABLE(widget), sensitive); |
|
| 1087 } |
|
| 1088 } |
1091 } |
| 1089 |
1092 |
| 1090 static void |
1093 static void |
| 1091 setup_entry_field(GtkWidget *entry, PurpleRequestField *field) |
1094 setup_entry_field(GtkWidget *entry, PurpleRequestField *field) |
| 1092 { |
1095 { |
| 1093 const char *type_hint; |
1096 const char *type_hint; |
| 1094 |
1097 |
| 1095 g_object_set(entry, "activates-default", TRUE, NULL); |
1098 g_object_set(entry, "activates-default", TRUE, NULL); |
| 1096 |
1099 |
| 1097 g_signal_connect(G_OBJECT(entry), "changed", |
1100 g_signal_connect(entry, "changed", G_CALLBACK(req_entry_field_changed_cb), |
| 1098 G_CALLBACK(req_entry_field_changed_cb), field); |
1101 field); |
| 1099 g_signal_connect(G_OBJECT(entry), "changed", |
|
| 1100 G_CALLBACK(req_field_changed_cb), field); |
|
| 1101 |
1102 |
| 1102 if ((type_hint = purple_request_field_get_field_type_hint(field)) != NULL) |
1103 if ((type_hint = purple_request_field_get_field_type_hint(field)) != NULL) |
| 1103 { |
1104 { |
| 1104 if (g_str_has_prefix(type_hint, "screenname")) { |
1105 if (g_str_has_prefix(type_hint, "screenname")) { |
| 1105 GtkWidget *optmenu = NULL; |
1106 GtkWidget *optmenu = NULL; |
| 1173 G_CALLBACK(field_string_focus_out_cb), field); |
1174 G_CALLBACK(field_string_focus_out_cb), field); |
| 1174 |
1175 |
| 1175 if (purple_request_field_is_required(field)) |
1176 if (purple_request_field_is_required(field)) |
| 1176 { |
1177 { |
| 1177 GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)); |
1178 GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)); |
| 1178 g_signal_connect(G_OBJECT(buffer), "changed", |
1179 g_signal_connect(buffer, "changed", |
| 1179 G_CALLBACK(req_entry_field_changed_cb), field); |
1180 G_CALLBACK(req_entry_field_changed_cb), field); |
| 1180 } |
1181 } |
| 1181 |
1182 |
| 1182 widget = gtk_scrolled_window_new(); |
1183 widget = gtk_scrolled_window_new(); |
| 1183 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget), |
1184 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget), |
| 1184 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); |
1185 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); |