pidgin/pidgin

Use GPtrArray internally to PurpleRequest{Group,Page}

12 months ago, Elliott Sales de Andrade
c9968cbf01d5
Parents a35df4578814
Children 9f89ed3c6465
Use GPtrArray internally to PurpleRequest{Group,Page}

Now that we don't export a `GList`, we can use these arrays internally.

Testing Done:
Opened Request Fields from Demo protocol, and confirmed all groups/fields were there.

Reviewed at https://reviews.imfreedom.org/r/2364/
--- a/libpurple/purplerequestgroup.c Mon Mar 20 23:01:54 2023 -0500
+++ b/libpurple/purplerequestgroup.c Mon Mar 20 23:04:04 2023 -0500
@@ -29,7 +29,7 @@
char *title;
- GList *fields;
+ GPtrArray *fields;
GHashTable *invalid_fields;
};
@@ -89,7 +89,7 @@
purple_request_group_get_n_items(GListModel *model) {
PurpleRequestGroup *group = PURPLE_REQUEST_GROUP(model);
- return g_list_length(group->fields);
+ return group->fields->len;
}
static gpointer
@@ -97,8 +97,8 @@
PurpleRequestGroup *group = PURPLE_REQUEST_GROUP(model);
PurpleRequestField *field = NULL;
- field = g_list_nth_data(group->fields, index);
- if(PURPLE_IS_REQUEST_FIELD(field)) {
+ if(index < group->fields->len) {
+ field = g_ptr_array_index(group->fields, index);
g_object_ref(field);
}
@@ -160,7 +160,7 @@
g_free(group->title);
- g_list_free_full(group->fields, g_object_unref);
+ g_clear_pointer(&group->fields, g_ptr_array_unref);
g_clear_pointer(&group->invalid_fields, g_hash_table_destroy);
G_OBJECT_CLASS(purple_request_group_parent_class)->finalize(obj);
@@ -168,6 +168,7 @@
static void
purple_request_group_init(PurpleRequestGroup *group) {
+ group->fields = g_ptr_array_new_with_free_func(g_object_unref);
group->invalid_fields = g_hash_table_new(g_direct_hash, g_direct_equal);
}
@@ -227,8 +228,8 @@
g_return_if_fail(PURPLE_IS_REQUEST_GROUP(group));
g_return_if_fail(PURPLE_IS_REQUEST_FIELD(field));
- position = g_list_length(group->fields);
- group->fields = g_list_append(group->fields, field);
+ position = group->fields->len;
+ g_ptr_array_add(group->fields, field);
purple_request_group_notify_field_cb(G_OBJECT(field), NULL, group);
g_signal_connect(field, "notify::valid",
--- a/libpurple/purplerequestpage.c Mon Mar 20 23:01:54 2023 -0500
+++ b/libpurple/purplerequestpage.c Mon Mar 20 23:04:04 2023 -0500
@@ -33,7 +33,7 @@
struct _PurpleRequestPage {
GObject parent;
- GList *groups;
+ GPtrArray *groups;
GHashTable *invalid_groups;
GHashTable *fields;
@@ -103,7 +103,7 @@
purple_request_page_get_n_items(GListModel *model) {
PurpleRequestPage *page = PURPLE_REQUEST_PAGE(model);
- return g_list_length(page->groups);
+ return page->groups->len;
}
static gpointer
@@ -111,8 +111,8 @@
PurpleRequestPage *page = PURPLE_REQUEST_PAGE(model);
PurpleRequestGroup *group = NULL;
- group = g_list_nth_data(page->groups, index);
- if(PURPLE_IS_REQUEST_GROUP(group)) {
+ if(index < page->groups->len) {
+ group = g_ptr_array_index(page->groups, index);
g_object_ref(group);
}
@@ -153,7 +153,7 @@
purple_request_page_finalize(GObject *obj) {
PurpleRequestPage *page = PURPLE_REQUEST_PAGE(obj);
- g_list_free_full(page->groups, g_object_unref);
+ g_clear_pointer(&page->groups, g_ptr_array_unref);
g_clear_pointer(&page->invalid_groups, g_hash_table_destroy);
g_hash_table_destroy(page->fields);
@@ -162,6 +162,7 @@
static void
purple_request_page_init(PurpleRequestPage *page) {
+ page->groups = g_ptr_array_new_with_free_func(g_object_unref);
page->fields = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
page->invalid_groups = g_hash_table_new(g_direct_hash, g_direct_equal);
}
@@ -207,8 +208,8 @@
g_return_if_fail(PURPLE_IS_REQUEST_PAGE(page));
g_return_if_fail(PURPLE_IS_REQUEST_GROUP(group));
- position = g_list_length(page->groups);
- page->groups = g_list_append(page->groups, group);
+ position = page->groups->len;
+ g_ptr_array_add(page->groups, group);
purple_request_page_notify_group_cb(G_OBJECT(group), NULL, page);
g_signal_connect(group, "notify::valid",