comparison gtk/gtkft.c @ 14473:0c6e1fecb7a0

[gaim-migrate @ 17189] sf patch #1311539, from Peter McCurdy Display status of file transfers in window titlebar committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Fri, 08 Sep 2006 06:07:19 +0000
parents 2620e491c8f1
children f36ceb3f07db
comparison
equal deleted inserted replaced
14472:34de373e45c1 14473:0c6e1fecb7a0
181 } 181 }
182 } 182 }
183 } 183 }
184 184
185 static void 185 static void
186 update_title_progress(GaimGtkXferDialog *dialog)
187 {
188 gboolean valid;
189 GtkTreeIter iter;
190 int num_active_xfers = 0;
191 guint64 total_bytes_xferred = 0;
192 guint64 total_file_size = 0;
193
194 if (dialog->window == NULL)
195 return;
196
197 valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(dialog->model), &iter);
198
199 /* Find all active transfers */
200 while (valid) {
201 GValue val;
202 GaimXfer *xfer = NULL;
203
204 val.g_type = 0;
205 gtk_tree_model_get_value(GTK_TREE_MODEL(dialog->model),
206 &iter, COLUMN_DATA, &val);
207
208 xfer = g_value_get_pointer(&val);
209 if (gaim_xfer_get_status(xfer) == GAIM_XFER_STATUS_STARTED) {
210 num_active_xfers++;
211 total_bytes_xferred += gaim_xfer_get_bytes_sent(xfer);
212 total_file_size += gaim_xfer_get_size(xfer);
213 }
214
215 valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(dialog->model), &iter);
216 }
217
218 /* Update the title */
219 if (num_active_xfers > 0)
220 {
221 gchar *title;
222 int total_pct = 0;
223
224 if (total_file_size > 0) {
225 total_pct = 100 * total_bytes_xferred / total_file_size;
226 }
227
228 title = g_strdup_printf(_("File Transfers - %d%% of %d files"),
229 total_pct, num_active_xfers);
230 gtk_window_set_title(GTK_WINDOW(dialog->window), title);
231 g_free(title);
232 } else {
233 gtk_window_set_title(GTK_WINDOW(dialog->window), _("File Transfers"));
234 }
235 }
236
237 static void
186 update_detailed_info(GaimGtkXferDialog *dialog, GaimXfer *xfer) 238 update_detailed_info(GaimGtkXferDialog *dialog, GaimXfer *xfer)
187 { 239 {
188 GaimGtkXferUiData *data; 240 GaimGtkXferUiData *data;
189 char *kbsec, *time_elapsed, *time_remaining; 241 char *kbsec, *time_elapsed, *time_remaining;
190 char *status, *utf8; 242 char *status, *utf8;
528 static void 580 static void
529 close_button_cb(GtkButton *button, GaimGtkXferDialog *dialog) 581 close_button_cb(GtkButton *button, GaimGtkXferDialog *dialog)
530 { 582 {
531 gaim_gtkxfer_dialog_hide(dialog); 583 gaim_gtkxfer_dialog_hide(dialog);
532 } 584 }
585
533 586
534 /************************************************************************** 587 /**************************************************************************
535 * Dialog Building Functions 588 * Dialog Building Functions
536 **************************************************************************/ 589 **************************************************************************/
537 static GtkWidget * 590 static GtkWidget *
927 g_free(remaining_str); 980 g_free(remaining_str);
928 981
929 dialog->num_transfers++; 982 dialog->num_transfers++;
930 983
931 ensure_row_selected(dialog); 984 ensure_row_selected(dialog);
985 update_title_progress(dialog);
932 } 986 }
933 987
934 void 988 void
935 gaim_gtkxfer_dialog_remove_xfer(GaimGtkXferDialog *dialog, 989 gaim_gtkxfer_dialog_remove_xfer(GaimGtkXferDialog *dialog,
936 GaimXfer *xfer) 990 GaimXfer *xfer)
957 if (dialog->num_transfers == 0 && !dialog->keep_open) 1011 if (dialog->num_transfers == 0 && !dialog->keep_open)
958 gaim_gtkxfer_dialog_hide(dialog); 1012 gaim_gtkxfer_dialog_hide(dialog);
959 else 1013 else
960 ensure_row_selected(dialog); 1014 ensure_row_selected(dialog);
961 1015
1016 update_title_progress(dialog);
962 gaim_xfer_unref(xfer); 1017 gaim_xfer_unref(xfer);
963 } 1018 }
964 1019
965 void 1020 void
966 gaim_gtkxfer_dialog_cancel_xfer(GaimGtkXferDialog *dialog, 1021 gaim_gtkxfer_dialog_cancel_xfer(GaimGtkXferDialog *dialog,
987 } 1042 }
988 1043
989 data = GAIM_GTKXFER(xfer); 1044 data = GAIM_GTKXFER(xfer);
990 1045
991 update_detailed_info(dialog, xfer); 1046 update_detailed_info(dialog, xfer);
1047 update_title_progress(dialog);
992 1048
993 pixbuf = gtk_widget_render_icon(dialog->window, 1049 pixbuf = gtk_widget_render_icon(dialog->window,
994 GAIM_STOCK_FILE_CANCELED, 1050 GAIM_STOCK_FILE_CANCELED,
995 GTK_ICON_SIZE_MENU, NULL); 1051 GTK_ICON_SIZE_MENU, NULL);
996 1052
1061 g_object_unref(pixbuf); 1117 g_object_unref(pixbuf);
1062 } 1118 }
1063 1119
1064 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(xfer_dialog->tree)); 1120 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(xfer_dialog->tree));
1065 1121
1122 update_title_progress(dialog);
1066 if (xfer == dialog->selected_xfer) 1123 if (xfer == dialog->selected_xfer)
1067 update_detailed_info(xfer_dialog, xfer); 1124 update_detailed_info(xfer_dialog, xfer);
1068 1125
1069 if (gaim_xfer_is_completed(xfer) && dialog->auto_clear) 1126 if (gaim_xfer_is_completed(xfer) && dialog->auto_clear)
1070 gaim_gtkxfer_dialog_remove_xfer(dialog, xfer); 1127 gaim_gtkxfer_dialog_remove_xfer(dialog, xfer);