diff options
Diffstat (limited to 'shell/e-shell-backend.c')
-rw-r--r-- | shell/e-shell-backend.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/shell/e-shell-backend.c b/shell/e-shell-backend.c index 0d7ff020c7..c2abb470a2 100644 --- a/shell/e-shell-backend.c +++ b/shell/e-shell-backend.c @@ -398,19 +398,30 @@ void e_shell_backend_add_activity (EShellBackend *shell_backend, EActivity *activity) { - GCancellable *cancellable; + EActivityState state; g_return_if_fail (E_IS_SHELL_BACKEND (shell_backend)); g_return_if_fail (E_IS_ACTIVITY (activity)); - cancellable = e_activity_get_cancellable (activity); + state = e_activity_get_state (activity); - /* Skip cancelled activities. */ - if (g_cancellable_is_cancelled (cancellable)) + /* Disregard cancelled or completed activities. */ + + if (state == E_ACTIVITY_CANCELLED) + return; + + if (state == E_ACTIVITY_COMPLETED) return; g_queue_push_tail (shell_backend->priv->activities, activity); + /* Emit the "activity-added" signal before adding a weak reference + * to the EActivity because EShellTaskbar's signal handler also adds + * a weak reference to the EActivity, and we want its GWeakNotify + * to run before ours, since ours may destroy the EShellTaskbar + * during application shutdown. */ + g_signal_emit (shell_backend, signals[ACTIVITY_ADDED], 0, activity); + /* We reference the backend on every activity to * guarantee the backend outlives the activity. */ g_object_weak_ref ( @@ -418,8 +429,6 @@ e_shell_backend_add_activity (EShellBackend *shell_backend, shell_backend_activity_finalized_cb, g_object_ref (shell_backend)); - g_signal_emit (shell_backend, signals[ACTIVITY_ADDED], 0, activity); - /* Only emit "notify::busy" when switching from idle to busy. */ if (g_queue_get_length (shell_backend->priv->activities) == 1) g_object_notify (G_OBJECT (shell_backend), "busy"); |