[Xfce4-commits] <thunar:nick/gseal+clean> Directly show the throbber for deep count jobs.

Nick Schermer noreply at xfce.org
Sun Sep 16 20:16:53 CEST 2012


Updating branch refs/heads/nick/gseal+clean
         to aebdb9a7529817d0e83e0492fd1fbfa6539231bb (commit)
       from 7a760461ce74e94820f8193b18092ee9a8643b5e (commit)

commit aebdb9a7529817d0e83e0492fd1fbfa6539231bb
Author: Nick Schermer <nick at xfce.org>
Date:   Thu Sep 13 22:20:32 2012 +0200

    Directly show the throbber for deep count jobs.
    
    It gives better feedback if the throbber is shown directly
    when a deep count job is started. For single files it is always
    hidden.

 thunar/thunar-deep-count-job.c |   31 ++++++++++--------
 thunar/thunar-size-label.c     |   65 ++++------------------------------------
 2 files changed, 23 insertions(+), 73 deletions(-)

diff --git a/thunar/thunar-deep-count-job.c b/thunar/thunar-deep-count-job.c
index bd7f15c..5a8f7ed 100644
--- a/thunar/thunar-deep-count-job.c
+++ b/thunar/thunar-deep-count-job.c
@@ -130,13 +130,7 @@ thunar_deep_count_job_class_init (ThunarDeepCountJobClass *klass)
 static void
 thunar_deep_count_job_init (ThunarDeepCountJob *job)
 {
-  job->files = NULL;
   job->query_flags = G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS;
-  job->total_size = 0;
-  job->file_count = 0;
-  job->directory_count = 0;
-  job->unreadable_directory_count = 0;
-  job->last_time = 0;
 }
 
 
@@ -271,11 +265,12 @@ thunar_deep_count_job_process (ExoJob    *job,
         }
 
       /* emit status update whenever we've finished a directory,
-       * but not more than fourth per second */
+       * but not more than four times per second */
       real_time = thunar_util_get_real_time ();
       if (real_time >= count_job->last_time)
         {
-          thunar_deep_count_job_status_update (count_job);
+          if (count_job->last_time != 0)
+            thunar_deep_count_job_status_update (count_job);
           count_job->last_time = real_time + (G_USEC_PER_SEC / 4);
         }
     }
