--- a/libpurple/meson.build Fri Mar 10 17:37:15 2023 -0600
+++ b/libpurple/meson.build Fri Mar 10 17:42:23 2023 -0600
@@ -100,6 +100,7 @@
'request/purplerequestfieldaccount.c',
'request/purplerequestfieldbool.c',
'request/purplerequestfieldchoice.c',
+ 'request/purplerequestfielddatasheet.c', 'request/purplerequestfieldimage.c',
'request/purplerequestfieldint.c',
'request/purplerequestfieldlabel.c',
@@ -231,6 +232,7 @@
'request/purplerequestfieldaccount.h',
'request/purplerequestfieldbool.h',
'request/purplerequestfieldchoice.h',
+ 'request/purplerequestfielddatasheet.h', 'request/purplerequestfieldimage.h',
'request/purplerequestfieldint.h',
'request/purplerequestfieldlabel.h',
--- a/libpurple/purplerequestfield.c Fri Mar 10 17:37:15 2023 -0600
+++ b/libpurple/purplerequestfield.c Fri Mar 10 17:42:23 2023 -0600
@@ -40,12 +40,6 @@
- PurpleRequestDatasheet *sheet;
@@ -189,10 +183,6 @@
- if(priv->type == PURPLE_REQUEST_FIELD_DATASHEET) {
- purple_request_datasheet_free(priv->u.datasheet.sheet);
G_OBJECT_CLASS(purple_request_field_parent_class)->finalize(obj);
@@ -624,34 +614,3 @@
-purple_request_field_datasheet_new(const char *id,
- const gchar *text, PurpleRequestDatasheet *sheet)
- PurpleRequestField *field;
- PurpleRequestFieldPrivate *priv = NULL;
- g_return_val_if_fail(id != NULL, NULL);
- g_return_val_if_fail(sheet != NULL, NULL);
- field = purple_request_field_new(id, text, PURPLE_REQUEST_FIELD_DATASHEET);
- priv = purple_request_field_get_instance_private(field);
- priv->u.datasheet.sheet = sheet;
-PurpleRequestDatasheet *
-purple_request_field_datasheet_get_sheet(PurpleRequestField *field)
- PurpleRequestFieldPrivate *priv = NULL;
- g_return_val_if_fail(PURPLE_IS_REQUEST_FIELD(field), NULL);
- priv = purple_request_field_get_instance_private(field);
- g_return_val_if_fail(priv->type == PURPLE_REQUEST_FIELD_DATASHEET, NULL);
- return priv->u.datasheet.sheet;
--- a/libpurple/purplerequestfield.h Fri Mar 10 17:37:15 2023 -0600
+++ b/libpurple/purplerequestfield.h Fri Mar 10 17:42:23 2023 -0600
@@ -64,14 +64,12 @@
* PurpleRequestFieldType:
* @PURPLE_REQUEST_FIELD_NONE: No field.
- * @PURPLE_REQUEST_FIELD_DATASHEET: Datasheet field.
PURPLE_REQUEST_FIELD_NONE,
- PURPLE_REQUEST_FIELD_DATASHEET
} PurpleRequestFieldType;
@@ -305,34 +303,6 @@
gboolean purple_request_field_is_sensitive(PurpleRequestField *field);
/**************************************************************************/
-/* Datasheet Field API */
-/**************************************************************************/
- * purple_request_field_datasheet_new:
- * @text: The label of the field, may be %NULL.
- * @sheet: The datasheet.
- * Creates a datasheet item field.
- * Returns: (transfer full): The new field.
-PurpleRequestField *purple_request_field_datasheet_new(const char *id,
- const gchar *text, PurpleRequestDatasheet *sheet);
- * purple_request_field_datasheet_get_sheet:
- * Returns a datasheet for a field.
- * Returns: (transfer none): The datasheet object.
-PurpleRequestDatasheet *purple_request_field_datasheet_get_sheet(
- PurpleRequestField *field);
-/**************************************************************************/
/* Validators for request fields. */
/**************************************************************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/request/purplerequestfielddatasheet.c Fri Mar 10 17:42:23 2023 -0600
@@ -0,0 +1,153 @@
+ * 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 "purplerequestfield.h" +#include "purplerequestfielddatasheet.h" +struct _PurpleRequestFieldDatasheet { + PurpleRequestField parent; + PurpleRequestDatasheet *sheet; +static GParamSpec *properties[N_PROPERTIES] = {NULL, }; +/****************************************************************************** + *****************************************************************************/ +purple_request_field_datasheet_set_sheet(PurpleRequestFieldDatasheet *field, + PurpleRequestDatasheet *sheet) + g_clear_pointer(&field->sheet, purple_request_datasheet_free); + g_object_notify_by_pspec(G_OBJECT(field), properties[PROP_SHEET]); +/****************************************************************************** + * GObject Implementation + *****************************************************************************/ +G_DEFINE_TYPE(PurpleRequestFieldDatasheet, purple_request_field_datasheet, + PURPLE_TYPE_REQUEST_FIELD) +purple_request_field_datasheet_get_property(GObject *obj, guint param_id, + GValue *value, GParamSpec *pspec) + PurpleRequestFieldDatasheet *field = PURPLE_REQUEST_FIELD_DATASHEET(obj); + g_value_set_pointer(value, + purple_request_field_datasheet_get_sheet(field)); + G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec); +purple_request_field_datasheet_set_property(GObject *obj, guint param_id, + PurpleRequestFieldDatasheet *field = PURPLE_REQUEST_FIELD_DATASHEET(obj); + purple_request_field_datasheet_set_sheet(field, + g_value_get_pointer(value)); + G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec); +purple_request_field_datasheet_finalize(GObject *obj) { + PurpleRequestFieldDatasheet *field = PURPLE_REQUEST_FIELD_DATASHEET(obj); + g_clear_pointer(&field->sheet, purple_request_datasheet_free); + G_OBJECT_CLASS(purple_request_field_datasheet_parent_class)->finalize(obj); +purple_request_field_datasheet_init(G_GNUC_UNUSED PurpleRequestFieldDatasheet *field) { +purple_request_field_datasheet_class_init(PurpleRequestFieldDatasheetClass *klass) { + GObjectClass *obj_class = G_OBJECT_CLASS(klass); + obj_class->finalize = purple_request_field_datasheet_finalize; + obj_class->get_property = purple_request_field_datasheet_get_property; + obj_class->set_property = purple_request_field_datasheet_set_property; + * PurpleRequestFieldDatasheet:sheet: + * The datasheet of the field. + properties[PROP_SHEET] = g_param_spec_pointer( + "The datasheet of the field.", + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); + g_object_class_install_properties(obj_class, N_PROPERTIES, properties); +/****************************************************************************** + *****************************************************************************/ +purple_request_field_datasheet_new(const char *id, const char *text, + PurpleRequestDatasheet *sheet) + g_return_val_if_fail(id != NULL, NULL); + g_return_val_if_fail(sheet != NULL, NULL); + return g_object_new(PURPLE_TYPE_REQUEST_FIELD_DATASHEET, +PurpleRequestDatasheet * +purple_request_field_datasheet_get_sheet(PurpleRequestFieldDatasheet *field) { + g_return_val_if_fail(PURPLE_IS_REQUEST_FIELD_DATASHEET(field), NULL); --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/request/purplerequestfielddatasheet.h Fri Mar 10 17:42:23 2023 -0600
@@ -0,0 +1,77 @@
+ * 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_FIELD_DATASHEET_H +#define PURPLE_REQUEST_FIELD_DATASHEET_H +#include <glib-object.h> +typedef struct _PurpleRequestField PurpleRequestField; +#include "request-datasheet.h" +#define PURPLE_DEFAULT_ACTION_NONE -1 +#define PURPLE_TYPE_REQUEST_FIELD_DATASHEET (purple_request_field_datasheet_get_type()) +G_DECLARE_FINAL_TYPE(PurpleRequestFieldDatasheet, purple_request_field_datasheet, + PURPLE, REQUEST_FIELD_DATASHEET, PurpleRequestField) + * purple_request_field_datasheet_new: + * @text: The label of the field, may be %NULL. + * @sheet: The datasheet. + * Creates a datasheet item field. + * Returns: (transfer full): The new field. +PurpleRequestField *purple_request_field_datasheet_new(const char *id, const gchar *text, PurpleRequestDatasheet *sheet); + * purple_request_field_datasheet_get_sheet: + * Returns a datasheet for a field. + * Returns: (transfer none): The datasheet object. +PurpleRequestDatasheet *purple_request_field_datasheet_get_sheet(PurpleRequestFieldDatasheet *field); +#endif /* PURPLE_REQUEST_FIELD_DATASHEET_H */ --- a/pidgin/gtkrequest.c Fri Mar 10 17:37:15 2023 -0600
+++ b/pidgin/gtkrequest.c Fri Mar 10 17:42:23 2023 -0600
@@ -1772,6 +1772,7 @@
create_datasheet_field(PurpleRequestField *field, GtkSizeGroup *buttons_sg)
+ PurpleRequestFieldDatasheet *dfield = PURPLE_REQUEST_FIELD_DATASHEET(field); PurpleRequestDatasheet *sheet;
@@ -1785,7 +1786,7 @@
- sheet = purple_request_field_datasheet_get_sheet(field);
+ sheet = purple_request_field_datasheet_get_sheet(dfield); main_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
col_count = purple_request_datasheet_get_column_count(sheet);
@@ -2044,12 +2045,10 @@
for (fl = field_list; fl != NULL; fl = fl->next)
PurpleRequestField *field = PURPLE_REQUEST_FIELD(fl->data);
- PurpleRequestFieldType type;
- type = purple_request_field_get_field_type(field);
- if (type == PURPLE_REQUEST_FIELD_DATASHEET)
+ if(PURPLE_IS_REQUEST_FIELD_DATASHEET(field)) { contains_resizable = TRUE;
if(PURPLE_IS_REQUEST_FIELD_LABEL(field)) {
@@ -2089,7 +2088,6 @@
PurpleRequestField *field = PURPLE_REQUEST_FIELD(fl->data);
- PurpleRequestFieldType type;
GtkWidget *widget = NULL;
@@ -2099,7 +2097,6 @@
- type = purple_request_field_get_field_type(field);
field_label = pidgin_request_escape(cpar,
purple_request_field_get_label(field));
@@ -2160,10 +2157,11 @@
widget = create_image_field(field);
} else if(PURPLE_IS_REQUEST_FIELD_ACCOUNT(field)) {
widget = create_account_field(field);
- } else if (type == PURPLE_REQUEST_FIELD_DATASHEET)
+ } else if(PURPLE_IS_REQUEST_FIELD_DATASHEET(field)) { widget = create_datasheet_field(field, datasheet_buttons_sg);
gtk_widget_set_sensitive(widget,