Mercurial > pidgin.yaz
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); |