diff options
Diffstat (limited to 'e-util')
-rw-r--r-- | e-util/e-activity.c | 32 | ||||
-rw-r--r-- | e-util/e-activity.h | 1 |
2 files changed, 33 insertions, 0 deletions
diff --git a/e-util/e-activity.c b/e-util/e-activity.c index 87b84495db..e3beb59eaa 100644 --- a/e-util/e-activity.c +++ b/e-util/e-activity.c @@ -37,6 +37,7 @@ #include <stdarg.h> #include <glib/gi18n.h> #include <camel/camel.h> +#include <libedataserver/libedataserver.h> #include "e-util-enumtypes.h" @@ -51,6 +52,7 @@ struct _EActivityPrivate { gchar *icon_name; gchar *text; + gchar *last_known_text; gdouble percent; /* Whether to emit a runtime warning if we @@ -214,6 +216,7 @@ activity_finalize (GObject *object) g_free (priv->icon_name); g_free (priv->text); + g_free (priv->last_known_text); /* Chain up to parent's finalize() method. */ G_OBJECT_CLASS (e_activity_parent_class)->finalize (object); @@ -726,6 +729,8 @@ void e_activity_set_text (EActivity *activity, const gchar *text) { + gchar *last_known_text = NULL; + g_return_if_fail (E_IS_ACTIVITY (activity)); if (g_strcmp0 (activity->priv->text, text) == 0) @@ -734,10 +739,37 @@ e_activity_set_text (EActivity *activity, g_free (activity->priv->text); activity->priv->text = g_strdup (text); + /* See e_activity_get_last_known_text(). */ + last_known_text = e_util_strdup_strip (text); + if (last_known_text != NULL) { + g_free (activity->priv->last_known_text); + activity->priv->last_known_text = last_known_text; + } + g_object_notify (G_OBJECT (activity), "text"); } /** + * e_activity_get_last_known_text: + * @activity: an #EActivity + * + * Returns the last non-empty #EActivity:text value, so it's possible to + * identify what the @activity <emphasis>was</emphasis> doing even if it + * currently has no description. + * + * Mostly useful for debugging. + * + * Returns: a descriptive message, or %NULL + **/ +const gchar * +e_activity_get_last_known_text (EActivity *activity) +{ + g_return_val_if_fail (E_IS_ACTIVITY (activity), NULL); + + return activity->priv->last_known_text; +} + +/** * e_activity_handle_cancellation: * @activity: an #EActivity * @error: a #GError, or %NULL diff --git a/e-util/e-activity.h b/e-util/e-activity.h index 9309fe1fb0..1c2cc4e7d3 100644 --- a/e-util/e-activity.h +++ b/e-util/e-activity.h @@ -90,6 +90,7 @@ void e_activity_set_state (EActivity *activity, const gchar * e_activity_get_text (EActivity *activity); void e_activity_set_text (EActivity *activity, const gchar *text); +const gchar * e_activity_get_last_known_text (EActivity *activity); gboolean e_activity_handle_cancellation (EActivity *activity, const GError *error); |