| 178 |
175 |
| 179 GSList *extra_actions; |
176 GSList *extra_actions; |
| 180 |
177 |
| 181 gpointer parent_from; |
178 gpointer parent_from; |
| 182 }; |
179 }; |
| 183 |
|
| 184 static void |
|
| 185 purple_request_fields_check_others_sensitivity(PurpleRequestField *field); |
|
| 186 |
180 |
| 187 PurpleRequestCommonParameters * |
181 PurpleRequestCommonParameters * |
| 188 purple_request_cpar_new(void) |
182 purple_request_cpar_new(void) |
| 189 { |
183 { |
| 190 return g_rc_box_new0(PurpleRequestCommonParameters); |
184 return g_rc_box_new0(PurpleRequestCommonParameters); |
| 484 |
478 |
| 485 g_list_free_full(fields->groups, |
479 g_list_free_full(fields->groups, |
| 486 (GDestroyNotify)purple_request_field_group_destroy); |
480 (GDestroyNotify)purple_request_field_group_destroy); |
| 487 g_list_free(fields->required_fields); |
481 g_list_free(fields->required_fields); |
| 488 g_list_free(fields->validated_fields); |
482 g_list_free(fields->validated_fields); |
| 489 g_list_free(fields->autosensitive_fields); |
|
| 490 g_hash_table_destroy(fields->fields); |
483 g_hash_table_destroy(fields->fields); |
| 491 g_free(fields); |
484 g_free(fields); |
| 492 } |
485 } |
| 493 |
486 |
| 494 void |
487 void |
| 521 |
514 |
| 522 if (purple_request_field_is_validatable(field)) { |
515 if (purple_request_field_is_validatable(field)) { |
| 523 fields->validated_fields = |
516 fields->validated_fields = |
| 524 g_list_append(fields->validated_fields, field); |
517 g_list_append(fields->validated_fields, field); |
| 525 } |
518 } |
| 526 |
|
| 527 if (field->sensitivity_cb != NULL) { |
|
| 528 fields->autosensitive_fields = |
|
| 529 g_list_append(fields->autosensitive_fields, field); |
|
| 530 } |
|
| 531 } |
519 } |
| 532 } |
520 } |
| 533 |
521 |
| 534 GList * |
522 GList * |
| 535 purple_request_fields_get_groups(const PurpleRequestFields *fields) |
523 purple_request_fields_get_groups(const PurpleRequestFields *fields) |
| 560 purple_request_fields_get_validatable(const PurpleRequestFields *fields) |
548 purple_request_fields_get_validatable(const PurpleRequestFields *fields) |
| 561 { |
549 { |
| 562 g_return_val_if_fail(fields != NULL, NULL); |
550 g_return_val_if_fail(fields != NULL, NULL); |
| 563 |
551 |
| 564 return fields->validated_fields; |
552 return fields->validated_fields; |
| 565 } |
|
| 566 |
|
| 567 const GList * |
|
| 568 purple_request_fields_get_autosensitive(const PurpleRequestFields *fields) |
|
| 569 { |
|
| 570 g_return_val_if_fail(fields != NULL, NULL); |
|
| 571 |
|
| 572 return fields->autosensitive_fields; |
|
| 573 } |
553 } |
| 574 |
554 |
| 575 gboolean |
555 gboolean |
| 576 purple_request_fields_is_field_required(const PurpleRequestFields *fields, |
556 purple_request_fields_is_field_required(const PurpleRequestFields *fields, |
| 577 const char *id) |
557 const char *id) |
| 636 if (!purple_request_field_is_valid(field, NULL)) |
616 if (!purple_request_field_is_valid(field, NULL)) |
| 637 return FALSE; |
617 return FALSE; |
| 638 } |
618 } |
| 639 |
619 |
| 640 return TRUE; |
620 return TRUE; |
| 641 } |
|
| 642 |
|
| 643 static void |
|
| 644 purple_request_fields_check_sensitivity(PurpleRequestFields *fields) |
|
| 645 { |
|
| 646 GList *it; |
|
| 647 |
|
| 648 g_return_if_fail(fields != NULL); |
|
| 649 |
|
| 650 for (it = fields->autosensitive_fields; it; it = g_list_next(it)) { |
|
| 651 PurpleRequestField *field = it->data; |
|
| 652 |
|
| 653 if (field->sensitivity_cb == NULL) { |
|
| 654 g_warn_if_reached(); |
|
| 655 continue; |
|
| 656 } |
|
| 657 |
|
| 658 purple_request_field_set_sensitive(field, |
|
| 659 field->sensitivity_cb(field)); |
|
| 660 } |
|
| 661 } |
|
| 662 |
|
| 663 static void |
|
| 664 purple_request_fields_check_others_sensitivity(PurpleRequestField *field) |
|
| 665 { |
|
| 666 g_return_if_fail(field != NULL); |
|
| 667 |
|
| 668 if (field->group == NULL || field->group->fields_list == NULL) |
|
| 669 return; |
|
| 670 |
|
| 671 purple_request_fields_check_sensitivity(field->group->fields_list); |
|
| 672 } |
621 } |
| 673 |
622 |
| 674 PurpleRequestField * |
623 PurpleRequestField * |
| 675 purple_request_fields_get_field(const PurpleRequestFields *fields, const char *id) |
624 purple_request_fields_get_field(const PurpleRequestFields *fields, const char *id) |
| 676 { |
625 { |
| 820 |
769 |
| 821 if (purple_request_field_is_validatable(field)) |
770 if (purple_request_field_is_validatable(field)) |
| 822 { |
771 { |
| 823 group->fields_list->validated_fields = |
772 group->fields_list->validated_fields = |
| 824 g_list_append(group->fields_list->validated_fields, field); |
773 g_list_append(group->fields_list->validated_fields, field); |
| 825 } |
|
| 826 |
|
| 827 if (field->sensitivity_cb != NULL) |
|
| 828 { |
|
| 829 group->fields_list->autosensitive_fields = |
|
| 830 g_list_append(group->fields_list->autosensitive_fields, field); |
|
| 831 } |
774 } |
| 832 } |
775 } |
| 833 |
776 |
| 834 field->group = group; |
777 field->group = group; |
| 835 |
778 |
| 1118 g_return_val_if_fail(field != NULL, FALSE); |
1061 g_return_val_if_fail(field != NULL, FALSE); |
| 1119 |
1062 |
| 1120 return field->sensitive; |
1063 return field->sensitive; |
| 1121 } |
1064 } |
| 1122 |
1065 |
| 1123 void |
|
| 1124 purple_request_field_set_sensitivity_cb(PurpleRequestField *field, |
|
| 1125 PurpleRequestFieldSensitivityCb cb) |
|
| 1126 { |
|
| 1127 PurpleRequestFields *flist; |
|
| 1128 |
|
| 1129 g_return_if_fail(field != NULL); |
|
| 1130 |
|
| 1131 field->sensitivity_cb = cb; |
|
| 1132 |
|
| 1133 if (!field->group || !field->group->fields_list) |
|
| 1134 return; |
|
| 1135 flist = field->group->fields_list; |
|
| 1136 flist->autosensitive_fields = g_list_remove(flist->autosensitive_fields, |
|
| 1137 field); |
|
| 1138 if (cb != NULL) |
|
| 1139 { |
|
| 1140 flist->autosensitive_fields = g_list_append( |
|
| 1141 flist->autosensitive_fields, field); |
|
| 1142 } |
|
| 1143 } |
|
| 1144 |
|
| 1145 PurpleRequestField * |
1066 PurpleRequestField * |
| 1146 purple_request_field_string_new(const char *id, const char *text, |
1067 purple_request_field_string_new(const char *id, const char *text, |
| 1147 const char *default_value, gboolean multiline) |
1068 const char *default_value, gboolean multiline) |
| 1148 { |
1069 { |
| 1149 PurpleRequestField *field; |
1070 PurpleRequestField *field; |
| 1178 g_return_if_fail(field != NULL); |
1099 g_return_if_fail(field != NULL); |
| 1179 g_return_if_fail(field->type == PURPLE_REQUEST_FIELD_STRING); |
1100 g_return_if_fail(field->type == PURPLE_REQUEST_FIELD_STRING); |
| 1180 |
1101 |
| 1181 g_free(field->u.string.value); |
1102 g_free(field->u.string.value); |
| 1182 field->u.string.value = g_strdup(value); |
1103 field->u.string.value = g_strdup(value); |
| 1183 |
|
| 1184 purple_request_fields_check_others_sensitivity(field); |
|
| 1185 } |
1104 } |
| 1186 |
1105 |
| 1187 void |
1106 void |
| 1188 purple_request_field_string_set_masked(PurpleRequestField *field, gboolean masked) |
1107 purple_request_field_string_set_masked(PurpleRequestField *field, gboolean masked) |
| 1189 { |
1108 { |
| 1765 { |
1678 { |
| 1766 g_return_if_fail(field != NULL); |
1679 g_return_if_fail(field != NULL); |
| 1767 g_return_if_fail(field->type == PURPLE_REQUEST_FIELD_ACCOUNT); |
1680 g_return_if_fail(field->type == PURPLE_REQUEST_FIELD_ACCOUNT); |
| 1768 |
1681 |
| 1769 field->u.account.account = value; |
1682 field->u.account.account = value; |
| 1770 |
|
| 1771 purple_request_fields_check_others_sensitivity(field); |
|
| 1772 } |
1683 } |
| 1773 |
1684 |
| 1774 void |
1685 void |
| 1775 purple_request_field_account_set_show_all(PurpleRequestField *field, |
1686 purple_request_field_account_set_show_all(PurpleRequestField *field, |
| 1776 gboolean show_all) |
1687 gboolean show_all) |
| 2261 !((ops->features & PURPLE_REQUEST_FEATURE_HTML))) |
2172 !((ops->features & PURPLE_REQUEST_FEATURE_HTML))) |
| 2262 { |
2173 { |
| 2263 purple_request_fields_strip_html(fields); |
2174 purple_request_fields_strip_html(fields); |
| 2264 } |
2175 } |
| 2265 |
2176 |
| 2266 purple_request_fields_check_sensitivity(fields); |
|
| 2267 |
|
| 2268 if (ops != NULL && ops->request_fields != NULL) { |
2177 if (ops != NULL && ops->request_fields != NULL) { |
| 2269 PurpleRequestInfo *info; |
2178 PurpleRequestInfo *info; |
| 2270 gchar **tmp; |
2179 gchar **tmp; |
| 2271 |
2180 |
| 2272 tmp = purple_request_strip_html(cpar, &primary, &secondary); |
2181 tmp = purple_request_strip_html(cpar, &primary, &secondary); |