summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElliott Sales de Andrade <quantum.analyst@gmail.com>2023-03-20 23:04:04 -0500
committerElliott Sales de Andrade <quantum.analyst@gmail.com>2023-03-20 23:04:04 -0500
commit5cf7c80f07eb577edc00b42f8586ad80d9eccee8 (patch)
tree0f7cfca2c38ed492b945eb6142e7a887e9e82aef
parente11dd1f2dd8b2325bbc37f6e20841635ce1cb847 (diff)
downloadpidgin-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.c15
-rw-r--r--libpurple/purplerequestpage.c15
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",