diff options
-rw-r--r-- | src/nautilus-toolbar.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/nautilus-toolbar.c b/src/nautilus-toolbar.c index 645efd95f..40cd7e9a1 100644 --- a/src/nautilus-toolbar.c +++ b/src/nautilus-toolbar.c @@ -69,6 +69,8 @@ struct _NautilusToolbarPrivate { GtkWidget *view_button; GtkWidget *action_button; + guint n_progress_infos_showing; + GtkWidget *operations_popover; GtkWidget *operations_container; GtkWidget *operations_revealer; @@ -465,6 +467,9 @@ on_progress_info_cancelled (NautilusToolbar *self) { /* Update the pie chart progress */ gtk_widget_queue_draw (self->priv->operations_icon); + + self->priv->n_progress_infos_showing--; + if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->priv->operations_button))) { schedule_remove_finished_operations (self); } @@ -487,6 +492,8 @@ on_progress_info_finished (NautilusToolbar *self, /* Update the pie chart progress */ gtk_widget_queue_draw (self->priv->operations_icon); + self->priv->n_progress_infos_showing--; + if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->priv->operations_button))) { schedule_remove_finished_operations (self); } @@ -535,10 +542,12 @@ update_operations (NautilusToolbar *self) disconnect_progress_infos (self); progress_infos = nautilus_progress_info_manager_get_all_infos (self->priv->progress_manager); + self->priv->n_progress_infos_showing = 0; for (l = progress_infos; l != NULL; l = l->next) { if (nautilus_progress_info_get_elapsed_time (l->data) + nautilus_progress_info_get_remaining_time (l->data) > OPERATION_MINIMUM_TIME) { total_remaining_time = nautilus_progress_info_get_remaining_time (l->data); + self->priv->n_progress_infos_showing++; g_signal_connect_swapped (l->data, "finished", G_CALLBACK (on_progress_info_finished), self); @@ -574,12 +583,16 @@ update_operations (NautilusToolbar *self) static gboolean on_progress_info_started_timeout (NautilusToolbar *self) { + GList *progress_infos; + update_operations (self); /* In case we didn't show the operations button because the operation total * time stimation is not good enough, update again to make sure we don't miss * a long time operation because of that */ - if (!nautilus_progress_manager_are_all_infos_finished_or_cancelled (self->priv->progress_manager)) { + progress_infos = nautilus_progress_info_manager_get_all_infos (self->priv->progress_manager); + if (!nautilus_progress_manager_are_all_infos_finished_or_cancelled (self->priv->progress_manager) && + g_list_length (progress_infos) != self->priv->n_progress_infos_showing) { return G_SOURCE_CONTINUE; } else { self->priv->start_operations_timeout_id = 0; |