From 9d422e8021dfda5d9b5907bebd5b935b45651f22 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Sun, 19 Mar 2023 03:26:38 -0500 Subject: Use GListModel API for request fields in libpurple Testing Done: Compiled only. Reviewed at https://reviews.imfreedom.org/r/2357/ --- libpurple/purpleprivate.h | 1 - libpurple/purplerequestgroup.c | 4 ---- libpurple/purplerequestpage.c | 49 +++++++++++++++++++++++------------------- libpurple/request.c | 34 +++++++++++++++-------------- 4 files changed, 45 insertions(+), 43 deletions(-) (limited to 'libpurple') diff --git a/libpurple/purpleprivate.h b/libpurple/purpleprivate.h index 33f89e490b..eb8d2242f4 100644 --- a/libpurple/purpleprivate.h +++ b/libpurple/purpleprivate.h @@ -338,7 +338,6 @@ void purple_whiteboard_manager_shutdown(void); */ 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); diff --git a/libpurple/purplerequestgroup.c b/libpurple/purplerequestgroup.c index c50b592144..cce466907b 100644 --- a/libpurple/purplerequestgroup.c +++ b/libpurple/purplerequestgroup.c @@ -245,10 +245,6 @@ purple_request_group_add_field(PurpleRequestGroup *group, 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); diff --git a/libpurple/purplerequestpage.c b/libpurple/purplerequestpage.c index eb08023081..f82d8c5d87 100644 --- a/libpurple/purplerequestpage.c +++ b/libpurple/purplerequestpage.c @@ -71,6 +71,26 @@ purple_request_page_notify_group_cb(GObject *obj, } } +static void +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)), + field); + g_object_unref(field); + } +} + /****************************************************************************** * GListModel Implementation *****************************************************************************/ @@ -177,23 +197,12 @@ purple_request_page_new(void) { return g_object_new(PURPLE_TYPE_REQUEST_PAGE, NULL); } -void -_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); -} - void purple_request_page_add_group(PurpleRequestPage *page, PurpleRequestGroup *group) { guint position; - GList *l; - 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 @@ purple_request_page_add_group(PurpleRequestPage *page, g_signal_connect(group, "notify::valid", G_CALLBACK(purple_request_page_notify_group_cb), page); - for (l = purple_request_group_get_fields(group); - l != NULL; - l = l->next) { - - field = l->data; - - g_hash_table_insert(page->fields, - g_strdup(purple_request_field_get_id(field)), - field); - } + model = G_LIST_MODEL(group); + purple_request_page_items_changed_cb(model, 0, 0, + g_list_model_get_n_items(model), + page); + 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); } diff --git a/libpurple/request.c b/libpurple/request.c index 59ab382d8b..85013eedad 100644 --- a/libpurple/request.c +++ b/libpurple/request.c @@ -621,32 +621,34 @@ purple_request_wait_progress(void *ui_handle, gfloat fraction) } static void -purple_request_fields_strip_html(PurpleRequestPage *page) -{ - GList *itg; +purple_request_fields_strip_html(PurpleRequestPage *page) { + guint n_groups; - for (itg = purple_request_page_get_groups(page); - itg != NULL; - itg = g_list_next(itg)) - { - PurpleRequestGroup *group = itg->data; - GList *itf; + 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; + guint n_fields; + + 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 != NULL; - itf = g_list_next(itf)) - { - PurpleRequestField *field = itf->data; - const char *old_label; - gchar *new_label; + 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); } + g_free(new_label); + g_object_unref(field); } + + g_object_unref(group); } } -- cgit v1.2.1