comparison src/gtkft.c @ 11925:ad62cd866435

[gaim-migrate @ 14216] sf patch #1292363, from John Eckerdal Don't update the file transfer dialog more than once per second (it made stuff use a lot of CPU) committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Mon, 31 Oct 2005 05:52:19 +0000
parents 8aa6462e563c
children 9dd895fdafdd
comparison
equal deleted inserted replaced
11924:ced9410eeb73 11925:ad62cd866435
83 83
84 typedef struct 84 typedef struct
85 { 85 {
86 GtkTreeIter iter; 86 GtkTreeIter iter;
87 time_t start_time; 87 time_t start_time;
88 time_t last_updated_time;
88 time_t end_time; 89 time_t end_time;
89 gboolean in_list; 90 gboolean in_list;
90 91
91 char *name; 92 char *name;
92 93
875 data->in_list = TRUE; 876 data->in_list = TRUE;
876 877
877 gaim_gtkxfer_dialog_show(dialog); 878 gaim_gtkxfer_dialog_show(dialog);
878 879
879 data->start_time = time(NULL); 880 data->start_time = time(NULL);
881 data->last_updated_time = 0;
880 data->end_time = -1; 882 data->end_time = -1;
881 883
882 type = gaim_xfer_get_type(xfer); 884 type = gaim_xfer_get_type(xfer);
883 885
884 size_str = gaim_str_size_to_units(gaim_xfer_get_size(xfer)); 886 size_str = gaim_str_size_to_units(gaim_xfer_get_size(xfer));
1002 GaimXfer *xfer) 1004 GaimXfer *xfer)
1003 { 1005 {
1004 GaimGtkXferUiData *data; 1006 GaimGtkXferUiData *data;
1005 char *size_str, *remaining_str; 1007 char *size_str, *remaining_str;
1006 GtkTreeSelection *selection; 1008 GtkTreeSelection *selection;
1009 time_t current_time;
1007 1010
1008 g_return_if_fail(dialog != NULL); 1011 g_return_if_fail(dialog != NULL);
1009 g_return_if_fail(xfer != NULL); 1012 g_return_if_fail(xfer != NULL);
1010 1013
1011 if ((data = GAIM_GTKXFER(xfer)) == NULL) 1014 if ((data = GAIM_GTKXFER(xfer)) == NULL)
1012 return; 1015 return;
1013 1016
1014 if (data->in_list == FALSE) 1017 if (data->in_list == FALSE)
1015 return; 1018 return;
1019
1020 current_time = time(NULL);
1021 if (((current_time - data->last_updated_time) == 0) &&
1022 (!gaim_xfer_is_completed(xfer)))
1023 {
1024 /* Don't update the window more than once per second */
1025 return;
1026 }
1027 data->last_updated_time = current_time;
1016 1028
1017 size_str = gaim_str_size_to_units(gaim_xfer_get_size(xfer)); 1029 size_str = gaim_str_size_to_units(gaim_xfer_get_size(xfer));
1018 remaining_str = gaim_str_size_to_units(gaim_xfer_get_bytes_remaining(xfer)); 1030 remaining_str = gaim_str_size_to_units(gaim_xfer_get_bytes_remaining(xfer));
1019 1031
1020 gtk_list_store_set(xfer_dialog->model, &data->iter, 1032 gtk_list_store_set(xfer_dialog->model, &data->iter,
1021 COLUMN_PROGRESS, gaim_xfer_get_progress(xfer), 1033 COLUMN_PROGRESS, gaim_xfer_get_progress(xfer),
1022 COLUMN_SIZE, size_str, 1034 COLUMN_SIZE, size_str,
1023 COLUMN_REMAINING, remaining_str, 1035 COLUMN_REMAINING, remaining_str,
1024 -1); 1036 -1);
1025 1037
1026 if (gaim_xfer_is_completed(xfer)) { 1038 if (gaim_xfer_is_completed(xfer))
1039 {
1027 GdkPixbuf *pixbuf; 1040 GdkPixbuf *pixbuf;
1028 1041
1029 pixbuf = gtk_widget_render_icon(dialog->window, 1042 pixbuf = gtk_widget_render_icon(dialog->window,
1030 GAIM_STOCK_FILE_DONE, 1043 GAIM_STOCK_FILE_DONE,
1031 GTK_ICON_SIZE_MENU, NULL); 1044 GTK_ICON_SIZE_MENU, NULL);
1034 COLUMN_STATUS, pixbuf, 1047 COLUMN_STATUS, pixbuf,
1035 COLUMN_REMAINING, _("Finished"), 1048 COLUMN_REMAINING, _("Finished"),
1036 -1); 1049 -1);
1037 1050
1038 g_object_unref(pixbuf); 1051 g_object_unref(pixbuf);
1039 } 1052 }
1040 1053
1041 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(xfer_dialog->tree)); 1054 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(xfer_dialog->tree));
1042 1055
1043 if (xfer == dialog->selected_xfer) 1056 if (xfer == dialog->selected_xfer)
1044 update_detailed_info(xfer_dialog, xfer); 1057 update_detailed_info(xfer_dialog, xfer);