--- a/libpurple/request.c Mon Aug 06 03:40:40 2012 -0400
+++ b/libpurple/request.c Mon Aug 06 03:41:43 2012 -0400
@@ -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);
purple_request_fields_get_required(const PurpleRequestFields *fields)
g_return_val_if_fail(fields != NULL, NULL);
@@ -242,8 +242,8 @@
return fields->required_fields;
-purple_request_fields_get_validated(const PurpleRequestFields *fields)
+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)) @@ -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->group->fields_list->validated_fields = g_list_append(
- field->group->fields_list->validated_fields, field);
- 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); -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 @@
-purple_request_field_is_valid(PurpleRequestField *field)
+purple_request_field_is_valid(PurpleRequestField *field, gchar **errmsg) g_return_val_if_fail(field != NULL, FALSE);
@@ -749,7 +749,12 @@
!purple_request_field_is_filled(field))
- return field->validator(field, field->validator_data);
+ valid = field->validator(field, errmsg, field->validator_data); --- a/libpurple/request.h Mon Aug 06 03:40:40 2012 -0400
+++ b/libpurple/request.h Mon Aug 06 03:41:43 2012 -0400
@@ -150,7 +150,8 @@
typedef void (*PurpleRequestInputCb)(void *, const char *);
-typedef gboolean (*PurpleRequestFieldValidator)(PurpleRequestField *field, void *user_data);
+typedef gboolean (*PurpleRequestFieldValidator)(PurpleRequestField *field, + gchar **errmsg, void *user_data); /** The type of callbacks passed to purple_request_action(). The first
* argument is the @a user_data parameter; the second is the index in the list
@@ -218,7 +219,8 @@
* @constreturn The list of required fields.
-GList *purple_request_fields_get_required(const PurpleRequestFields *fields);
+const GList *purple_request_fields_get_required( + const PurpleRequestFields *fields); * Returns a list of all validated fields.
@@ -227,7 +229,8 @@
* @constreturn The list of validated fields.
-GList *purple_request_fields_get_validated(const PurpleRequestFields *fields);
+const GList *purple_request_fields_get_validatable( + const PurpleRequestFields *fields); * Returns whether or not a field with the specified ID is required.
@@ -579,18 +582,24 @@
* @return TRUE if the field has validator, or FALSE.
-gboolean purple_request_field_is_validated(PurpleRequestField *field);
+gboolean purple_request_field_is_validatable(PurpleRequestField *field); * Checks, if specified field is valid.
+ * If detailed message about failure reason is needed, there is an option to + * 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.
* @param field The field.
+ * @param errmsg If non-NULL, the memory area, where the pointer to validation + * failure message will be set. * @return TRUE, if the field is valid, FALSE otherwise.
-gboolean purple_request_field_is_valid(PurpleRequestField *field);
+gboolean purple_request_field_is_valid(PurpleRequestField *field, gchar **errmsg); * Returns the ui_data for a field.
--- a/pidgin/gtkconv.c Mon Aug 06 03:40:40 2012 -0400
+++ b/pidgin/gtkconv.c Mon Aug 06 03:41:43 2012 -0400
@@ -5791,12 +5791,13 @@
g_signal_connect(G_OBJECT(pane), "button_press_event",
G_CALLBACK(ignore_middle_click), NULL);
- g_signal_connect(G_OBJECT(pane), "drag_data_received",
- G_CALLBACK(conv_dnd_recv), gtkconv);
- g_signal_connect(G_OBJECT(gtkconv->webview), "drag_data_received",
- G_CALLBACK(conv_dnd_recv), gtkconv);
- g_signal_connect(G_OBJECT(gtkconv->entry), "drag_data_received",
- G_CALLBACK(conv_dnd_recv), gtkconv);
+// TODO: this crashes with webkit, fix it +// g_signal_connect(G_OBJECT(pane), "drag_data_received", +// G_CALLBACK(conv_dnd_recv), gtkconv); +// g_signal_connect(G_OBJECT(gtkconv->webview), "drag_data_received", +// G_CALLBACK(conv_dnd_recv), gtkconv); +// g_signal_connect(G_OBJECT(gtkconv->entry), "drag_data_received", +// G_CALLBACK(conv_dnd_recv), gtkconv); g_signal_connect(gtkconv->webview, "style-set", G_CALLBACK(set_typing_font), gtkconv);
--- a/pidgin/gtkdialogs.c Mon Aug 06 03:40:40 2012 -0400
+++ b/pidgin/gtkdialogs.c Mon Aug 06 03:41:43 2012 -0400
@@ -880,18 +880,25 @@
-pidgin_dialogs_im_name_validator(PurpleRequestField *field, void *_fields)
+pidgin_dialogs_im_name_validator(PurpleRequestField *field, gchar **errmsg, PurpleRequestFields *fields = _fields;
account = purple_request_fields_get_account(fields, "account");
prpl = purple_find_prpl(purple_account_get_protocol_id(account));
username = purple_request_fields_get_string(fields, "screenname");
- return purple_validate(prpl, username);
+ valid = purple_validate(prpl, username); + *errmsg = g_strdup(_("Invalid username"));