diff -Naur Thunar-1.0.1.orig/thunar/thunar-progress-dialog.c Thunar-1.0.1/thunar/thunar-progress-dialog.c --- Thunar-1.0.1.orig/thunar/thunar-progress-dialog.c 2008-10-22 08:43:14.000000000 +0200 +++ Thunar-1.0.1/thunar/thunar-progress-dialog.c 2009-11-24 18:25:58.125847146 +0100 @@ -369,8 +369,8 @@ ThunarVfsJob *job) { GTimeVal current_time; - gulong remaining_time; - gulong elapsed_time; + gulong remaining_time = 0; + gulong elapsed_time = 0; gchar text[512]; _thunar_return_if_fail (THUNAR_IS_PROGRESS_DIALOG (dialog)); @@ -385,21 +385,29 @@ if (time_diff (¤t_time, &dialog->last_update_time) > 400 * 1000) { /* calculate the remaining time (in seconds) */ - elapsed_time = time_diff (¤t_time, &dialog->start_time) / 1000; - remaining_time = ((100 * elapsed_time) / percent - elapsed_time) / 1000; + elapsed_time = (gulong) time_diff (¤t_time, &dialog->start_time) / 1000; + remaining_time = (gulong) ((100 * elapsed_time) / percent - elapsed_time) / 1000; + + /* sanity check, workaround for bug 4140 + http://bugzilla.xfce.org/show_bug.cgi?id=4140 + set remaining_time to 0 if it is greater than ten years + */ + if (remaining_time > 315360000) { + remaining_time = 0; + } /* setup the time label */ if (G_LIKELY (remaining_time > 0)) { /* format the time text */ - if (remaining_time > 60 * 60) + if (remaining_time > 60 * 59) // show time in hours until 59 minutes left { - remaining_time = (gulong) (remaining_time / (60 * 60)); + remaining_time = (gulong) ((remaining_time / (60 * 60)) + 1); g_snprintf (text, sizeof (text), ngettext ("(%lu hour remaining)", "(%lu hours remaining)", remaining_time), remaining_time); } - else if (remaining_time > 60) + else if (remaining_time > 45) // show time in minutes until 45 seconds left { - remaining_time = (gulong) (remaining_time / 60); + remaining_time = (gulong) ((remaining_time / 60) + 1); g_snprintf (text, sizeof (text), ngettext ("(%lu minute remaining)", "(%lu minutes remaining)", remaining_time), remaining_time); } else