--- a/libpurple/protocols/jabber/xdata.c Fri Mar 17 00:52:55 2023 -0500
+++ b/libpurple/protocols/jabber/xdata.c Fri Mar 17 01:20:18 2023 -0500
@@ -53,33 +53,56 @@
gpointer user_data = data->user_data;
JabberStream *js = data->js;
char *actionhandle = NULL;
gboolean hasActions = (data->actions != NULL);
purple_xmlnode_set_namespace(result, "jabber:x:data");
purple_xmlnode_set_attrib(result, "type", "submit");
- for(groups = purple_request_page_get_groups(page); groups; groups = groups->next) {
- if(groups->data == data->actiongroup) {
- for(flds = purple_request_group_get_fields(groups->data); flds; flds = flds->next) {
- PurpleRequestField *field = flds->data;
- PurpleRequestFieldChoice *choice = PURPLE_REQUEST_FIELD_CHOICE(field);
- const char *id = purple_request_field_get_id(field);
+ n_groups = g_list_model_get_n_items(G_LIST_MODEL(page)); + for(guint group_index = 0; group_index < n_groups; group_index++) { + PurpleRequestGroup *group = NULL; + group = g_list_model_get_item(G_LIST_MODEL(page), group_index); + n_fields = g_list_model_get_n_items(G_LIST_MODEL(group)); + if(group == data->actiongroup) { + for(guint field_index = 0; field_index < n_fields; field_index++) { + PurpleRequestField *field = NULL; + PurpleRequestFieldChoice *choice = NULL; - if(!purple_strequal(id, "libpurple:jabber:xdata:actions"))
+ field = g_list_model_get_item(G_LIST_MODEL(group), field_index); + choice = PURPLE_REQUEST_FIELD_CHOICE(field); + id = purple_request_field_get_id(field); + if(!purple_strequal(id, "libpurple:jabber:xdata:actions")) { handleindex = GPOINTER_TO_INT(purple_request_field_choice_get_value(choice));
actionhandle = g_strdup(g_list_nth_data(data->actions, handleindex));
- for(flds = purple_request_group_get_fields(groups->data); flds; flds = flds->next) {
+ for(guint field_index = 0; field_index < n_fields; field_index++) { PurpleXmlNode *fieldnode, *valuenode;
- PurpleRequestField *field = flds->data;
- const char *id = purple_request_field_get_id(field);
- jabber_x_data_field_type type = GPOINTER_TO_INT(g_hash_table_lookup(data->fields, id));
+ PurpleRequestField *field = NULL; + jabber_x_data_field_type type; + field = g_list_model_get_item(G_LIST_MODEL(group), field_index); + id = purple_request_field_get_id(field); + type = GPOINTER_TO_INT(g_hash_table_lookup(data->fields, id)); case JABBER_X_DATA_TEXT_SINGLE:
@@ -147,7 +170,11 @@
case JABBER_X_DATA_IGNORE:
g_hash_table_destroy(data->fields);