diff options
Diffstat (limited to 'src/nautilus-progress-info.c')
-rw-r--r-- | src/nautilus-progress-info.c | 1056 |
1 files changed, 550 insertions, 506 deletions
diff --git a/src/nautilus-progress-info.c b/src/nautilus-progress-info.c index 0a4e0aa04..5a4c7d208 100644 --- a/src/nautilus-progress-info.c +++ b/src/nautilus-progress-info.c @@ -1,23 +1,23 @@ /* - nautilus-progress-info.h: file operation progress info. - - Copyright (C) 2007 Red Hat, Inc. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this program; if not, see <http://www.gnu.org/licenses/>. - - Author: Alexander Larsson <alexl@redhat.com> -*/ + * nautilus-progress-info.h: file operation progress info. + * + * Copyright (C) 2007 Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, see <http://www.gnu.org/licenses/>. + * + * Author: Alexander Larsson <alexl@redhat.com> + */ #include <config.h> #include <math.h> @@ -28,13 +28,14 @@ #include "nautilus-progress-info-manager.h" #include "nautilus-icon-info.h" -enum { - CHANGED, - PROGRESS_CHANGED, - STARTED, - FINISHED, - CANCELLED, - LAST_SIGNAL +enum +{ + CHANGED, + PROGRESS_CHANGED, + STARTED, + FINISHED, + CANCELLED, + LAST_SIGNAL }; #define SIGNAL_DELAY_MSEC 100 @@ -43,247 +44,261 @@ static guint signals[LAST_SIGNAL] = { 0 }; struct _NautilusProgressInfo { - GObject parent_instance; - - GCancellable *cancellable; - guint cancellable_id; - GCancellable *details_in_thread_cancellable; - - GTimer *progress_timer; - - char *status; - char *details; - double progress; - gdouble remaining_time; - gdouble elapsed_time; - gboolean activity_mode; - gboolean started; - gboolean finished; - gboolean paused; - - GSource *idle_source; - gboolean source_is_now; - - gboolean start_at_idle; - gboolean finish_at_idle; - gboolean cancel_at_idle; - gboolean changed_at_idle; - gboolean progress_at_idle; - - GFile *destination; + GObject parent_instance; + + GCancellable *cancellable; + guint cancellable_id; + GCancellable *details_in_thread_cancellable; + + GTimer *progress_timer; + + char *status; + char *details; + double progress; + gdouble remaining_time; + gdouble elapsed_time; + gboolean activity_mode; + gboolean started; + gboolean finished; + gboolean paused; + + GSource *idle_source; + gboolean source_is_now; + + gboolean start_at_idle; + gboolean finish_at_idle; + gboolean cancel_at_idle; + gboolean changed_at_idle; + gboolean progress_at_idle; + + GFile *destination; }; struct _NautilusProgressInfoClass { - GObjectClass parent_class; + GObjectClass parent_class; }; -G_LOCK_DEFINE_STATIC(progress_info); +G_LOCK_DEFINE_STATIC (progress_info); G_DEFINE_TYPE (NautilusProgressInfo, nautilus_progress_info, G_TYPE_OBJECT) static void nautilus_progress_info_finalize (GObject *object) { - NautilusProgressInfo *info; - - info = NAUTILUS_PROGRESS_INFO (object); + NautilusProgressInfo *info; + + info = NAUTILUS_PROGRESS_INFO (object); + + g_free (info->status); + g_free (info->details); + g_clear_pointer (&info->progress_timer, (GDestroyNotify) g_timer_destroy); + g_cancellable_disconnect (info->cancellable, info->cancellable_id); + g_object_unref (info->cancellable); + g_cancellable_cancel (info->details_in_thread_cancellable); + g_clear_object (&info->details_in_thread_cancellable); + g_clear_object (&info->destination); - g_free (info->status); - g_free (info->details); - g_clear_pointer (&info->progress_timer, (GDestroyNotify) g_timer_destroy); - g_cancellable_disconnect (info->cancellable, info->cancellable_id); - g_object_unref (info->cancellable); - g_cancellable_cancel (info->details_in_thread_cancellable); - g_clear_object (&info->details_in_thread_cancellable); - g_clear_object (&info->destination); - - if (G_OBJECT_CLASS (nautilus_progress_info_parent_class)->finalize) { - (*G_OBJECT_CLASS (nautilus_progress_info_parent_class)->finalize) (object); - } + if (G_OBJECT_CLASS (nautilus_progress_info_parent_class)->finalize) + { + (*G_OBJECT_CLASS (nautilus_progress_info_parent_class)->finalize)(object); + } } static void nautilus_progress_info_dispose (GObject *object) { - NautilusProgressInfo *info; - - info = NAUTILUS_PROGRESS_INFO (object); + NautilusProgressInfo *info; - G_LOCK (progress_info); + info = NAUTILUS_PROGRESS_INFO (object); - /* Destroy source in dispose, because the callback - could come here before the destroy, which should - ressurect the object for a while */ - if (info->idle_source) { - g_source_destroy (info->idle_source); - g_source_unref (info->idle_source); - info->idle_source = NULL; - } - G_UNLOCK (progress_info); + G_LOCK (progress_info); + + /* Destroy source in dispose, because the callback + * could come here before the destroy, which should + * ressurect the object for a while */ + if (info->idle_source) + { + g_source_destroy (info->idle_source); + g_source_unref (info->idle_source); + info->idle_source = NULL; + } + G_UNLOCK (progress_info); } static void nautilus_progress_info_class_init (NautilusProgressInfoClass *klass) { - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - - gobject_class->finalize = nautilus_progress_info_finalize; - gobject_class->dispose = nautilus_progress_info_dispose; - - signals[CHANGED] = - g_signal_new ("changed", - NAUTILUS_TYPE_PROGRESS_INFO, - G_SIGNAL_RUN_LAST, - 0, - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - - signals[PROGRESS_CHANGED] = - g_signal_new ("progress-changed", - NAUTILUS_TYPE_PROGRESS_INFO, - G_SIGNAL_RUN_LAST, - 0, - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - - signals[STARTED] = - g_signal_new ("started", - NAUTILUS_TYPE_PROGRESS_INFO, - G_SIGNAL_RUN_LAST, - 0, - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - - signals[FINISHED] = - g_signal_new ("finished", - NAUTILUS_TYPE_PROGRESS_INFO, - G_SIGNAL_RUN_LAST, - 0, - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - - signals[CANCELLED] = - g_signal_new ("cancelled", - NAUTILUS_TYPE_PROGRESS_INFO, - G_SIGNAL_RUN_LAST, - 0, - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + + gobject_class->finalize = nautilus_progress_info_finalize; + gobject_class->dispose = nautilus_progress_info_dispose; + + signals[CHANGED] = + g_signal_new ("changed", + NAUTILUS_TYPE_PROGRESS_INFO, + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + signals[PROGRESS_CHANGED] = + g_signal_new ("progress-changed", + NAUTILUS_TYPE_PROGRESS_INFO, + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + signals[STARTED] = + g_signal_new ("started", + NAUTILUS_TYPE_PROGRESS_INFO, + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + signals[FINISHED] = + g_signal_new ("finished", + NAUTILUS_TYPE_PROGRESS_INFO, + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + signals[CANCELLED] = + g_signal_new ("cancelled", + NAUTILUS_TYPE_PROGRESS_INFO, + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); } static gboolean idle_callback (gpointer data) { - NautilusProgressInfo *info = data; - gboolean start_at_idle; - gboolean finish_at_idle; - gboolean changed_at_idle; - gboolean progress_at_idle; - gboolean cancelled_at_idle; - GSource *source; - - source = g_main_current_source (); - - G_LOCK (progress_info); - - /* Protect agains races where the source has - been destroyed on another thread while it - was being dispatched. - Similar to what gdk_threads_add_idle does. - */ - if (g_source_is_destroyed (source)) { - G_UNLOCK (progress_info); - return FALSE; - } - - /* We hadn't destroyed the source, so take a ref. - * This might ressurect the object from dispose, but - * that should be ok. - */ - g_object_ref (info); - - g_assert (source == info->idle_source); - - g_source_unref (source); - info->idle_source = NULL; - - start_at_idle = info->start_at_idle; - finish_at_idle = info->finish_at_idle; - changed_at_idle = info->changed_at_idle; - progress_at_idle = info->progress_at_idle; - cancelled_at_idle = info->cancel_at_idle; - - info->start_at_idle = FALSE; - info->finish_at_idle = FALSE; - info->changed_at_idle = FALSE; - info->progress_at_idle = FALSE; - info->cancel_at_idle = FALSE; - - G_UNLOCK (progress_info); - - if (start_at_idle) { - g_signal_emit (info, - signals[STARTED], - 0); - } - - if (changed_at_idle) { - g_signal_emit (info, - signals[CHANGED], - 0); - } - - if (progress_at_idle) { - g_signal_emit (info, - signals[PROGRESS_CHANGED], - 0); - } - - if (finish_at_idle) { - g_signal_emit (info, - signals[FINISHED], - 0); - } - - if (cancelled_at_idle) { - g_signal_emit (info, - signals[CANCELLED], - 0); - } - - g_object_unref (info); - - return FALSE; + NautilusProgressInfo *info = data; + gboolean start_at_idle; + gboolean finish_at_idle; + gboolean changed_at_idle; + gboolean progress_at_idle; + gboolean cancelled_at_idle; + GSource *source; + + source = g_main_current_source (); + + G_LOCK (progress_info); + + /* Protect agains races where the source has + * been destroyed on another thread while it + * was being dispatched. + * Similar to what gdk_threads_add_idle does. + */ + if (g_source_is_destroyed (source)) + { + G_UNLOCK (progress_info); + return FALSE; + } + + /* We hadn't destroyed the source, so take a ref. + * This might ressurect the object from dispose, but + * that should be ok. + */ + g_object_ref (info); + + g_assert (source == info->idle_source); + + g_source_unref (source); + info->idle_source = NULL; + + start_at_idle = info->start_at_idle; + finish_at_idle = info->finish_at_idle; + changed_at_idle = info->changed_at_idle; + progress_at_idle = info->progress_at_idle; + cancelled_at_idle = info->cancel_at_idle; + + info->start_at_idle = FALSE; + info->finish_at_idle = FALSE; + info->changed_at_idle = FALSE; + info->progress_at_idle = FALSE; + info->cancel_at_idle = FALSE; + + G_UNLOCK (progress_info); + + if (start_at_idle) + { + g_signal_emit (info, + signals[STARTED], + 0); + } + + if (changed_at_idle) + { + g_signal_emit (info, + signals[CHANGED], + 0); + } + + if (progress_at_idle) + { + g_signal_emit (info, + signals[PROGRESS_CHANGED], + 0); + } + + if (finish_at_idle) + { + g_signal_emit (info, + signals[FINISHED], + 0); + } + + if (cancelled_at_idle) + { + g_signal_emit (info, + signals[CANCELLED], + 0); + } + + g_object_unref (info); + + return FALSE; } /* Called with lock held */ static void -queue_idle (NautilusProgressInfo *info, gboolean now) -{ - if (info->idle_source == NULL || - (now && !info->source_is_now)) { - if (info->idle_source) { - g_source_destroy (info->idle_source); - g_source_unref (info->idle_source); - info->idle_source = NULL; - } - - info->source_is_now = now; - if (now) { - info->idle_source = g_idle_source_new (); - } else { - info->idle_source = g_timeout_source_new (SIGNAL_DELAY_MSEC); - } - g_source_set_callback (info->idle_source, idle_callback, info, NULL); - g_source_attach (info->idle_source, NULL); - } +queue_idle (NautilusProgressInfo *info, + gboolean now) +{ + if (info->idle_source == NULL || + (now && !info->source_is_now)) + { + if (info->idle_source) + { + g_source_destroy (info->idle_source); + g_source_unref (info->idle_source); + info->idle_source = NULL; + } + + info->source_is_now = now; + if (now) + { + info->idle_source = g_idle_source_new (); + } + else + { + info->idle_source = g_timeout_source_new (SIGNAL_DELAY_MSEC); + } + g_source_set_callback (info->idle_source, idle_callback, info, NULL); + g_source_attach (info->idle_source, NULL); + } } static void @@ -292,446 +307,475 @@ set_details_in_thread (GTask *task, gpointer user_data, GCancellable *cancellable) { - if (!g_cancellable_is_cancelled (cancellable)) { - nautilus_progress_info_set_details (info, _("Canceled")); - G_LOCK (progress_info); - info->cancel_at_idle = TRUE; - g_timer_stop (info->progress_timer); - queue_idle (info, TRUE); - G_UNLOCK (progress_info); - } + if (!g_cancellable_is_cancelled (cancellable)) + { + nautilus_progress_info_set_details (info, _("Canceled")); + G_LOCK (progress_info); + info->cancel_at_idle = TRUE; + g_timer_stop (info->progress_timer); + queue_idle (info, TRUE); + G_UNLOCK (progress_info); + } } static void on_canceled (GCancellable *cancellable, NautilusProgressInfo *info) { - GTask *task; + GTask *task; - /* We can't do any lock operaton here, since this is probably the main - * thread, so modify the details in another thread. Also it can happens - * that we were finalizing the object, so create a new cancellable here - * so it can be cancelled in finalize */ - info->details_in_thread_cancellable = g_cancellable_new (); - task = g_task_new (info, info->details_in_thread_cancellable, NULL, NULL); - g_task_run_in_thread (task, (GTaskThreadFunc) set_details_in_thread); + /* We can't do any lock operaton here, since this is probably the main + * thread, so modify the details in another thread. Also it can happens + * that we were finalizing the object, so create a new cancellable here + * so it can be cancelled in finalize */ + info->details_in_thread_cancellable = g_cancellable_new (); + task = g_task_new (info, info->details_in_thread_cancellable, NULL, NULL); + g_task_run_in_thread (task, (GTaskThreadFunc) set_details_in_thread); - g_object_unref (task); + g_object_unref (task); } static void nautilus_progress_info_init (NautilusProgressInfo *info) { - NautilusProgressInfoManager *manager; + NautilusProgressInfoManager *manager; - info->cancellable = g_cancellable_new (); - info->cancellable_id = g_cancellable_connect (info->cancellable, - G_CALLBACK (on_canceled), - info, - NULL); + info->cancellable = g_cancellable_new (); + info->cancellable_id = g_cancellable_connect (info->cancellable, + G_CALLBACK (on_canceled), + info, + NULL); - manager = nautilus_progress_info_manager_dup_singleton (); - nautilus_progress_info_manager_add_new_info (manager, info); - g_object_unref (manager); - info->progress_timer = g_timer_new (); + manager = nautilus_progress_info_manager_dup_singleton (); + nautilus_progress_info_manager_add_new_info (manager, info); + g_object_unref (manager); + info->progress_timer = g_timer_new (); } NautilusProgressInfo * nautilus_progress_info_new (void) { - NautilusProgressInfo *info; - - info = g_object_new (NAUTILUS_TYPE_PROGRESS_INFO, NULL); - - return info; + NautilusProgressInfo *info; + + info = g_object_new (NAUTILUS_TYPE_PROGRESS_INFO, NULL); + + return info; } char * nautilus_progress_info_get_status (NautilusProgressInfo *info) { - char *res; - - G_LOCK (progress_info); - - if (info->status) { - res = g_strdup (info->status); - } else { - res = g_strdup (_("Preparing")); - } - - G_UNLOCK (progress_info); - - return res; + char *res; + + G_LOCK (progress_info); + + if (info->status) + { + res = g_strdup (info->status); + } + else + { + res = g_strdup (_("Preparing")); + } + + G_UNLOCK (progress_info); + + return res; } char * nautilus_progress_info_get_details (NautilusProgressInfo *info) { - char *res; - - G_LOCK (progress_info); - - if (info->details) { - res = g_strdup (info->details); - } else { - res = g_strdup (_("Preparing")); - } - - G_UNLOCK (progress_info); + char *res; + + G_LOCK (progress_info); + + if (info->details) + { + res = g_strdup (info->details); + } + else + { + res = g_strdup (_("Preparing")); + } - return res; + G_UNLOCK (progress_info); + + return res; } double nautilus_progress_info_get_progress (NautilusProgressInfo *info) { - double res; - - G_LOCK (progress_info); + double res; + + G_LOCK (progress_info); + + if (info->activity_mode) + { + res = -1.0; + } + else + { + res = info->progress; + } - if (info->activity_mode) { - res = -1.0; - } else { - res = info->progress; - } - - G_UNLOCK (progress_info); - - return res; + G_UNLOCK (progress_info); + + return res; } void nautilus_progress_info_cancel (NautilusProgressInfo *info) { - G_LOCK (progress_info); - - g_cancellable_cancel (info->cancellable); - g_timer_stop (info->progress_timer); - - G_UNLOCK (progress_info); + G_LOCK (progress_info); + + g_cancellable_cancel (info->cancellable); + g_timer_stop (info->progress_timer); + + G_UNLOCK (progress_info); } GCancellable * nautilus_progress_info_get_cancellable (NautilusProgressInfo *info) { - GCancellable *c; - - G_LOCK (progress_info); - - c = g_object_ref (info->cancellable); - - G_UNLOCK (progress_info); - - return c; + GCancellable *c; + + G_LOCK (progress_info); + + c = g_object_ref (info->cancellable); + + G_UNLOCK (progress_info); + + return c; } gboolean nautilus_progress_info_get_is_cancelled (NautilusProgressInfo *info) { - gboolean cancelled; + gboolean cancelled; - G_LOCK (progress_info); - cancelled = g_cancellable_is_cancelled (info->cancellable); - G_UNLOCK (progress_info); + G_LOCK (progress_info); + cancelled = g_cancellable_is_cancelled (info->cancellable); + G_UNLOCK (progress_info); - return cancelled; + return cancelled; } gboolean nautilus_progress_info_get_is_started (NautilusProgressInfo *info) { - gboolean res; - - G_LOCK (progress_info); - - res = info->started; - - G_UNLOCK (progress_info); - - return res; + gboolean res; + + G_LOCK (progress_info); + + res = info->started; + + G_UNLOCK (progress_info); + + return res; } gboolean nautilus_progress_info_get_is_finished (NautilusProgressInfo *info) { - gboolean res; - - G_LOCK (progress_info); - - res = info->finished; - - G_UNLOCK (progress_info); - - return res; + gboolean res; + + G_LOCK (progress_info); + + res = info->finished; + + G_UNLOCK (progress_info); + + return res; } gboolean nautilus_progress_info_get_is_paused (NautilusProgressInfo *info) { - gboolean res; - - G_LOCK (progress_info); - - res = info->paused; - - G_UNLOCK (progress_info); - - return res; + gboolean res; + + G_LOCK (progress_info); + + res = info->paused; + + G_UNLOCK (progress_info); + + return res; } void nautilus_progress_info_pause (NautilusProgressInfo *info) { - G_LOCK (progress_info); + G_LOCK (progress_info); - if (!info->paused) { - info->paused = TRUE; - g_timer_stop (info->progress_timer); - } + if (!info->paused) + { + info->paused = TRUE; + g_timer_stop (info->progress_timer); + } - G_UNLOCK (progress_info); + G_UNLOCK (progress_info); } void nautilus_progress_info_resume (NautilusProgressInfo *info) { - G_LOCK (progress_info); + G_LOCK (progress_info); - if (info->paused) { - info->paused = FALSE; - g_timer_continue (info->progress_timer); - } + if (info->paused) + { + info->paused = FALSE; + g_timer_continue (info->progress_timer); + } - G_UNLOCK (progress_info); + G_UNLOCK (progress_info); } void nautilus_progress_info_start (NautilusProgressInfo *info) { - G_LOCK (progress_info); - - if (!info->started) { - info->started = TRUE; - g_timer_start (info->progress_timer); - - info->start_at_idle = TRUE; - queue_idle (info, TRUE); - } - - G_UNLOCK (progress_info); + G_LOCK (progress_info); + + if (!info->started) + { + info->started = TRUE; + g_timer_start (info->progress_timer); + + info->start_at_idle = TRUE; + queue_idle (info, TRUE); + } + + G_UNLOCK (progress_info); } void nautilus_progress_info_finish (NautilusProgressInfo *info) { - G_LOCK (progress_info); - - if (!info->finished) { - info->finished = TRUE; - g_timer_stop (info->progress_timer); - - info->finish_at_idle = TRUE; - queue_idle (info, TRUE); - } - - G_UNLOCK (progress_info); + G_LOCK (progress_info); + + if (!info->finished) + { + info->finished = TRUE; + g_timer_stop (info->progress_timer); + + info->finish_at_idle = TRUE; + queue_idle (info, TRUE); + } + + G_UNLOCK (progress_info); } void nautilus_progress_info_take_status (NautilusProgressInfo *info, - char *status) -{ - G_LOCK (progress_info); - - if (g_strcmp0 (info->status, status) != 0) { - g_free (info->status); - info->status = status; - - info->changed_at_idle = TRUE; - queue_idle (info, FALSE); - } else { - g_free (status); - } - - G_UNLOCK (progress_info); + char *status) +{ + G_LOCK (progress_info); + + if (g_strcmp0 (info->status, status) != 0) + { + g_free (info->status); + info->status = status; + + info->changed_at_idle = TRUE; + queue_idle (info, FALSE); + } + else + { + g_free (status); + } + + G_UNLOCK (progress_info); } void nautilus_progress_info_set_status (NautilusProgressInfo *info, - const char *status) + const char *status) { - G_LOCK (progress_info); - - if (g_strcmp0 (info->status, status) != 0) { - g_free (info->status); - info->status = g_strdup (status); - - info->changed_at_idle = TRUE; - queue_idle (info, FALSE); - } - - G_UNLOCK (progress_info); + G_LOCK (progress_info); + + if (g_strcmp0 (info->status, status) != 0) + { + g_free (info->status); + info->status = g_strdup (status); + + info->changed_at_idle = TRUE; + queue_idle (info, FALSE); + } + + G_UNLOCK (progress_info); } void nautilus_progress_info_take_details (NautilusProgressInfo *info, - char *details) -{ - G_LOCK (progress_info); - - if (g_strcmp0 (info->details, details) != 0) { - g_free (info->details); - info->details = details; - - info->changed_at_idle = TRUE; - queue_idle (info, FALSE); - } else { - g_free (details); - } - - G_UNLOCK (progress_info); + char *details) +{ + G_LOCK (progress_info); + + if (g_strcmp0 (info->details, details) != 0) + { + g_free (info->details); + info->details = details; + + info->changed_at_idle = TRUE; + queue_idle (info, FALSE); + } + else + { + g_free (details); + } + + G_UNLOCK (progress_info); } void nautilus_progress_info_set_details (NautilusProgressInfo *info, - const char *details) + const char *details) { - G_LOCK (progress_info); - - if (g_strcmp0 (info->details, details) != 0) { - g_free (info->details); - info->details = g_strdup (details); - - info->changed_at_idle = TRUE; - queue_idle (info, FALSE); - } - - G_UNLOCK (progress_info); + G_LOCK (progress_info); + + if (g_strcmp0 (info->details, details) != 0) + { + g_free (info->details); + info->details = g_strdup (details); + + info->changed_at_idle = TRUE; + queue_idle (info, FALSE); + } + + G_UNLOCK (progress_info); } void nautilus_progress_info_pulse_progress (NautilusProgressInfo *info) { - G_LOCK (progress_info); + G_LOCK (progress_info); + + info->activity_mode = TRUE; + info->progress = 0.0; + info->progress_at_idle = TRUE; + queue_idle (info, FALSE); - info->activity_mode = TRUE; - info->progress = 0.0; - info->progress_at_idle = TRUE; - queue_idle (info, FALSE); - - G_UNLOCK (progress_info); + G_UNLOCK (progress_info); } void nautilus_progress_info_set_progress (NautilusProgressInfo *info, - double current, - double total) -{ - double current_percent; - - if (total <= 0) { - current_percent = 1.0; - } else { - current_percent = current / total; - - if (current_percent < 0) { - current_percent = 0; - } - - if (current_percent > 1.0) { - current_percent = 1.0; - } - } - - G_LOCK (progress_info); - - if (info->activity_mode || /* emit on switch from activity mode */ - fabs (current_percent - info->progress) > 0.005 /* Emit on change of 0.5 percent */ - ) { - info->activity_mode = FALSE; - info->progress = current_percent; - info->progress_at_idle = TRUE; - queue_idle (info, FALSE); - } - - G_UNLOCK (progress_info); + double current, + double total) +{ + double current_percent; + + if (total <= 0) + { + current_percent = 1.0; + } + else + { + current_percent = current / total; + + if (current_percent < 0) + { + current_percent = 0; + } + + if (current_percent > 1.0) + { + current_percent = 1.0; + } + } + + G_LOCK (progress_info); + + if (info->activity_mode || /* emit on switch from activity mode */ + fabs (current_percent - info->progress) > 0.005 /* Emit on change of 0.5 percent */ + ) + { + info->activity_mode = FALSE; + info->progress = current_percent; + info->progress_at_idle = TRUE; + queue_idle (info, FALSE); + } + + G_UNLOCK (progress_info); } void nautilus_progress_info_set_remaining_time (NautilusProgressInfo *info, gdouble time) { - G_LOCK (progress_info); - info->remaining_time = time; - G_UNLOCK (progress_info); + G_LOCK (progress_info); + info->remaining_time = time; + G_UNLOCK (progress_info); } gdouble nautilus_progress_info_get_remaining_time (NautilusProgressInfo *info) { - gint remaining_time; + gint remaining_time; - G_LOCK (progress_info); - remaining_time = info->remaining_time; - G_UNLOCK (progress_info); + G_LOCK (progress_info); + remaining_time = info->remaining_time; + G_UNLOCK (progress_info); - return remaining_time; + return remaining_time; } void nautilus_progress_info_set_elapsed_time (NautilusProgressInfo *info, gdouble time) { - G_LOCK (progress_info); - info->elapsed_time = time; - G_UNLOCK (progress_info); + G_LOCK (progress_info); + info->elapsed_time = time; + G_UNLOCK (progress_info); } gdouble nautilus_progress_info_get_elapsed_time (NautilusProgressInfo *info) { - gint elapsed_time; + gint elapsed_time; - G_LOCK (progress_info); - elapsed_time = info->elapsed_time; - G_UNLOCK (progress_info); + G_LOCK (progress_info); + elapsed_time = info->elapsed_time; + G_UNLOCK (progress_info); - return elapsed_time; + return elapsed_time; } gdouble nautilus_progress_info_get_total_elapsed_time (NautilusProgressInfo *info) { - gdouble elapsed_time; + gdouble elapsed_time; - G_LOCK (progress_info); - elapsed_time = g_timer_elapsed (info->progress_timer, NULL); - G_UNLOCK (progress_info); + G_LOCK (progress_info); + elapsed_time = g_timer_elapsed (info->progress_timer, NULL); + G_UNLOCK (progress_info); - return elapsed_time; + return elapsed_time; } void nautilus_progress_info_set_destination (NautilusProgressInfo *info, GFile *file) { - G_LOCK (progress_info); - g_clear_object (&info->destination); - info->destination = g_object_ref (file); - G_UNLOCK (progress_info); + G_LOCK (progress_info); + g_clear_object (&info->destination); + info->destination = g_object_ref (file); + G_UNLOCK (progress_info); } GFile * nautilus_progress_info_get_destination (NautilusProgressInfo *info) { - GFile *destination = NULL; + GFile *destination = NULL; - G_LOCK (progress_info); - if (info->destination) { - destination = g_object_ref (info->destination); - } - G_UNLOCK (progress_info); + G_LOCK (progress_info); + if (info->destination) + { + destination = g_object_ref (info->destination); + } + G_UNLOCK (progress_info); - return destination; + return destination; } |