pidgin/pidgin

663b8a40dad5
Parents 7ba119b0f75c
Children d26ef8ea193f
Change PurpleXferUiOps.add_xfer to PurpleXfer:visible property.
--- a/ChangeLog.API Sun Dec 22 15:40:59 2019 -0500
+++ b/ChangeLog.API Sun Dec 22 16:35:25 2019 -0500
@@ -473,6 +473,7 @@
* purple_util_get_image_checksum. Use
g_compute_checksum_for_data(G_CHECKSUM_SHA1, ...), instead.
* purple_uts35_to_str
+ * purple_xfer_add
* purple_xfer_get_ui_data and purple_xfer_set_ui_data. Use
GObject data functions instead.
* purple_xfer_update_progress
@@ -484,6 +485,8 @@
* PurpleValue, use GValue instead.
* PurpleXferUiOps.add_thumbnail. Use PurpleXfer::add-thumbnail
instead.
+ * PurpleXferUiOps.add_xfer. Use notify::visible on #PurpleXfer
+ objects instead.
* PurpleXferUiOps.cancel_local and
PurpleXferUiOps.cancel_remote. Use notify::status on
#PurpleXfer objects instead.
--- a/finch/gntxfer.c Sun Dec 22 15:40:59 2019 -0500
+++ b/finch/gntxfer.c Sun Dec 22 16:35:25 2019 -0500
@@ -59,7 +59,6 @@
typedef struct
{
gint64 last_updated_time;
- gboolean in_list;
gboolean notified; /* Has the completion of the transfer been notified? */
@@ -256,8 +255,7 @@
for (iter = purple_xfers_get_all(); iter; iter = iter->next) {
PurpleXfer *xfer = (PurpleXfer *)iter->data;
- PurpleGntXferUiData *data = g_object_get_data(G_OBJECT(xfer), UI_DATA);
- if (data->in_list) {
+ if (purple_xfer_get_visible(xfer)) {
finch_xfer_dialog_add_xfer(xfer);
finch_xfer_dialog_update_xfer(xfer);
gnt_tree_set_selected(GNT_TREE(tree), xfer);
@@ -297,7 +295,6 @@
g_object_ref(xfer);
data = g_object_get_data(G_OBJECT(xfer), UI_DATA);
- data->in_list = TRUE;
finch_xfer_dialog_show();
@@ -329,20 +326,14 @@
void
finch_xfer_dialog_remove_xfer(PurpleXfer *xfer)
{
- PurpleGntXferUiData *data;
-
g_return_if_fail(xfer_dialog != NULL);
g_return_if_fail(xfer != NULL);
- data = g_object_get_data(G_OBJECT(xfer), UI_DATA);
-
- if (data == NULL)
+ if (!purple_xfer_get_visible(xfer)) {
return;
+ }
- if (!data->in_list)
- return;
-
- data->in_list = FALSE;
+ purple_xfer_set_visible(xfer, FALSE);
gnt_tree_remove(GNT_TREE(xfer_dialog->tree), xfer);
@@ -369,8 +360,9 @@
if (data == NULL)
return;
- if (!data->in_list)
+ if (!purple_xfer_get_visible(xfer)) {
return;
+ }
if ((purple_xfer_get_status(xfer) == PURPLE_XFER_STATUS_CANCEL_LOCAL) && (xfer_dialog->auto_clear)) {
finch_xfer_dialog_remove_xfer(xfer);
@@ -415,7 +407,7 @@
g_return_if_fail(xfer != NULL);
data = g_object_get_data(G_OBJECT(xfer), UI_DATA);
- if (data == NULL || !data->in_list || data->notified) {
+ if (data == NULL || !purple_xfer_get_visible(xfer) || data->notified) {
return;
}
@@ -464,16 +456,6 @@
* File Transfer UI Ops
**************************************************************************/
static void
-finch_xfer_new_xfer(PurpleXfer *xfer)
-{
- PurpleGntXferUiData *data;
-
- /* This is where we're setting xfer's "ui_data" for the first time. */
- data = g_new0(PurpleGntXferUiData, 1);
- g_object_set_data_full(G_OBJECT(xfer), UI_DATA, data, g_free);
-}
-
-static void
finch_xfer_progress_notify(PurpleXfer *xfer, G_GNUC_UNUSED GParamSpec *pspec,
G_GNUC_UNUSED gpointer data)
{
@@ -494,25 +476,41 @@
}
static void
-finch_xfer_add_xfer(PurpleXfer *xfer)
+finch_xfer_visible_notify(PurpleXfer *xfer, G_GNUC_UNUSED GParamSpec *pspec,
+ G_GNUC_UNUSED gpointer data)
{
+ if (!purple_xfer_get_visible(xfer)) {
+ return;
+ }
+
if (!xfer_dialog)
finch_xfer_dialog_new();
finch_xfer_dialog_add_xfer(xfer);
gnt_tree_set_selected(GNT_TREE(xfer_dialog->tree), xfer);
+}
+
+static void
+finch_xfer_new_xfer(PurpleXfer *xfer)
+{
+ PurpleGntXferUiData *data;
+
+ /* This is where we're setting xfer's "ui_data" for the first time. */
+ data = g_new0(PurpleGntXferUiData, 1);
+ g_object_set_data_full(G_OBJECT(xfer), UI_DATA, data, g_free);
g_signal_connect(xfer, "notify::progress",
G_CALLBACK(finch_xfer_progress_notify), NULL);
g_signal_connect(xfer, "notify::status",
G_CALLBACK(finch_xfer_status_notify), NULL);
+ g_signal_connect(xfer, "notify::visible",
+ G_CALLBACK(finch_xfer_visible_notify), NULL);
}
static PurpleXferUiOps ops =
{
finch_xfer_new_xfer,
- NULL,
- finch_xfer_add_xfer
+ NULL
};
/**************************************************************************
--- a/libpurple/xfer.c Sun Dec 22 15:40:59 2019 -0500
+++ b/libpurple/xfer.c Sun Dec 22 16:35:25 2019 -0500
@@ -73,6 +73,8 @@
PurpleXferStatus status; /* File Transfer's status. */
+ gboolean visible; /* Hint the UI that the transfer should
+ be visible or not. */
PurpleXferUiOps *ui_ops; /* UI-specific operations. */
/*
@@ -115,6 +117,7 @@
PROP_END_TIME,
PROP_STATUS,
PROP_PROGRESS,
+ PROP_VISIBLE,
PROP_LAST
};
@@ -183,6 +186,19 @@
g_object_notify_by_pspec(G_OBJECT(xfer), properties[PROP_STATUS]);
}
+void
+purple_xfer_set_visible(PurpleXfer *xfer, gboolean visible)
+{
+ PurpleXferPrivate *priv = NULL;
+
+ g_return_if_fail(PURPLE_IS_XFER(xfer));
+
+ priv = purple_xfer_get_instance_private(xfer);
+ priv->visible = visible;
+
+ g_object_notify_by_pspec(G_OBJECT(xfer), properties[PROP_VISIBLE]);
+}
+
static void
purple_xfer_conversation_write_internal(PurpleXfer *xfer,
const char *message, gboolean is_error, gboolean print_thumbnail)
@@ -642,7 +658,7 @@
g_free(msg);
}
- purple_xfer_add(xfer);
+ purple_xfer_set_visible(xfer, TRUE);
klass->init(xfer);
}
@@ -744,6 +760,17 @@
}
gboolean
+purple_xfer_get_visible(PurpleXfer *xfer)
+{
+ PurpleXferPrivate *priv = NULL;
+
+ g_return_val_if_fail(PURPLE_IS_XFER(xfer), FALSE);
+
+ priv = purple_xfer_get_instance_private(xfer);
+ return priv->visible;
+}
+
+gboolean
purple_xfer_is_cancelled(PurpleXfer *xfer)
{
g_return_val_if_fail(PURPLE_IS_XFER(xfer), TRUE);
@@ -1688,19 +1715,6 @@
}
void
-purple_xfer_add(PurpleXfer *xfer)
-{
- PurpleXferUiOps *ui_ops;
-
- g_return_if_fail(PURPLE_IS_XFER(xfer));
-
- ui_ops = purple_xfer_get_ui_ops(xfer);
-
- if (ui_ops != NULL && ui_ops->add_xfer != NULL)
- ui_ops->add_xfer(xfer);
-}
-
-void
purple_xfer_cancel_local(PurpleXfer *xfer)
{
PurpleXferClass *klass = NULL;
@@ -1974,6 +1988,9 @@
case PROP_STATUS:
purple_xfer_set_status(xfer, g_value_get_enum(value));
break;
+ case PROP_VISIBLE:
+ purple_xfer_set_visible(xfer, g_value_get_boolean(value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
break;
@@ -2038,6 +2055,9 @@
case PROP_PROGRESS:
g_value_set_double(value, purple_xfer_get_progress(xfer));
break;
+ case PROP_VISIBLE:
+ g_value_set_boolean(value, purple_xfer_get_visible(xfer));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
break;
@@ -2217,6 +2237,11 @@
"The current progress of the file transfer.", -1.0, 1.0, -1.0,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+ properties[PROP_VISIBLE] = g_param_spec_boolean(
+ "visible", "Visible",
+ "Hint for UIs whether this transfer should be visible.", FALSE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
g_object_class_install_properties(obj_class, PROP_LAST, properties);
/* Signals */
--- a/libpurple/xfer.h Sun Dec 22 15:40:59 2019 -0500
+++ b/libpurple/xfer.h Sun Dec 22 16:35:25 2019 -0500
@@ -92,7 +92,6 @@
* PurpleXferUiOps:
* @new_xfer: UI op that's called after a new transfer is created.
* @destroy: UI op that's called when a transfer is being destroyed.
- * @add_xfer: UI op that's called when a transfer should be added to the UI.
*
* File transfer UI operations.
*
@@ -103,7 +102,6 @@
{
void (*new_xfer)(PurpleXfer *xfer);
void (*destroy)(PurpleXfer *xfer);
- void (*add_xfer)(PurpleXfer *xfer);
};
/**
@@ -268,6 +266,20 @@
PurpleXferStatus purple_xfer_get_status(PurpleXfer *xfer);
/**
+ * purple_xfer_get_visible:
+ * @xfer: The file transfer.
+ *
+ * Returns whether the UI should show the file transfer in its listing.
+ *
+ * Note, this is just a hint for UIs and has no effect internally.
+ *
+ * Returns: The visibility.
+ *
+ * Since: 3.0.0
+ */
+gboolean purple_xfer_get_visible(PurpleXfer *xfer);
+
+/**
* purple_xfer_is_cancelled:
* @xfer: The file transfer.
*
@@ -436,6 +448,19 @@
void purple_xfer_set_status(PurpleXfer *xfer, PurpleXferStatus status);
/**
+ * purple_xfer_set_visible:
+ * @xfer: The file transfer.
+ * @visible: The visibility.
+ *
+ * Sets whether the UI should show the file transfer in its listing.
+ *
+ * Note, this is just a hint for UIs and has no effect internally.
+ *
+ * Since: 3.0.0
+ */
+void purple_xfer_set_visible(PurpleXfer *xfer, gboolean visible);
+
+/**
* purple_xfer_set_message:
* @xfer: The file transfer.
* @message: The message.
@@ -597,15 +622,6 @@
void purple_xfer_end(PurpleXfer *xfer);
/**
- * purple_xfer_add:
- * @xfer: The file transfer.
- *
- * Adds a new file transfer to the list of file transfers. Call this only
- * if you are not using purple_xfer_start.
- */
-void purple_xfer_add(PurpleXfer *xfer);
-
-/**
* purple_xfer_cancel_local:
* @xfer: The file transfer.
*
--- a/pidgin/gtkxfer.c Sun Dec 22 15:40:59 2019 -0500
+++ b/pidgin/gtkxfer.c Sun Dec 22 16:35:25 2019 -0500
@@ -81,7 +81,6 @@
{
GtkTreeIter iter;
gint64 last_updated_time;
- gboolean in_list;
} PidginXferUiData;
static PidginXferDialog *xfer_dialog = NULL;
@@ -692,7 +691,6 @@
g_object_ref(xfer);
data = g_object_get_data(G_OBJECT(xfer), UI_DATA);
- data->in_list = TRUE;
pidgin_xfer_dialog_show(dialog);
@@ -743,10 +741,11 @@
if (data == NULL)
return;
- if (!data->in_list)
+ if (!purple_xfer_get_visible(xfer)) {
return;
+ }
- data->in_list = FALSE;
+ purple_xfer_set_visible(xfer, FALSE);
gtk_list_store_remove(GTK_LIST_STORE(dialog->model), &data->iter);
@@ -771,8 +770,9 @@
if (data == NULL)
return;
- if (!data->in_list)
+ if (!purple_xfer_get_visible(xfer)) {
return;
+ }
if (purple_xfer_get_status(xfer) == PURPLE_XFER_STATUS_CANCEL_LOCAL &&
gtk_toggle_button_get_active(
@@ -813,7 +813,7 @@
g_return_if_fail(xfer != NULL);
data = g_object_get_data(G_OBJECT(xfer), UI_DATA);
- if (data == NULL || data->in_list == FALSE) {
+ if (data == NULL || !purple_xfer_get_visible(xfer)) {
return;
}
@@ -954,19 +954,6 @@
}
static void
-pidgin_xfer_new_xfer(PurpleXfer *xfer)
-{
- PidginXferUiData *data;
-
- /* This is where we're setting xfer's "ui_data" for the first time. */
- data = g_new0(PidginXferUiData, 1);
- 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);
-}
-
-static void
pidgin_xfer_progress_notify(PurpleXfer *xfer, G_GNUC_UNUSED GParamSpec *pspec,
G_GNUC_UNUSED gpointer data)
{
@@ -985,25 +972,43 @@
}
static void
-pidgin_xfer_add_xfer(PurpleXfer *xfer)
+pidgin_xfer_visible_notify(PurpleXfer *xfer, G_GNUC_UNUSED GParamSpec *pspec,
+ G_GNUC_UNUSED gpointer data)
{
+ if (!purple_xfer_get_visible(xfer)) {
+ return;
+ }
+
if (xfer_dialog == NULL) {
xfer_dialog = pidgin_xfer_dialog_new();
}
pidgin_xfer_dialog_add_xfer(xfer_dialog, xfer);
+}
+static void
+pidgin_xfer_new_xfer(PurpleXfer *xfer)
+{
+ PidginXferUiData *data;
+
+ /* This is where we're setting xfer's "ui_data" for the first time. */
+ data = g_new0(PidginXferUiData, 1);
+ 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);
g_signal_connect(xfer, "notify::progress",
G_CALLBACK(pidgin_xfer_progress_notify), NULL);
g_signal_connect(xfer, "notify::status",
G_CALLBACK(pidgin_xfer_status_notify), NULL);
+ g_signal_connect(xfer, "notify::visible",
+ G_CALLBACK(pidgin_xfer_visible_notify), NULL);
}
static PurpleXferUiOps ops =
{
pidgin_xfer_new_xfer,
- NULL,
- pidgin_xfer_add_xfer
+ NULL
};
/**************************************************************************