@@ -299,10 +294,11 @@ static gboolean
 thunar_deep_count_job_execute (ExoJob  *job,
                                GError **error)
 {
-  gboolean success;
-  GError  *err = NULL;
-  GList   *lp;
-  GFile   *gfile;
+  ThunarDeepCountJob *count_job = THUNAR_DEEP_COUNT_JOB (job);
+  gboolean            success;
+  GError             *err = NULL;
+  GList              *lp;
+  GFile              *gfile;
 
   _thunar_return_val_if_fail (THUNAR_IS_JOB (job), FALSE);
   _thunar_return_val_if_fail (error == NULL || *error == NULL, FALSE);
@@ -311,8 +307,15 @@ thunar_deep_count_job_execute (ExoJob  *job,
   if (exo_job_set_error_if_cancelled (job, error))
     return FALSE;
 
+  /* reset counters */
+  count_job->total_size = 0;
+  count_job->file_count = 0;
+  count_job->directory_count = 0;
+  count_job->unreadable_directory_count = 0;
+  count_job->last_time = 0;
+
   /* count files, directories and compute size of the job files */
-  for (lp = THUNAR_DEEP_COUNT_JOB (job)->files; lp != NULL; lp = lp->next)
+  for (lp = count_job->files; lp != NULL; lp = lp->next)
     {
       gfile = thunar_file_get_file (THUNAR_FILE (lp->data));
       success = thunar_deep_count_job_process (job, gfile, TRUE, &err);
@@ -340,7 +343,7 @@ thunar_deep_count_job_execute (ExoJob  *job,
   else if (!exo_job_is_cancelled (job))
     {
       /* emit final status update at the very end of the computation */
-      thunar_deep_count_job_status_update (THUNAR_DEEP_COUNT_JOB (job));
+      thunar_deep_count_job_status_update (count_job);
     }
 
   return success;
diff --git a/thunar/thunar-size-label.c b/thunar/thunar-size-label.c
index 68d95b3..e1462c8 100644
--- a/thunar/thunar-size-label.c
+++ b/thunar/thunar-size-label.c
@@ -71,8 +71,6 @@ static void     thunar_size_label_status_update         (ThunarDeepCountJob   *j
                                                          guint                 directory_count,
                                                          guint                 unreadable_directory_count,
                                                          ThunarSizeLabel      *size_label);
-static gboolean thunar_size_label_animate_timer         (gpointer              user_data);
-static void     thunar_size_label_animate_timer_destroy (gpointer              user_data);
 
 
 
@@ -91,9 +89,6 @@ struct _ThunarSizeLabel
 
   GtkWidget          *label;
   GtkWidget          *throbber;
-
-  /* the throbber animation is started after a timeout */
-  guint               animate_timer_id;
 };
 
 
@@ -178,10 +173,6 @@ thunar_size_label_finalize (GObject *object)
   /* reset the file property */
   thunar_size_label_set_files (size_label, NULL);
 
-  /* be sure to cancel any pending animate timer */
-  if (G_UNLIKELY (size_label->animate_timer_id != 0))
-    g_source_remove (size_label->animate_timer_id);
-
   (*G_OBJECT_CLASS (thunar_size_label_parent_class)->finalize) (object);
 }
 
@@ -242,10 +233,6 @@ thunar_size_label_button_press_event (GtkWidget       *ebox,
   /* left button press on the throbber cancels the calculation */
   if (G_LIKELY (event->button == 1))
     {
-      /* be sure to cancel the animate timer */
-      if (G_UNLIKELY (size_label->animate_timer_id != 0))
-        g_source_remove (size_label->animate_timer_id);
-
       /* cancel the pending job (if any) */
       if (G_UNLIKELY (size_label->job != NULL))
         {
@@ -281,10 +268,6 @@ thunar_size_label_files_changed (ThunarSizeLabel *size_label)
   _thunar_return_if_fail (size_label->files != NULL);
   _thunar_return_if_fail (THUNAR_IS_FILE (size_label->files->data));
 
-  /* be sure to cancel the animate timer */
-  if (G_UNLIKELY (size_label->animate_timer_id != 0))
-    g_source_remove (size_label->animate_timer_id);
-
   /* cancel the pending job (if any) */
   if (G_UNLIKELY (size_label->job != NULL))
     {
@@ -294,10 +277,6 @@ thunar_size_label_files_changed (ThunarSizeLabel *size_label)
       size_label->job = NULL;
     }
 
-  /* be sure to stop and hide the throbber */
-  thunar_throbber_set_animated (THUNAR_THROBBER (size_label->throbber), FALSE);
-  gtk_widget_hide (size_label->throbber);
-
   /* check if there are multiple files or the single file is a directory */
   if (size_label->files->next != NULL
       || thunar_file_is_directory (THUNAR_FILE (size_label->files->data)))
@@ -310,12 +289,18 @@ thunar_size_label_files_changed (ThunarSizeLabel *size_label)
 
       /* tell the user that we started calculation */
       gtk_label_set_text (GTK_LABEL (size_label->label), _("Calculating..."));
+      thunar_throbber_set_animated (THUNAR_THROBBER (size_label->throbber), TRUE);
+      gtk_widget_show (size_label->throbber);
 
       /* launch the job */
       exo_job_launch (EXO_JOB (size_label->job));
     }
   else
     {
+      /* this is going to be quick, stop and hide the throbber */
+      thunar_throbber_set_animated (THUNAR_THROBBER (size_label->throbber), FALSE);
+      gtk_widget_hide (size_label->throbber);
+
       /* determine the size of the file */
       size = thunar_file_get_size (THUNAR_FILE (size_label->files->data));
 
@@ -351,10 +336,6 @@ thunar_size_label_finished (ExoJob          *job,
   _thunar_return_if_fail (THUNAR_IS_SIZE_LABEL (size_label));
   _thunar_return_if_fail (size_label->job == THUNAR_DEEP_COUNT_JOB (job));
 
-  /* be sure to cancel the animate timer */
-  if (G_UNLIKELY (size_label->animate_timer_id != 0))
-    g_source_remove (size_label->animate_timer_id);
-
   /* stop and hide the throbber */
   thunar_throbber_set_animated (THUNAR_THROBBER (size_label->throbber), FALSE);
   gtk_widget_hide (size_label->throbber);
@@ -384,14 +365,6 @@ thunar_size_label_status_update (ThunarDeepCountJob *job,
   _thunar_return_if_fail (THUNAR_IS_SIZE_LABEL (size_label));
   _thunar_return_if_fail (size_label->job == job);
 
-  /* check if the animate timer is already running */
-  if (G_UNLIKELY (size_label->animate_timer_id == 0))
-    {
-      /* schedule the animate timer to animate and display the throbber after 1s */
-      size_label->animate_timer_id = g_timeout_add_full (G_PRIORITY_LOW, 1000, thunar_size_label_animate_timer,
-                                                         size_label, thunar_size_label_animate_timer_destroy);
-    }
-
   /* determine the total number of items */
   n = file_count + directory_count + unreadable_directory_count;
 
@@ -415,32 +388,6 @@ thunar_size_label_status_update (ThunarDeepCountJob *job,
 
 
 
-static gboolean
-thunar_size_label_animate_timer (gpointer user_data)
-{
-  ThunarSizeLabel *size_label = THUNAR_SIZE_LABEL (user_data);
-
-  GDK_THREADS_ENTER ();
-
-  /* animate and display the throbber */
-  thunar_throbber_set_animated (THUNAR_THROBBER (size_label->throbber), TRUE);
-  gtk_widget_show (size_label->throbber);
-
-  GDK_THREADS_LEAVE ();
-
-  return FALSE;
-}
-
-
-
-static void
-thunar_size_label_animate_timer_destroy (gpointer user_data)
-{
-  THUNAR_SIZE_LABEL (user_data)->animate_timer_id = 0;
-}
-
-
-
 /**
  * thunar_size_label_new:
  *


More information about the Xfce4-commits mailing list