summaryrefslogtreecommitdiff
path: root/pidgin
diff options
context:
space:
mode:
authorElliott Sales de Andrade <quantum.analyst@gmail.com>2023-03-19 03:28:21 -0500
committerElliott Sales de Andrade <quantum.analyst@gmail.com>2023-03-19 03:28:21 -0500
commitd68797321563d15a453575fe7b644c352a9ff03d (patch)
treea497069c808fb9323b24ea5563e06eeebd2fe8a2 /pidgin
parent9d422e8021dfda5d9b5907bebd5b935b45651f22 (diff)
downloadpidgin-d68797321563d15a453575fe7b644c352a9ff03d.tar.gz
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/
Diffstat (limited to 'pidgin')
-rw-r--r--pidgin/gtkdialogs.c39
1 files changed, 22 insertions, 17 deletions
diff --git a/pidgin/gtkdialogs.c b/pidgin/gtkdialogs.c
index 6eaba42575..b1e47dc2a2 100644
--- a/pidgin/gtkdialogs.c
+++ b/pidgin/gtkdialogs.c
@@ -58,18 +58,18 @@ pidgin_dialogs_im_cb(G_GNUC_UNUSED gpointer data, PurpleRequestPage *page) {
}
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 @@ pidgin_dialogs_im(void)
{
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,