--- 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 @@
+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)), /******************************************************************************
* GListModel Implementation
*****************************************************************************/
@@ -178,22 +198,11 @@
-_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);
purple_request_page_add_group(PurpleRequestPage *page,
PurpleRequestGroup *group)
- 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);
- g_hash_table_insert(page->fields,
- g_strdup(purple_request_field_get_id(field)),
+ model = G_LIST_MODEL(group); + purple_request_page_items_changed_cb(model, 0, 0, + g_list_model_get_n_items(model), + 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 @@
-purple_request_fields_strip_html(PurpleRequestPage *page)
+purple_request_fields_strip_html(PurpleRequestPage *page) { + 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; - for (itg = purple_request_page_get_groups(page);
- itg = g_list_next(itg))
- PurpleRequestGroup *group = itg->data;
+ 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 = g_list_next(itf))
- PurpleRequestField *field = itf->data;
+ 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);