Split PurpleRequestFieldGroup into its own files
As before, this uses `hg cp`, so it _looks_ like a bunch of deletion.
Again, there's a bit of private API for the cross-struct access, which should go away later.
I also dropped 'field' from the file name, as it seems like there's no need to have that there in the final class name.
I did not do any other API changes to make this a simpler review.
Testing Done:
Compiled and opened Request Fields from the Demo.
Reviewed at https://reviews.imfreedom.org/r/2316/
--- a/libpurple/meson.build Sun Mar 05 01:58:03 2023 -0600
+++ b/libpurple/meson.build Sun Mar 05 02:11:09 2023 -0600
@@ -85,6 +85,7 @@
'purpleprotocolwhiteboard.c',
+ 'purplerequestgroup.c', 'purplesqlitehistoryadapter.c',
@@ -191,6 +192,7 @@
'purpleprotocolwhiteboard.h',
+ 'purplerequestgroup.h', 'purplesqlitehistoryadapter.h',
--- a/libpurple/purpleprivate.h Sun Mar 05 01:58:03 2023 -0600
+++ b/libpurple/purpleprivate.h Sun Mar 05 02:11:09 2023 -0600
@@ -338,6 +338,10 @@
G_GNUC_INTERNAL void purple_account_set_enabled_plain(PurpleAccount *account, gboolean enabled);
+G_GNUC_INTERNAL void _purple_request_field_list_add_field(PurpleRequestFields *fields, PurpleRequestField *field); +G_GNUC_INTERNAL void _purple_request_field_list_set_field_required(PurpleRequestFields *fields, PurpleRequestField *field, gboolean required); +G_GNUC_INTERNAL void _purple_request_field_list_set_field_validator(PurpleRequestFields *fields, PurpleRequestField *field, gboolean validator); +G_GNUC_INTERNAL void _purple_request_field_group_set_field_list(PurpleRequestFieldGroup *group, PurpleRequestFields *fields); G_GNUC_INTERNAL void _purple_request_field_set_group(PurpleRequestField *field, PurpleRequestFieldGroup *group);
G_GNUC_INTERNAL void _purple_request_field_group_set_field_required(PurpleRequestFieldGroup *group, PurpleRequestField *field, gboolean required);
G_GNUC_INTERNAL void _purple_request_field_group_set_field_validator(PurpleRequestFieldGroup *group, PurpleRequestField *field, gboolean validator);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purplerequestgroup.c Sun Mar 05 02:11:09 2023 -0600
@@ -0,0 +1,131 @@
+ * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA +#include <glib/gi18n-lib.h> +#include "purplerequestgroup.h" +#include "purpleprivate.h" +struct _PurpleRequestFieldGroup + PurpleRequestFields *fields_list; +PurpleRequestFieldGroup * +purple_request_field_group_new(const char *title) + PurpleRequestFieldGroup *group; + group = g_new0(PurpleRequestFieldGroup, 1); + group->title = g_strdup(title); +purple_request_field_group_destroy(PurpleRequestFieldGroup *group) + g_return_if_fail(group != NULL); + g_list_free_full(group->fields, + (GDestroyNotify)purple_request_field_destroy); +_purple_request_field_group_set_field_list(PurpleRequestFieldGroup *group, + PurpleRequestFields *fields) + g_return_if_fail(group != NULL); + group->fields_list = fields; +_purple_request_field_group_set_field_required(PurpleRequestFieldGroup *group, + PurpleRequestField *field, + g_return_if_fail(group != NULL); + _purple_request_field_list_set_field_required(group->fields_list, field, +_purple_request_field_group_set_field_validator(PurpleRequestFieldGroup *group, + PurpleRequestField *field, + g_return_if_fail(group != NULL); + _purple_request_field_list_set_field_validator(group->fields_list, field, +purple_request_field_group_add_field(PurpleRequestFieldGroup *group, + PurpleRequestField *field) + g_return_if_fail(group != NULL); + g_return_if_fail(field != NULL); + group->fields = g_list_append(group->fields, field); + if(group->fields_list != NULL) { + _purple_request_field_list_add_field(group->fields_list, field); + _purple_request_field_set_group(field, group); +purple_request_field_group_get_title(const PurpleRequestFieldGroup *group) + g_return_val_if_fail(group != NULL, NULL); +purple_request_field_group_get_fields(const PurpleRequestFieldGroup *group) + g_return_val_if_fail(group != NULL, NULL); +purple_request_field_group_get_fields_list(const PurpleRequestFieldGroup *group) + g_return_val_if_fail(group != NULL, NULL); + return group->fields_list; --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purplerequestgroup.h Sun Mar 05 02:11:09 2023 -0600
@@ -0,0 +1,109 @@
+ * Purple - Internet Messaging Library + * Copyright (C) Pidgin Developers <devel@pidgin.im> + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <https://www.gnu.org/licenses/>. +#if !defined(PURPLE_GLOBAL_HEADER_INSIDE) && !defined(PURPLE_COMPILATION) +# error "only <purple.h> may be included directly" +#ifndef PURPLE_REQUEST_GROUP_H +#define PURPLE_REQUEST_GROUP_H +#include <glib-object.h> + * PurpleRequestFieldGroup: + * A group of fields with a title. +typedef struct _PurpleRequestFieldGroup PurpleRequestFieldGroup; +#include "purplerequestfield.h" + * purple_request_field_group_new: + * @title: The optional title to give the group. + * Creates a fields group with an optional title. + * Returns: (transfer full): A new fields group +PurpleRequestFieldGroup *purple_request_field_group_new(const char *title); + * purple_request_field_group_destroy: + * @group: The group to destroy. + * Destroys a fields group. +void purple_request_field_group_destroy(PurpleRequestFieldGroup *group); + * purple_request_field_group_add_field: + * @group: The group to add the field to. + * @field: The field to add to the group. + * Adds a field to the group. +void purple_request_field_group_add_field(PurpleRequestFieldGroup *group, + PurpleRequestField *field); + * purple_request_field_group_get_title: + * Returns the title of a fields group. + * Returns: The title, if set. +const char *purple_request_field_group_get_title( + const PurpleRequestFieldGroup *group); + * purple_request_field_group_get_fields: + * Returns a list of all fields in a group. + * Returns: (element-type PurpleRequestField) (transfer none): The list of fields in the group. +GList *purple_request_field_group_get_fields( + const PurpleRequestFieldGroup *group); + * purple_request_field_group_get_fields_list: + * Returns a list of all fields in a group. + * Returns: (transfer none): The list of fields in the group. +PurpleRequestFields *purple_request_field_group_get_fields_list( + const PurpleRequestFieldGroup *group); +#endif /* PURPLE_REQUEST_GROUP_H */ --- a/libpurple/request.c Sun Mar 05 01:58:03 2023 -0600
+++ b/libpurple/request.c Sun Mar 05 02:11:09 2023 -0600
@@ -59,15 +59,6 @@
-struct _PurpleRequestFieldGroup
- PurpleRequestFields *fields_list;
struct _PurpleRequestCommonParameters {
PurpleConversation *conv;
@@ -395,6 +386,54 @@
+_purple_request_field_list_set_field_required(PurpleRequestFields *fields, + PurpleRequestField *field, + g_return_if_fail(fields != NULL); + fields->required_fields = g_list_append(fields->required_fields, field); + fields->required_fields = g_list_remove(fields->required_fields, field); +_purple_request_field_list_set_field_validator(PurpleRequestFields *fields, + PurpleRequestField *field, + g_return_if_fail(fields != NULL); + fields->validated_fields = g_list_remove(fields->validated_fields, field); + fields->validated_fields = g_list_append(fields->validated_fields, +_purple_request_field_list_add_field(PurpleRequestFields *fields, + PurpleRequestField *field) + g_return_if_fail(fields != NULL); + g_hash_table_insert(fields->fields, + g_strdup(purple_request_field_get_id(field)), field); + if(purple_request_field_is_required(field)) { + fields->required_fields = g_list_append(fields->required_fields, + if(purple_request_field_is_validatable(field)) { + fields->validated_fields = g_list_append(fields->validated_fields, purple_request_fields_add_group(PurpleRequestFields *fields,
PurpleRequestFieldGroup *group)
@@ -406,7 +445,7 @@
fields->groups = g_list_append(fields->groups, group);
- group->fields_list = fields;
+ _purple_request_field_group_set_field_list(group, fields); for (l = purple_request_field_group_get_fields(group);
@@ -615,114 +654,6 @@
fields->ui_data = ui_data;
-PurpleRequestFieldGroup *
-purple_request_field_group_new(const char *title)
- PurpleRequestFieldGroup *group;
- group = g_new0(PurpleRequestFieldGroup, 1);
- group->title = g_strdup(title);
-purple_request_field_group_destroy(PurpleRequestFieldGroup *group)
- g_return_if_fail(group != NULL);
- g_list_free_full(group->fields,
- (GDestroyNotify)purple_request_field_destroy);
-_purple_request_field_group_set_field_required(PurpleRequestFieldGroup *group,
- PurpleRequestField *field,
- group->fields_list->required_fields =
- g_list_append(group->fields_list->required_fields,
- group->fields_list->required_fields =
- g_list_remove(group->fields_list->required_fields,
-_purple_request_field_group_set_field_validator(PurpleRequestFieldGroup *group,
- PurpleRequestField *field,
- PurpleRequestFields *flist = group->fields_list;
- flist->validated_fields = g_list_remove(flist->validated_fields, field);
- flist->validated_fields = g_list_append(flist->validated_fields,
-purple_request_field_group_add_field(PurpleRequestFieldGroup *group,
- PurpleRequestField *field)
- g_return_if_fail(group != NULL);
- g_return_if_fail(field != NULL);
- group->fields = g_list_append(group->fields, field);
- if (group->fields_list != NULL)
- g_hash_table_insert(group->fields_list->fields,
- g_strdup(purple_request_field_get_id(field)), field);
- if (purple_request_field_is_required(field))
- group->fields_list->required_fields =
- g_list_append(group->fields_list->required_fields, field);
- if (purple_request_field_is_validatable(field))
- group->fields_list->validated_fields =
- g_list_append(group->fields_list->validated_fields, field);
- _purple_request_field_set_group(field, group);
-purple_request_field_group_get_title(const PurpleRequestFieldGroup *group)
- g_return_val_if_fail(group != NULL, NULL);
-purple_request_field_group_get_fields(const PurpleRequestFieldGroup *group)
- g_return_val_if_fail(group != NULL, NULL);
-purple_request_field_group_get_fields_list(const PurpleRequestFieldGroup *group)
- g_return_val_if_fail(group != NULL, NULL);
- return group->fields_list;
@@ -1006,7 +937,10 @@
PurpleRequestFieldGroup *group = itg->data;
- for (itf = group->fields; itf != NULL; itf = g_list_next(itf)) {
+ for (itf = purple_request_field_group_get_fields(group); + itf = g_list_next(itf)) PurpleRequestField *field = itf->data;
--- a/libpurple/request.h Sun Mar 05 01:58:03 2023 -0600
+++ b/libpurple/request.h Sun Mar 05 02:11:09 2023 -0600
@@ -42,13 +42,6 @@
typedef struct _PurpleRequestFields PurpleRequestFields;
- * PurpleRequestFieldGroup:
- * A group of fields with a title.
-typedef struct _PurpleRequestFieldGroup PurpleRequestFieldGroup;
* PurpleRequestCommonParameters:
* Common parameters for UI operations.
@@ -59,6 +52,7 @@
#include "purpleconversation.h"
+#include "purplerequestgroup.h" #include "purplerequestfield.h"
#include "request-datasheet.h"
@@ -716,71 +710,6 @@
void purple_request_fields_set_ui_data(PurpleRequestFields *fields, gpointer ui_data);
/**************************************************************************/
-/**************************************************************************/
- * purple_request_field_group_new:
- * @title: The optional title to give the group.
- * Creates a fields group with an optional title.
- * Returns: (transfer full): A new fields group
-PurpleRequestFieldGroup *purple_request_field_group_new(const char *title);
- * purple_request_field_group_destroy:
- * @group: The group to destroy.
- * Destroys a fields group.
-void purple_request_field_group_destroy(PurpleRequestFieldGroup *group);
- * purple_request_field_group_add_field:
- * @group: The group to add the field to.
- * @field: The field to add to the group.
- * Adds a field to the group.
-void purple_request_field_group_add_field(PurpleRequestFieldGroup *group,
- PurpleRequestField *field);
- * purple_request_field_group_get_title:
- * Returns the title of a fields group.
- * Returns: The title, if set.
-const char *purple_request_field_group_get_title(
- const PurpleRequestFieldGroup *group);
- * purple_request_field_group_get_fields:
- * Returns a list of all fields in a group.
- * Returns: (element-type PurpleRequestField) (transfer none): The list of fields in the group.
-GList *purple_request_field_group_get_fields(
- const PurpleRequestFieldGroup *group);
- * purple_request_field_group_get_fields_list:
- * Returns a list of all fields in a group.
- * Returns: (transfer none): The list of fields in the group.
-PurpleRequestFields *purple_request_field_group_get_fields_list(
- const PurpleRequestFieldGroup *group);
-/**************************************************************************/
/**************************************************************************/
--- a/po/POTFILES.in Sun Mar 05 01:58:03 2023 -0600
+++ b/po/POTFILES.in Sun Mar 05 02:11:09 2023 -0600
@@ -202,6 +202,7 @@
libpurple/purpleprotocolserver.c
libpurple/purpleprotocolwhiteboard.c
libpurple/purplerequestfield.c
+libpurple/purplerequestgroup.c libpurple/purplesqlitehistoryadapter.c
libpurple/purplewhiteboard.c