Revision: 17189
http://svn.sourceforge.net/gaim/?rev=17189&view=rev
Author: thekingant
Date: 2006-09-07 23:07:19 -0700 (Thu, 07 Sep 2006)
Log Message:
-----------
sf patch #1311539, from Peter McCurdy
Display status of file transfers in window titlebar
Modified Paths:
--------------
trunk/gtk/gtkft.c
Modified: trunk/gtk/gtkft.c
===================================================================
--- trunk/gtk/gtkft.c 2006-09-08 02:19:23 UTC (rev 17188)
+++ trunk/gtk/gtkft.c 2006-09-08 06:07:19 UTC (rev 17189)
@@ -183,6 +183,58 @@
}
static void
+update_title_progress(GaimGtkXferDialog *dialog)
+{
+ gboolean valid;
+ GtkTreeIter iter;
+ int num_active_xfers = 0;
+ guint64 total_bytes_xferred = 0;
+ guint64 total_file_size = 0;
+
+ if (dialog->window == NULL)
+ return;
+
+ valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(dialog->model), &iter);
+
+ /* Find all active transfers */
+ while (valid) {
+ GValue val;
+ GaimXfer *xfer = NULL;
+
+ val.g_type = 0;
+ gtk_tree_model_get_value(GTK_TREE_MODEL(dialog->model),
+ &iter, COLUMN_DATA, &val);
+
+ xfer = g_value_get_pointer(&val);
+ if (gaim_xfer_get_status(xfer) == GAIM_XFER_STATUS_STARTED) {
+ num_active_xfers++;
+ total_bytes_xferred += gaim_xfer_get_bytes_sent(xfer);
+ total_file_size += gaim_xfer_get_size(xfer);
+ }
+
+ valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(dialog->model), &iter);
+ }
+
+ /* Update the title */
+ if (num_active_xfers > 0)
+ {
+ gchar *title;
+ int total_pct = 0;
+
+ if (total_file_size > 0) {
+ total_pct = 100 * total_bytes_xferred / total_file_size;
+ }
+
+ title = g_strdup_printf(_("File Transfers - %d%% of %d files"),
+ total_pct, num_active_xfers);
+ gtk_window_set_title(GTK_WINDOW(dialog->window), title);
+ g_free(title);
+ } else {
+ gtk_window_set_title(GTK_WINDOW(dialog->window), _("File Transfers"));
+ }
+}
+
+static void
update_detailed_info(GaimGtkXferDialog *dialog, GaimXfer *xfer)
{
GaimGtkXferUiData *data;
@@ -531,6 +583,7 @@
gaim_gtkxfer_dialog_hide(dialog);
}
+
/**************************************************************************
* Dialog Building Functions
**************************************************************************/
@@ -929,6 +982,7 @@
dialog->num_transfers++;
ensure_row_selected(dialog);
+ update_title_progress(dialog);
}
void
@@ -959,6 +1013,7 @@
else
ensure_row_selected(dialog);
+ update_title_progress(dialog);
gaim_xfer_unref(xfer);
}
@@ -989,6 +1044,7 @@
data = GAIM_GTKXFER(xfer);
update_detailed_info(dialog, xfer);
+ update_title_progress(dialog);
pixbuf = gtk_widget_render_icon(dialog->window,
GAIM_STOCK_FILE_CANCELED,
@@ -1063,6 +1119,7 @@
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(xfer_dialog->tree));
+ update_title_progress(dialog);
if (xfer == dialog->selected_xfer)
update_detailed_info(xfer_dialog, xfer);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|