--- a/ChangeLog.API Sat Dec 21 21:51:21 2019 -0500
+++ b/ChangeLog.API Sun Dec 22 04:09:38 2019 -0500
@@ -473,6 +473,8 @@
* purple_util_get_image_checksum. Use
g_compute_checksum_for_data(G_CHECKSUM_SHA1, ...), instead.
+ * purple_xfer_get_ui_data and purple_xfer_set_ui_data. Use + GObject data functions instead. * purple_xfer_update_progress
* PurpleCertificateVerificationStatus.PURPLE_CERTIFICATE_INVALID
* PurpleConnectionUiOps.report_disconnect_reason
--- a/finch/gntxfer.c Sat Dec 21 21:51:21 2019 -0500
+++ b/finch/gntxfer.c Sun Dec 22 04:09:38 2019 -0500
@@ -55,12 +55,12 @@
static PurpleGntXferDialog *xfer_dialog = NULL;
+#define UI_DATA "finch-ui-data" gint64 last_updated_time;
gboolean notified; /* Has the completion of the transfer been notified? */
@@ -256,7 +256,7 @@
for (iter = purple_xfers_get_all(); iter; iter = iter->next) {
PurpleXfer *xfer = (PurpleXfer *)iter->data;
- PurpleGntXferUiData *data = purple_xfer_get_ui_data(xfer);
+ PurpleGntXferUiData *data = g_object_get_data(G_OBJECT(xfer), UI_DATA); finch_xfer_dialog_add_xfer(xfer);
finch_xfer_dialog_update_xfer(xfer);
@@ -296,7 +296,7 @@
- data = purple_xfer_get_ui_data(xfer);
+ data = g_object_get_data(G_OBJECT(xfer), UI_DATA); finch_xfer_dialog_show();
@@ -334,7 +334,7 @@
g_return_if_fail(xfer_dialog != NULL);
g_return_if_fail(xfer != NULL);
- data = purple_xfer_get_ui_data(xfer);
+ data = g_object_get_data(G_OBJECT(xfer), UI_DATA); @@ -364,7 +364,7 @@
g_return_if_fail(xfer_dialog != NULL);
g_return_if_fail(xfer != NULL);
- data = purple_xfer_get_ui_data(xfer);
+ data = g_object_get_data(G_OBJECT(xfer), UI_DATA); @@ -414,11 +414,10 @@
g_return_if_fail(xfer_dialog != NULL);
g_return_if_fail(xfer != NULL);
- if ((data = purple_xfer_get_ui_data(xfer)) == NULL)
+ data = g_object_get_data(G_OBJECT(xfer), UI_DATA); + if (data == NULL || !data->in_list || data->notified) {
- if (data->in_list == FALSE || data->notified)
current_time = g_get_monotonic_time();
if (((current_time - data->last_updated_time) < G_USEC_PER_SEC) &&
@@ -471,20 +470,7 @@
/* This is where we're setting xfer's "ui_data" for the first time. */
data = g_new0(PurpleGntXferUiData, 1);
- purple_xfer_set_ui_data(xfer, data);
-finch_xfer_destroy(PurpleXfer *xfer)
- PurpleGntXferUiData *data;
- data = purple_xfer_get_ui_data(xfer);
- purple_xfer_set_ui_data(xfer, NULL);
+ g_object_set_data_full(G_OBJECT(xfer), UI_DATA, data, g_free); @@ -525,7 +511,7 @@
static PurpleXferUiOps ops =
--- a/libpurple/xfer.c Sat Dec 21 21:51:21 2019 -0500
+++ b/libpurple/xfer.c Sun Dec 22 04:09:38 2019 -0500
@@ -73,7 +73,6 @@
PurpleXferStatus status; /* File Transfer's status. */
- gpointer ui_data; /* UI-specific data */
PurpleXferUiOps *ui_ops; /* UI-specific operations. */
@@ -116,7 +115,6 @@
@@ -1929,30 +1927,6 @@
g_signal_emit(xfer, signals[SIG_ADD_THUMBNAIL], 0, formats, NULL);
-void purple_xfer_set_ui_data(PurpleXfer *xfer, gpointer ui_data)
- PurpleXferPrivate *priv = NULL;
- g_return_if_fail(PURPLE_IS_XFER(xfer));
- priv = purple_xfer_get_instance_private(xfer);
- priv->ui_data = ui_data;
- g_object_notify_by_pspec(G_OBJECT(xfer), properties[PROP_UI_DATA]);
-gpointer purple_xfer_get_ui_data(PurpleXfer *xfer)
- PurpleXferPrivate *priv = NULL;
- g_return_val_if_fail(PURPLE_IS_XFER(xfer), NULL);
- priv = purple_xfer_get_instance_private(xfer);
/**************************************************************************
**************************************************************************/
@@ -2000,9 +1974,6 @@
purple_xfer_set_status(xfer, g_value_get_enum(value));
- purple_xfer_set_ui_data(xfer, g_value_get_pointer(value));
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
@@ -2067,9 +2038,6 @@
g_value_set_double(value, purple_xfer_get_progress(xfer));
- g_value_set_pointer(value, purple_xfer_get_ui_data(xfer));
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
@@ -2249,10 +2217,6 @@
"The current progress of the file transfer.", -1.0, 1.0, -1.0,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- properties[PROP_UI_DATA] = g_param_spec_pointer("ui-data", "UI Data",
- "The UI specific data for this xfer",
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
g_object_class_install_properties(obj_class, PROP_LAST, properties);
--- a/libpurple/xfer.h Sat Dec 21 21:51:21 2019 -0500
+++ b/libpurple/xfer.h Sun Dec 22 04:09:38 2019 -0500
@@ -749,27 +749,6 @@
void purple_xfer_prepare_thumbnail(PurpleXfer *xfer, const gchar *formats);
- * purple_xfer_set_ui_data:
- * @xfer: The file transfer.
- * @ui_data: A pointer to associate with this file transfer.
- * Set the UI data associated with this file transfer.
-void purple_xfer_set_ui_data(PurpleXfer *xfer, gpointer ui_data);
- * purple_xfer_get_ui_data:
- * @xfer: The file transfer.
- * Get the UI data associated with this file transfer.
- * Returns: The UI data associated with this file transfer. This is a
- * convenience field provided to the UIs--it is not
- * used by the libpurple core.
-gpointer purple_xfer_get_ui_data(PurpleXfer *xfer);
/**************************************************************************/
/* File Transfer Subsystem API */
/**************************************************************************/
--- a/pidgin/gtkxfer.c Sat Dec 21 21:51:21 2019 -0500
+++ b/pidgin/gtkxfer.c Sun Dec 22 04:09:38 2019 -0500
@@ -46,8 +46,6 @@
PurpleXfer *selected_xfer;
@@ -78,14 +76,12 @@
G_DEFINE_TYPE(PidginXferDialog, pidgin_xfer_dialog, GTK_TYPE_DIALOG);
+#define UI_DATA "pidgin-ui-data" gint64 last_updated_time;
static PidginXferDialog *xfer_dialog = NULL;
@@ -237,7 +233,7 @@
if (dialog == NULL || xfer == NULL)
- data = purple_xfer_get_ui_data(xfer);
+ data = g_object_get_data(G_OBJECT(xfer), UI_DATA); get_xfer_info_strings(xfer, &kbsec, &time_elapsed, &time_remaining);
@@ -695,7 +691,7 @@
- data = purple_xfer_get_ui_data(xfer);
+ data = g_object_get_data(G_OBJECT(xfer), UI_DATA); pidgin_xfer_dialog_show(dialog);
@@ -729,8 +725,6 @@
- dialog->num_transfers++;
ensure_row_selected(dialog);
update_title_progress(dialog);
@@ -744,7 +738,7 @@
g_return_if_fail(dialog != NULL);
g_return_if_fail(xfer != NULL);
- data = purple_xfer_get_ui_data(xfer);
+ data = g_object_get_data(G_OBJECT(xfer), UI_DATA); @@ -756,8 +750,6 @@
gtk_list_store_remove(GTK_LIST_STORE(dialog->model), &data->iter);
- dialog->num_transfers--;
ensure_row_selected(dialog);
update_title_progress(dialog);
@@ -774,7 +766,7 @@
g_return_if_fail(dialog != NULL);
g_return_if_fail(xfer != NULL);
- data = purple_xfer_get_ui_data(xfer);
+ data = g_object_get_data(G_OBJECT(xfer), UI_DATA); @@ -789,7 +781,7 @@
- data = purple_xfer_get_ui_data(xfer);
+ data = g_object_get_data(G_OBJECT(xfer), UI_DATA); update_detailed_info(dialog, xfer);
update_title_progress(dialog);
@@ -820,11 +812,10 @@
g_return_if_fail(dialog != NULL);
g_return_if_fail(xfer != NULL);
- if ((data = purple_xfer_get_ui_data(xfer)) == NULL)
+ data = g_object_get_data(G_OBJECT(xfer), UI_DATA); + if (data == NULL || data->in_list == FALSE) {
- if (data->in_list == FALSE)
current_time = g_get_monotonic_time();
if (((current_time - data->last_updated_time) < G_USEC_PER_SEC) &&
@@ -969,26 +960,13 @@
/* This is where we're setting xfer's "ui_data" for the first time. */
data = g_new0(PidginXferUiData, 1);
- purple_xfer_set_ui_data(xfer, data);
+ g_object_set_data_full(G_OBJECT(xfer), UI_DATA, data, g_free); g_signal_connect(xfer, "add-thumbnail",
G_CALLBACK(pidgin_xfer_add_thumbnail), NULL);
-pidgin_xfer_destroy(PurpleXfer *xfer)
- PidginXferUiData *data;
- data = purple_xfer_get_ui_data(xfer);
- purple_xfer_set_ui_data(xfer, NULL);
pidgin_xfer_progress_notify(PurpleXfer *xfer, G_GNUC_UNUSED GParamSpec *pspec,
G_GNUC_UNUSED gpointer data)
@@ -1024,7 +1002,7 @@
static PurpleXferUiOps ops =