pidgin/pidgin

Use GListModel API for request fields in libpurple

13 months ago, Elliott Sales de Andrade
4a65f0fbc3dc
Parents a4b3376be353
Children 1a481edc6307
Use GListModel API for request fields in libpurple

Testing Done:
Compiled only.

Reviewed at https://reviews.imfreedom.org/r/2357/
--- a/libpurple/purpleprivate.h Sun Mar 19 03:25:37 2023 -0500
+++ b/libpurple/purpleprivate.h Sun Mar 19 03:26:38 2023 -0500
@@ -338,7 +338,6 @@
*/
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_group_set_page(PurpleRequestGroup *group, PurpleRequestPage *fields);
G_GNUC_INTERNAL void _purple_request_field_set_group(PurpleRequestField *field, PurpleRequestGroup *group);
--- a/libpurple/purplerequestgroup.c Sun Mar 19 03:25:37 2023 -0500
+++ b/libpurple/purplerequestgroup.c Sun Mar 19 03:26:38 2023 -0500
@@ -245,10 +245,6 @@
g_signal_connect(field, "notify::valid",
G_CALLBACK(purple_request_group_notify_field_cb), group);
- if(PURPLE_IS_REQUEST_PAGE(group->page)) {
- _purple_request_page_add_field(group->page, field);
- }
-
_purple_request_field_set_group(field, group);
g_list_model_items_changed(G_LIST_MODEL(group), position, 0, 1);
--- a/libpurple/purplerequestpage.c Sun Mar 19 03:25:37 2023 -0500
+++ b/libpurple/purplerequestpage.c Sun Mar 19 03:26:38 2023 -0500
@@ -71,6 +71,26 @@
}
}
+static void
+purple_request_page_items_changed_cb(GListModel *list, guint position,
+ guint removed, guint added, gpointer data)
+{
+ PurpleRequestPage *page = data;
+
+ /* Groups don't support removing fields, nor do pages support removing
+ * groups, so we don't attempt to support that here. */
+ g_return_if_fail(removed == 0);
+
+ for(guint offset = 0; offset < added; offset++) {
+ PurpleRequestField *field;
+ field = g_list_model_get_item(list, position + offset);
+ g_hash_table_insert(page->fields,
+ g_strdup(purple_request_field_get_id(field)),
+ field);
+ g_object_unref(field);
+ }
+}
+
/******************************************************************************
* GListModel Implementation
*****************************************************************************/
@@ -178,22 +198,11 @@
}
void
-_purple_request_page_add_field(PurpleRequestPage *page,
- PurpleRequestField *field)
-{
- g_return_if_fail(PURPLE_IS_REQUEST_PAGE(page));
-
- g_hash_table_insert(page->fields,
- g_strdup(purple_request_field_get_id(field)), field);
-}
-
-void
purple_request_page_add_group(PurpleRequestPage *page,
PurpleRequestGroup *group)
{
guint position;
- GList *l;
- PurpleRequestField *field;
+ GListModel *model = NULL;
g_return_if_fail(PURPLE_IS_REQUEST_PAGE(page));
g_return_if_fail(PURPLE_IS_REQUEST_GROUP(group));
@@ -207,16 +216,12 @@
g_signal_connect(group, "notify::valid",
G_CALLBACK(purple_request_page_notify_group_cb), page);
- for (l = purple_request_group_get_fields(group);
- l != NULL;
- l = l->next) {
-
- field = l->data;
-
- g_hash_table_insert(page->fields,
- g_strdup(purple_request_field_get_id(field)),
- field);
- }
+ model = G_LIST_MODEL(group);
+ purple_request_page_items_changed_cb(model, 0, 0,
+ g_list_model_get_n_items(model),
+ page);
+ g_signal_connect(group, "items-changed",
+ G_CALLBACK(purple_request_page_items_changed_cb), page);
g_list_model_items_changed(G_LIST_MODEL(page), position, 0, 1);
}
--- a/libpurple/request.c Sun Mar 19 03:25:37 2023 -0500
+++ b/libpurple/request.c Sun Mar 19 03:26:38 2023 -0500
@@ -621,32 +621,34 @@
}
static void
-purple_request_fields_strip_html(PurpleRequestPage *page)
-{
- GList *itg;
+purple_request_fields_strip_html(PurpleRequestPage *page) {
+ guint n_groups;
+
+ n_groups = g_list_model_get_n_items(G_LIST_MODEL(page));
+ for(guint group_index = 0; group_index < n_groups; group_index++) {
+ GListModel *group = NULL;
+ guint n_fields;
- for (itg = purple_request_page_get_groups(page);
- itg != NULL;
- itg = g_list_next(itg))
- {
- PurpleRequestGroup *group = itg->data;
- GList *itf;
+ group = g_list_model_get_item(G_LIST_MODEL(page), group_index);
+ n_fields = g_list_model_get_n_items(group);
- for (itf = purple_request_group_get_fields(group);
- itf != NULL;
- itf = g_list_next(itf))
- {
- PurpleRequestField *field = itf->data;
- const char *old_label;
- gchar *new_label;
+ for(guint field_index = 0; field_index < n_fields; field_index++) {
+ PurpleRequestField *field = NULL;
+ const char *old_label = NULL;
+ char *new_label = NULL;
+ field = g_list_model_get_item(group, field_index);
old_label = purple_request_field_get_label(field);
new_label = purple_request_strip_html_custom(old_label);
if(g_strcmp0(new_label, old_label) != 0) {
purple_request_field_set_label(field, new_label);
}
+
g_free(new_label);
+ g_object_unref(field);
}
+
+ g_object_unref(group);
}
}