pidgin/pidgin

Merge multiple heads.

2012-08-06, Elliott Sales de Andrade
87b96c327216
Merge multiple heads.
--- 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);
}
-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 *
--- 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 @@
}
static gboolean
-pidgin_dialogs_im_name_validator(PurpleRequestField *field, void *_fields)
+pidgin_dialogs_im_name_validator(PurpleRequestField *field, gchar **errmsg,
+ void *_fields)
{
PurpleRequestFields *fields = _fields;
PurpleAccount *account;
PurplePlugin *prpl;
const char *username;
+ gboolean valid;
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);
+
+ if (errmsg && !valid)
+ *errmsg = g_strdup(_("Invalid username"));
+
+ return valid;
}
void