pidgin/pidgin

Fix new request warning in New IM dialog

13 months ago, Elliott Sales de Andrade
1a481edc6307
Parents 4a65f0fbc3dc
Children a6327a3bbfae
Fix new request warning in New IM dialog

Setting the validator triggers the field's `valid` property notification, which triggers the group to refresh its validity, which fetches the `valid` property and runs the validator.

But the validator depends on the account field which hasn't been created yet, which causes a type-check warning.

So set the validator after all fields are made, and also change the data argument so the dependency is clearer.

Testing Done:
Compiled, and opened the New IM dialog.

Reviewed at https://reviews.imfreedom.org/r/2358/
--- a/pidgin/gtkdialogs.c Sun Mar 19 03:26:38 2023 -0500
+++ b/pidgin/gtkdialogs.c Sun Mar 19 03:28:21 2023 -0500
@@ -58,18 +58,18 @@
}
static gboolean
-pidgin_dialogs_im_name_validator(G_GNUC_UNUSED PurpleRequestField *field,
- char **errmsg, gpointer data)
+pidgin_dialogs_im_name_validator(PurpleRequestField *field, char **errmsg,
+ gpointer data)
{
- PurpleRequestPage *page = data;
+ PurpleRequestFieldAccount *account_field = data;
PurpleAccount *account;
PurpleProtocol *protocol;
const char *username;
gboolean valid = FALSE;
- account = purple_request_page_get_account(page, "account");
+ account = purple_request_field_account_get_value(account_field);
protocol = purple_account_get_protocol(account);
- username = purple_request_page_get_string(page, "screenname");
+ username = purple_request_field_string_get_value(PURPLE_REQUEST_FIELD_STRING(field));
if (username) {
valid = purple_validate(protocol, username);
@@ -86,27 +86,32 @@
{
PurpleRequestPage *page;
PurpleRequestGroup *group;
- PurpleRequestField *field;
+ PurpleRequestField *username_field = NULL;
+ PurpleRequestField *account_field = NULL;
page = purple_request_page_new();
group = purple_request_group_new(NULL);
purple_request_page_add_group(page, group);
- field = purple_request_field_string_new("screenname", _("_Name"), NULL, FALSE);
- purple_request_field_set_type_hint(field, "screenname");
- purple_request_field_set_required(field, TRUE);
- purple_request_field_set_validator(field, pidgin_dialogs_im_name_validator,
- page, NULL);
- purple_request_group_add_field(group, field);
+ username_field = purple_request_field_string_new("screenname", _("_Name"),
+ NULL, FALSE);
+ purple_request_field_set_type_hint(username_field, "screenname");
+ purple_request_field_set_required(username_field, TRUE);
+ purple_request_group_add_field(group, username_field);
- field = purple_request_field_account_new("account", _("_Account"), NULL);
- purple_request_field_set_type_hint(field, "account");
- purple_request_field_set_visible(field,
+ account_field = purple_request_field_account_new("account", _("_Account"),
+ NULL);
+ purple_request_field_set_type_hint(account_field, "account");
+ purple_request_field_set_visible(account_field,
(purple_connections_get_all() != NULL &&
purple_connections_get_all()->next != NULL));
- purple_request_field_set_required(field, TRUE);
- purple_request_group_add_field(group, field);
+ purple_request_field_set_required(account_field, TRUE);
+ purple_request_group_add_field(group, account_field);
+
+ purple_request_field_set_validator(username_field,
+ pidgin_dialogs_im_name_validator,
+ account_field, NULL);
purple_request_fields(
purple_blist_get_default(), _("New Instant Message"), NULL,