libpurple/request.c

changeset 33219
06b19630bdb0
parent 33213
2852fbde4722
child 33237
2574432da068
--- a/libpurple/request.c	Sun Jul 29 13:06:47 2012 +0200
+++ b/libpurple/request.c	Sat Aug 04 08:52:12 2012 +0200
@@ -209,7 +209,7 @@
 				g_list_append(fields->required_fields, field);
 		}
 
-		if (purple_request_field_is_validated(field)) {
+		if (purple_request_field_is_validatable(field)) {
 			fields->validated_fields =
 				g_list_append(fields->validated_fields, field);
 		}
@@ -234,7 +234,7 @@
 	return (g_hash_table_lookup(fields->fields, id) != NULL);
 }
 
-GList *
+const GList *
 purple_request_fields_get_required(const PurpleRequestFields *fields)
 {
 	g_return_val_if_fail(fields != NULL, NULL);
@@ -242,8 +242,8 @@
 	return fields->required_fields;
 }
 
-GList *
-purple_request_fields_get_validated(const PurpleRequestFields *fields)
+const GList *
+purple_request_fields_get_validatable(const PurpleRequestFields *fields)
 {
 	g_return_val_if_fail(fields != NULL, NULL);
 
@@ -311,7 +311,7 @@
 	{
 		PurpleRequestField *field = (PurpleRequestField *)l->data;
 
-		if (!purple_request_field_is_valid(field))
+		if (!purple_request_field_is_valid(field, NULL))
 			return FALSE;
 	}
 
@@ -464,7 +464,7 @@
 				g_list_append(group->fields_list->required_fields, field);
 		}
 		
-		if (purple_request_field_is_validated(field))
+		if (purple_request_field_is_validatable(field))
 		{
 			group->fields_list->validated_fields =
 				g_list_append(group->fields_list->validated_fields, field);
@@ -716,21 +716,19 @@
 
 	if (field->group != NULL)
 	{
+		PurpleRequestFields *flist = field->group->fields_list;
+		flist->validated_fields = g_list_remove(flist->validated_fields,
+			field);
 		if (validator)
 		{
-			field->group->fields_list->validated_fields = g_list_append(
-				field->group->fields_list->validated_fields, field);
-		}
-		else
-		{
-			field->group->fields_list->validated_fields = g_list_remove(
-				field->group->fields_list->validated_fields, field);
+			flist->validated_fields = g_list_append(
+				flist->validated_fields, field);
 		}
 	}
 }
 
 gboolean
-purple_request_field_is_validated(PurpleRequestField *field)
+purple_request_field_is_validatable(PurpleRequestField *field)
 {
 	g_return_val_if_fail(field != NULL, FALSE);
 
@@ -738,8 +736,10 @@
 }
 
 gboolean
-purple_request_field_is_valid(PurpleRequestField *field)
+purple_request_field_is_valid(PurpleRequestField *field, gchar **errmsg)
 {
+	gboolean valid;
+
 	g_return_val_if_fail(field != NULL, FALSE);
 
 	if (!field->validator)
@@ -749,7 +749,12 @@
 		!purple_request_field_is_filled(field))
 		return TRUE;
 
-	return field->validator(field, field->validator_data);
+	valid = field->validator(field, errmsg, field->validator_data);
+
+	if (valid && errmsg)
+		*errmsg = NULL;
+
+	return valid;
 }
 
 PurpleRequestField *

mercurial