pidgin/gtkrequest.c

changeset 41861
67b0fe9f32f3
parent 41857
ff94f8ff8a70
child 41862
0cb7833d756b
equal deleted inserted replaced
41860:9315e7772780 41861:67b0fe9f32f3
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 {
272 { 306 {
273 PidginAccountChooser *chooser = PIDGIN_ACCOUNT_CHOOSER(w); 307 PidginAccountChooser *chooser = PIDGIN_ACCOUNT_CHOOSER(w);
274 308
275 purple_request_field_account_set_value( 309 purple_request_field_account_set_value(
276 field, pidgin_account_chooser_get_selected(chooser)); 310 field, pidgin_account_chooser_get_selected(chooser));
311
312 req_field_changed_common(GTK_WIDGET(w), field);
277 } 313 }
278 314
279 static void 315 static void
280 multifield_ok_cb(GtkWidget *button, PidginRequestData *data) 316 multifield_ok_cb(GtkWidget *button, PidginRequestData *data)
281 { 317 {
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);
1251 gtk_widget_set_tooltip_text(widget, purple_request_field_get_tooltip(field)); 1252 gtk_widget_set_tooltip_text(widget, purple_request_field_get_tooltip(field));
1252 1253
1253 gtk_check_button_set_active(GTK_CHECK_BUTTON(widget), 1254 gtk_check_button_set_active(GTK_CHECK_BUTTON(widget),
1254 purple_request_field_bool_get_default_value(field)); 1255 purple_request_field_bool_get_default_value(field));
1255 1256
1256 g_signal_connect(G_OBJECT(widget), "toggled", 1257 g_signal_connect(widget, "toggled", G_CALLBACK(field_bool_cb), field);
1257 G_CALLBACK(field_bool_cb), field);
1258 g_signal_connect(widget, "toggled",
1259 G_CALLBACK(req_field_changed_cb), field);
1260 1258
1261 return widget; 1259 return widget;
1262 } 1260 }
1263 1261
1264 static GtkWidget * 1262 static GtkWidget *
1439 1437
1440 g_signal_connect(widget, "changed", G_CALLBACK(field_account_cb), 1438 g_signal_connect(widget, "changed", G_CALLBACK(field_account_cb),
1441 field); 1439 field);
1442 1440
1443 gtk_widget_set_tooltip_text(widget, purple_request_field_get_tooltip(field)); 1441 gtk_widget_set_tooltip_text(widget, purple_request_field_get_tooltip(field));
1444 g_signal_connect(widget, "changed",
1445 G_CALLBACK(req_field_changed_cb), field);
1446 1442
1447 return widget; 1443 return widget;
1448 } 1444 }
1449 1445
1450 static void 1446 static void

mercurial