finch/gntxfer.c

changeset 40260
663b8a40dad5
parent 40258
263f9375fc8d
child 40261
d26ef8ea193f
--- 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
 };
 
 /**************************************************************************

mercurial