pidgin/pidgin

Remove tracking of required fields

12 months ago, Elliott Sales de Andrade
2557742988dc
Parents f012db35bbc5
Children bce9e3254fe6
Remove tracking of required fields

The field required&filled status is now encapsulated in the valid property due to /r/2351.
This means that UIs no longer need to check that all required fields are filled.
So the page no longer needs to track required fields either.

Testing Done:
Compiled and ran `ninja test`. Also opened Request Fields from Demo protocol, removed the required string or entered an invalid email, and confirmed the OK button disabled correctly.

Reviewed at https://reviews.imfreedom.org/r/2352/
--- a/finch/gntrequest.c Fri Mar 17 00:41:38 2023 -0500
+++ b/finch/gntrequest.c Fri Mar 17 00:47:16 2023 -0500
@@ -377,9 +377,9 @@
purple_notify_close_with_handle(button);
- if (!g_object_get_data(G_OBJECT(button), "cancellation-function") &&
- (!purple_request_page_all_required_filled(page) ||
- !purple_request_page_is_valid(page))) {
+ if(!g_object_get_data(G_OBJECT(button), "cancellation-function") &&
+ !purple_request_page_is_valid(page))
+ {
purple_notify_error(button, _("Error"),
_("You must properly fill all the required fields."),
_("The required fields are underlined."), NULL);
--- a/libpurple/protocols/demo/purpledemoprotocolactions.c Fri Mar 17 00:41:38 2023 -0500
+++ b/libpurple/protocols/demo/purpledemoprotocolactions.c Fri Mar 17 00:47:16 2023 -0500
@@ -486,6 +486,7 @@
field = purple_request_field_string_new("string", _("A string"),
_("default"), FALSE);
+ purple_request_field_set_required(field, TRUE);
purple_request_group_add_field(group, field);
field = purple_request_field_string_new("multiline-string",
_("A multiline string"),
--- a/libpurple/purpleprivate.h Fri Mar 17 00:41:38 2023 -0500
+++ b/libpurple/purpleprivate.h Fri Mar 17 00:47:16 2023 -0500
@@ -339,9 +339,7 @@
G_GNUC_INTERNAL void purple_account_set_enabled_plain(PurpleAccount *account, gboolean enabled);
G_GNUC_INTERNAL void _purple_request_page_add_field(PurpleRequestPage *fields, PurpleRequestField *field);
-G_GNUC_INTERNAL void _purple_request_page_set_field_required(PurpleRequestPage *fields, PurpleRequestField *field, gboolean required);
G_GNUC_INTERNAL void _purple_request_group_set_page(PurpleRequestGroup *group, PurpleRequestPage *fields);
-G_GNUC_INTERNAL void _purple_request_group_set_field_required(PurpleRequestGroup *group, PurpleRequestField *field, gboolean required);
G_GNUC_INTERNAL void _purple_request_field_set_group(PurpleRequestField *field, PurpleRequestGroup *group);
G_END_DECLS
--- a/libpurple/purplerequestfield.c Fri Mar 17 00:41:38 2023 -0500
+++ b/libpurple/purplerequestfield.c Fri Mar 17 00:47:16 2023 -0500
@@ -403,11 +403,6 @@
priv->required = required;
- if(PURPLE_IS_REQUEST_GROUP(priv->group)) {
- _purple_request_group_set_field_required(priv->group, field,
- required);
- }
-
g_object_freeze_notify(G_OBJECT(field));
g_object_notify_by_pspec(G_OBJECT(field), properties[PROP_REQUIRED]);
g_object_notify_by_pspec(G_OBJECT(field), properties[PROP_VALID]);
--- a/libpurple/purplerequestgroup.c Fri Mar 17 00:41:38 2023 -0500
+++ b/libpurple/purplerequestgroup.c Fri Mar 17 00:47:16 2023 -0500
@@ -230,16 +230,6 @@
}
void
-_purple_request_group_set_field_required(PurpleRequestGroup *group,
- PurpleRequestField *field,
- gboolean required)
-{
- g_return_if_fail(PURPLE_IS_REQUEST_GROUP(group));
-
- _purple_request_page_set_field_required(group->page, field, required);
-}
-
-void
purple_request_group_add_field(PurpleRequestGroup *group,
PurpleRequestField *field)
{
--- a/libpurple/purplerequestpage.c Fri Mar 17 00:41:38 2023 -0500
+++ b/libpurple/purplerequestpage.c Fri Mar 17 00:47:16 2023 -0500
@@ -37,8 +37,6 @@
GHashTable *invalid_groups;
GHashTable *fields;
-
- GList *required_fields;
};
enum {
@@ -137,7 +135,6 @@
g_list_free_full(page->groups, g_object_unref);
g_clear_pointer(&page->invalid_groups, g_hash_table_destroy);
- g_list_free(page->required_fields);
g_hash_table_destroy(page->fields);
G_OBJECT_CLASS(purple_request_page_parent_class)->finalize(obj);
@@ -181,20 +178,6 @@
}
void
-_purple_request_page_set_field_required(PurpleRequestPage *page,
- PurpleRequestField *field,
- gboolean required)
-{
- g_return_if_fail(PURPLE_IS_REQUEST_PAGE(page));
-
- if(required) {
- page->required_fields = g_list_append(page->required_fields, field);
- } else {
- page->required_fields = g_list_remove(page->required_fields, field);
- }
-}
-
-void
_purple_request_page_add_field(PurpleRequestPage *page,
PurpleRequestField *field)
{
@@ -202,10 +185,6 @@
g_hash_table_insert(page->fields,
g_strdup(purple_request_field_get_id(field)), field);
-
- if(purple_request_field_is_required(field)) {
- page->required_fields = g_list_append(page->required_fields, field);
- }
}
void
@@ -237,11 +216,6 @@
g_hash_table_insert(page->fields,
g_strdup(purple_request_field_get_id(field)),
field);
-
- if (purple_request_field_is_required(field)) {
- page->required_fields = g_list_append(page->required_fields,
- field);
- }
}
g_list_model_items_changed(G_LIST_MODEL(page), position, 0, 1);
@@ -278,22 +252,6 @@
}
gboolean
-purple_request_page_all_required_filled(PurpleRequestPage *page) {
- GList *l;
-
- g_return_val_if_fail(PURPLE_IS_REQUEST_PAGE(page), FALSE);
-
- for(l = page->required_fields; l != NULL; l = l->next) {
- PurpleRequestField *field = PURPLE_REQUEST_FIELD(l->data);
-
- if (!purple_request_field_is_filled(field))
- return FALSE;
- }
-
- return TRUE;
-}
-
-gboolean
purple_request_page_is_valid(PurpleRequestPage *page) {
g_return_val_if_fail(PURPLE_IS_REQUEST_PAGE(page), FALSE);
--- a/libpurple/purplerequestpage.h Fri Mar 17 00:41:38 2023 -0500
+++ b/libpurple/purplerequestpage.h Fri Mar 17 00:47:16 2023 -0500
@@ -110,18 +110,6 @@
gboolean purple_request_page_is_field_required(PurpleRequestPage *page, const char *id);
/**
- * purple_request_page_all_required_filled:
- * @page: The fields page.
- *
- * Returns whether or not all required fields have values.
- *
- * Returns: TRUE if all required fields have values, or FALSE.
- *
- * Since: 3.0.0
- */
-gboolean purple_request_page_all_required_filled(PurpleRequestPage *page);
-
-/**
* purple_request_page_is_valid:
* @page: The fields page.
*
--- a/pidgin/gtkrequest.c Fri Mar 17 00:41:38 2023 -0500
+++ b/pidgin/gtkrequest.c Fri Mar 17 00:47:16 2023 -0500
@@ -222,29 +222,10 @@
}
static void
-req_field_changed_common(G_GNUC_UNUSED GtkWidget *widget,
- PurpleRequestField *field)
-{
- PurpleRequestGroup *group;
- PurpleRequestPage *page;
- PidginRequestData *req_data;
-
- group = purple_request_field_get_group(field);
- page = purple_request_group_get_page(group);
- req_data = g_object_get_data(G_OBJECT(page), "pidgin-ui-data");
-
- gtk_widget_set_sensitive(req_data->ok_button,
- purple_request_page_all_required_filled(page) &&
- purple_request_page_is_valid(page));
-}
-
-static void
field_bool_cb(GtkCheckButton *button, PurpleRequestField *field)
{
purple_request_field_bool_set_value(PURPLE_REQUEST_FIELD_BOOL(field),
gtk_check_button_get_active(button));
-
- req_field_changed_common(GTK_WIDGET(button), field);
}
static void
@@ -271,8 +252,6 @@
purple_request_field_account_set_value(
PURPLE_REQUEST_FIELD_ACCOUNT(field),
pidgin_account_chooser_get_selected(chooser));
-
- req_field_changed_common(GTK_WIDGET(obj), field);
}
static void
@@ -1066,8 +1045,6 @@
purple_strempty(text) ? NULL : text);
}
}
-
- req_field_changed_common(entry, field);
}
static void
@@ -2204,13 +2181,7 @@
g_object_unref(sg);
g_object_unref(datasheet_buttons_sg);
- if(!purple_request_page_all_required_filled(page)) {
- gtk_widget_set_sensitive(data->ok_button, FALSE);
- }
-
- if(!purple_request_page_is_valid(page)) {
- gtk_widget_set_sensitive(data->ok_button, FALSE);
- }
+ g_object_bind_property(page, "valid", data->ok_button, "sensitive", 0);
pidgin_auto_parent_window(win);