diff options
author | Elliott Sales de Andrade <quantum.analyst@gmail.com> | 2023-03-20 23:04:04 -0500 |
---|---|---|
committer | Elliott Sales de Andrade <quantum.analyst@gmail.com> | 2023-03-20 23:04:04 -0500 |
commit | 5cf7c80f07eb577edc00b42f8586ad80d9eccee8 (patch) | |
tree | 0f7cfca2c38ed492b945eb6142e7a887e9e82aef | |
parent | e11dd1f2dd8b2325bbc37f6e20841635ce1cb847 (diff) | |
download | pidgin-5cf7c80f07eb577edc00b42f8586ad80d9eccee8.tar.gz |
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/
-rw-r--r-- | libpurple/purplerequestgroup.c | 15 | ||||
-rw-r--r-- | 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", |