--- a/libpurple/purplerequestfield.c Thu Mar 16 20:43:41 2023 -0500
+++ b/libpurple/purplerequestfield.c Thu Mar 16 22:19:39 2023 -0500
@@ -426,7 +426,10 @@
+ g_object_freeze_notify(G_OBJECT(field)); g_object_notify_by_pspec(G_OBJECT(field), properties[PROP_REQUIRED]);
+ g_object_notify_by_pspec(G_OBJECT(field), properties[PROP_VALID]); + g_object_thaw_notify(G_OBJECT(field)); @@ -576,12 +579,6 @@
- if(!purple_request_field_is_required(field) &&
- !purple_request_field_is_filled(field))
klass = PURPLE_REQUEST_FIELD_GET_CLASS(field);
if(klass != NULL && klass->is_valid != NULL) {
valid = klass->is_valid(field, errmsg);
@@ -605,6 +602,15 @@
+ if(valid && purple_request_field_is_required(field) && + !purple_request_field_is_filled(field)) + *errmsg = g_strdup(_("Required field is not filled.")); if(!valid && errmsg != NULL && *errmsg == NULL) {
*errmsg = g_strdup(_("Validation failed without setting an error "
--- a/libpurple/purplerequestfield.h Thu Mar 16 20:43:41 2023 -0500
+++ b/libpurple/purplerequestfield.h Thu Mar 16 22:19:39 2023 -0500
@@ -248,7 +248,7 @@
* return (via errmsg argument) pointer to newly allocated error message.
* It must be freed with g_free after use.
- * Note: empty, not required fields are valid.
+ * Note: Required, but unfilled, fields are invalid. * Returns: TRUE, if the field is valid, FALSE otherwise.
--- a/libpurple/tests/test_request_field.c Thu Mar 16 20:43:41 2023 -0500
+++ b/libpurple/tests/test_request_field.c Thu Mar 16 22:19:39 2023 -0500
@@ -203,6 +203,35 @@
+test_request_field_required_validity(void) { + PurpleRequestField *field = NULL; + field = purple_request_field_string_new("test-string", "Test string", NULL, + result = purple_request_field_is_valid(field, &errmsg); + g_assert_cmpstr(errmsg, ==, NULL); + /* Once required, a field must be filled to be valid. */ + purple_request_field_set_required(field, TRUE); + result = purple_request_field_is_valid(field, &errmsg); + g_assert_cmpstr(errmsg, ==, "Required field is not filled."); + g_assert_false(result); + /* But once filled (and there's no other validator), then it can be valid. */ + purple_request_field_string_set_value(PURPLE_REQUEST_FIELD_STRING(field), + result = purple_request_field_is_valid(field, &errmsg); + g_assert_cmpstr(errmsg, ==, NULL); /******************************************************************************
*****************************************************************************/
@@ -219,5 +248,8 @@
g_test_add_func("/request-field/valid-custom",
test_request_field_valid_custom);
+ g_test_add_func("/request-field/required-validity", + test_request_field_required_validity);