From 5cf7c80f07eb577edc00b42f8586ad80d9eccee8 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Mon, 20 Mar 2023 23:04:04 -0500 Subject: 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/ --- libpurple/purplerequestgroup.c | 15 ++++++++------- libpurple/purplerequestpage.c | 15 ++++++++------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/libpurple/purplerequestgroup.c b/libpurple/purplerequestgroup.c index 21bb48db46..ae2dd038be 100644 --- a/libpurple/purplerequestgroup.c +++ b/libpurple/purplerequestgroup.c @@ -29,7 +29,7 @@ struct _PurpleRequestGroup { char *title; - GList *fields; + GPtrArray *fields; GHashTable *invalid_fields; }; @@ -89,7 +89,7 @@ static guint 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 @@ purple_request_group_get_item(GListModel *model, guint index) { 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 @@ purple_request_group_finalize(GObject *obj) { 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 @@ purple_request_group_finalize(GObject *obj) { 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 @@ purple_request_group_add_field(PurpleRequestGroup *group, 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", diff --git a/libpurple/purplerequestpage.c b/libpurple/purplerequestpage.c index 9aee11407c..7c62b299d5 100644 --- a/libpurple/purplerequestpage.c +++ b/libpurple/purplerequestpage.c @@ -33,7 +33,7 @@ struct _PurpleRequestPage { GObject parent; - GList *groups; + GPtrArray *groups; GHashTable *invalid_groups; GHashTable *fields; @@ -103,7 +103,7 @@ static guint 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 @@ purple_request_page_get_item(GListModel *model, guint index) { 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 @@ static void 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 @@ purple_request_page_finalize(GObject *obj) { 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 @@ purple_request_page_add_group(PurpleRequestPage *page, 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", -- cgit v1.2.1