[evolution/wip/gsettings] EActivity: Add an "alert-sink" property.



commit 616f0b140bb937d7afeb46f834e32e8c51a67e1e
Author: Matthew Barnes <mbarnes redhat com>
Date:   Sun Oct 31 17:11:35 2010 -0400

    EActivity: Add an "alert-sink" property.
    
    This is just for convenience, EActivity does not use this property.
    
    Especially useful in async function callbacks when the operation
    failed and now you have to do something useful with the GError.

 composer/e-msg-composer.c                   |   42 ++++++++++++---
 doc/reference/shell/eshell-sections.txt     |    3 +-
 doc/reference/shell/tmpl/e-activity.sgml    |   16 ++++--
 doc/reference/shell/tmpl/eshell-unused.sgml |    9 +++
 e-util/e-activity.c                         |   75 ++++++++++++++++++++------
 e-util/e-activity.h                         |    6 ++-
 mail/em-composer-utils.c                    |   15 ++++--
 7 files changed, 129 insertions(+), 37 deletions(-)
---
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index 2bca57d..48410f8 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -3499,9 +3499,12 @@ msg_composer_send_cb (EMsgComposer *composer,
                       AsyncContext *context)
 {
 	CamelMimeMessage *message;
+	EAlertSink *alert_sink;
 	GtkhtmlEditor *editor;
 	GError *error = NULL;
 
+	alert_sink = e_activity_get_alert_sink (context->activity);
+
 	message = e_msg_composer_get_message_finish (composer, result, &error);
 
 	/* Ignore cancellations. */
@@ -3514,11 +3517,11 @@ msg_composer_send_cb (EMsgComposer *composer,
 
 	if (error != NULL) {
 		g_warn_if_fail (message == NULL);
-		async_context_free (context);
 		e_alert_submit (
-			E_ALERT_SINK (composer),
+			alert_sink,
 			"mail-composer:no-build-message",
 			error->message, NULL);
+		async_context_free (context);
 		g_error_free (error);
 		return;
 	}
@@ -3548,6 +3551,7 @@ void
 e_msg_composer_send (EMsgComposer *composer)
 {
 	AsyncContext *context;
+	EAlertSink *alert_sink;
 	EActivityBar *activity_bar;
 	GCancellable *cancellable;
 	gboolean proceed_with_send = TRUE;
@@ -3563,6 +3567,9 @@ e_msg_composer_send (EMsgComposer *composer)
 	context = g_slice_new0 (AsyncContext);
 	context->activity = e_composer_activity_new (composer);
 
+	alert_sink = E_ALERT_SINK (composer);
+	e_activity_set_alert_sink (context->activity, alert_sink);
+
 	cancellable = camel_operation_new ();
 	e_activity_set_cancellable (context->activity, cancellable);
 	g_object_unref (cancellable);
@@ -3582,9 +3589,12 @@ msg_composer_save_to_drafts_cb (EMsgComposer *composer,
                                 AsyncContext *context)
 {
 	CamelMimeMessage *message;
+	EAlertSink *alert_sink;
 	GtkhtmlEditor *editor;
 	GError *error = NULL;
 
+	alert_sink = e_activity_get_alert_sink (context->activity);
+
 	message = e_msg_composer_get_message_draft_finish (
 		composer, result, &error);
 
@@ -3598,11 +3608,11 @@ msg_composer_save_to_drafts_cb (EMsgComposer *composer,
 
 	if (error != NULL) {
 		g_warn_if_fail (message == NULL);
-		async_context_free (context);
 		e_alert_submit (
-			E_ALERT_SINK (composer),
+			alert_sink,
 			"mail-composer:no-build-message",
 			error->message, NULL);
+		async_context_free (context);
 		g_error_free (error);
 		return;
 	}
@@ -3632,6 +3642,7 @@ void
 e_msg_composer_save_to_drafts (EMsgComposer *composer)
 {
 	AsyncContext *context;
+	EAlertSink *alert_sink;
 	EActivityBar *activity_bar;
 	GCancellable *cancellable;
 
@@ -3640,6 +3651,9 @@ e_msg_composer_save_to_drafts (EMsgComposer *composer)
 	context = g_slice_new0 (AsyncContext);
 	context->activity = e_composer_activity_new (composer);
 
+	alert_sink = E_ALERT_SINK (composer);
+	e_activity_set_alert_sink (context->activity, alert_sink);
+
 	cancellable = camel_operation_new ();
 	e_activity_set_cancellable (context->activity, cancellable);
 	g_object_unref (cancellable);
@@ -3659,9 +3673,12 @@ msg_composer_save_to_outbox_cb (EMsgComposer *composer,
                                 AsyncContext *context)
 {
 	CamelMimeMessage *message;
+	EAlertSink *alert_sink;
 	GtkhtmlEditor *editor;
 	GError *error = NULL;
 
+	alert_sink = e_activity_get_alert_sink (context->activity);
+
 	message = e_msg_composer_get_message_finish (composer, result, &error);
 
 	/* Ignore cancellations. */
@@ -3674,11 +3691,11 @@ msg_composer_save_to_outbox_cb (EMsgComposer *composer,
 
 	if (error != NULL) {
 		g_warn_if_fail (message == NULL);
-		async_context_free (context);
 		e_alert_submit (
-			E_ALERT_SINK (composer),
+			alert_sink,
 			"mail-composer:no-build-message",
 			error->message, NULL);
+		async_context_free (context);
 		g_error_free (error);
 		return;
 	}
@@ -3708,6 +3725,7 @@ void
 e_msg_composer_save_to_outbox (EMsgComposer *composer)
 {
 	AsyncContext *context;
+	EAlertSink *alert_sink;
 	EActivityBar *activity_bar;
 	GCancellable *cancellable;
 	gboolean proceed_with_save = TRUE;
@@ -3723,6 +3741,9 @@ e_msg_composer_save_to_outbox (EMsgComposer *composer)
 	context = g_slice_new0 (AsyncContext);
 	context->activity = e_composer_activity_new (composer);
 
+	alert_sink = E_ALERT_SINK (composer);
+	e_activity_set_alert_sink (context->activity, alert_sink);
+
 	cancellable = camel_operation_new ();
 	e_activity_set_cancellable (context->activity, cancellable);
 	g_object_unref (cancellable);
@@ -3742,8 +3763,11 @@ msg_composer_print_cb (EMsgComposer *composer,
                        AsyncContext *context)
 {
 	CamelMimeMessage *message;
+	EAlertSink *alert_sink;
 	GError *error = NULL;
 
+	alert_sink = e_activity_get_alert_sink (context->activity);
+
 	message = e_msg_composer_get_message_print_finish (
 		composer, result, &error);
 
@@ -3759,7 +3783,7 @@ msg_composer_print_cb (EMsgComposer *composer,
 		g_warn_if_fail (message == NULL);
 		async_context_free (context);
 		e_alert_submit (
-			E_ALERT_SINK (composer),
+			alert_sink,
 			"mail-composer:no-build-message",
 			error->message, NULL);
 		g_error_free (error);
@@ -3789,6 +3813,7 @@ e_msg_composer_print (EMsgComposer *composer,
                       GtkPrintOperationAction print_action)
 {
 	AsyncContext *context;
+	EAlertSink *alert_sink;
 	EActivityBar *activity_bar;
 	GCancellable *cancellable;
 
@@ -3798,6 +3823,9 @@ e_msg_composer_print (EMsgComposer *composer,
 	context->activity = e_composer_activity_new (composer);
 	context->print_action = print_action;
 
+	alert_sink = E_ALERT_SINK (composer);
+	e_activity_set_alert_sink (context->activity, alert_sink);
+
 	cancellable = camel_operation_new ();
 	e_activity_set_cancellable (context->activity, cancellable);
 	g_object_unref (cancellable);
diff --git a/doc/reference/shell/eshell-sections.txt b/doc/reference/shell/eshell-sections.txt
index 6e03f4d..12f6666 100644
--- a/doc/reference/shell/eshell-sections.txt
+++ b/doc/reference/shell/eshell-sections.txt
@@ -470,10 +470,11 @@ EActionComboBoxPrivate
 <FILE>e-activity</FILE>
 EActivity
 e_activity_new
-e_activity_newv
 e_activity_complete
 e_activity_describe
 e_activity_is_completed
+e_activity_get_alert_sink
+e_activity_set_alert_sink
 e_activity_get_cancellable
 e_activity_set_cancellable
 e_activity_get_icon_name
diff --git a/doc/reference/shell/tmpl/e-activity.sgml b/doc/reference/shell/tmpl/e-activity.sgml
index 1d4d1b3..3d9fb20 100644
--- a/doc/reference/shell/tmpl/e-activity.sgml
+++ b/doc/reference/shell/tmpl/e-activity.sgml
@@ -35,17 +35,16 @@ e-activity
 @Returns: 
 
 
-<!-- ##### FUNCTION e_activity_newv ##### -->
+<!-- ##### FUNCTION e_activity_describe ##### -->
 <para>
 
 </para>
 
- format: 
- Varargs: 
+ activity: 
 @Returns: 
 
 
-<!-- ##### FUNCTION e_activity_describe ##### -->
+<!-- ##### FUNCTION e_activity_get_alert_sink ##### -->
 <para>
 
 </para>
@@ -54,6 +53,15 @@ e-activity
 @Returns: 
 
 
+<!-- ##### FUNCTION e_activity_set_alert_sink ##### -->
+<para>
+
+</para>
+
+ activity: 
+ alert_sink: 
+
+
 <!-- ##### FUNCTION e_activity_get_cancellable ##### -->
 <para>
 
diff --git a/doc/reference/shell/tmpl/eshell-unused.sgml b/doc/reference/shell/tmpl/eshell-unused.sgml
index 2b172b2..0ce25a6 100644
--- a/doc/reference/shell/tmpl/eshell-unused.sgml
+++ b/doc/reference/shell/tmpl/eshell-unused.sgml
@@ -307,6 +307,15 @@ e-shell-window.sgml
 @activity: 
 @Returns: 
 
+<!-- ##### FUNCTION e_activity_newv ##### -->
+<para>
+
+</para>
+
+ format: 
+ Varargs: 
+ Returns: 
+
 <!-- ##### FUNCTION e_activity_set_allow_cancel ##### -->
 <para>
 
diff --git a/e-util/e-activity.c b/e-util/e-activity.c
index 7e0cb1c..74d0eed 100644
--- a/e-util/e-activity.c
+++ b/e-util/e-activity.c
@@ -34,6 +34,7 @@
 
 struct _EActivityPrivate {
 	GCancellable *cancellable;
+	EAlertSink *alert_sink;
 	EActivityState state;
 
 	gchar *icon_name;
@@ -43,6 +44,7 @@ struct _EActivityPrivate {
 
 enum {
 	PROP_0,
+	PROP_ALERT_SINK,
 	PROP_CANCELLABLE,
 	PROP_ICON_NAME,
 	PROP_PERCENT,
@@ -75,6 +77,12 @@ activity_set_property (GObject *object,
                        GParamSpec *pspec)
 {
 	switch (property_id) {
+		case PROP_ALERT_SINK:
+			e_activity_set_alert_sink (
+				E_ACTIVITY (object),
+				g_value_get_object (value));
+			return;
+
 		case PROP_CANCELLABLE:
 			e_activity_set_cancellable (
 				E_ACTIVITY (object),
@@ -116,6 +124,12 @@ activity_get_property (GObject *object,
                        GParamSpec *pspec)
 {
 	switch (property_id) {
+		case PROP_ALERT_SINK:
+			g_value_set_object (
+				value, e_activity_get_alert_sink (
+				E_ACTIVITY (object)));
+			return;
+
 		case PROP_CANCELLABLE:
 			g_value_set_object (
 				value, e_activity_get_cancellable (
@@ -157,6 +171,11 @@ activity_dispose (GObject *object)
 
 	priv = E_ACTIVITY_GET_PRIVATE (object);
 
+	if (priv->alert_sink != NULL) {
+		g_object_unref (priv->alert_sink);
+		priv->alert_sink = NULL;
+	}
+
 	if (priv->cancellable != NULL) {
 		g_signal_handlers_disconnect_matched (
 			priv->cancellable,
@@ -245,6 +264,17 @@ e_activity_class_init (EActivityClass *class)
 
 	g_object_class_install_property (
 		object_class,
+		PROP_ALERT_SINK,
+		g_param_spec_object (
+			"alert-sink",
+			NULL,
+			NULL,
+			E_TYPE_ALERT_SINK,
+			G_PARAM_READWRITE |
+			G_PARAM_CONSTRUCT));
+
+	g_object_class_install_property (
+		object_class,
 		PROP_CANCELLABLE,
 		g_param_spec_object (
 			"cancellable",
@@ -314,24 +344,6 @@ e_activity_new (void)
 	return g_object_new (E_TYPE_ACTIVITY, NULL);
 }
 
-EActivity *
-e_activity_newv (const gchar *format, ...)
-{
-	EActivity *activity;
-	gchar *text;
-	va_list args;
-
-	activity = e_activity_new ();
-
-	va_start (args, format);
-	text = g_strdup_vprintf (format, args);
-	e_activity_set_text (activity, text);
-	g_free (text);
-	va_end (args);
-
-	return activity;
-}
-
 gchar *
 e_activity_describe (EActivity *activity)
 {
@@ -345,6 +357,33 @@ e_activity_describe (EActivity *activity)
 	return class->describe (activity);
 }
 
+EAlertSink *
+e_activity_get_alert_sink (EActivity *activity)
+{
+	g_return_val_if_fail (E_IS_ACTIVITY (activity), NULL);
+
+	return activity->priv->alert_sink;
+}
+
+void
+e_activity_set_alert_sink (EActivity *activity,
+                           EAlertSink *alert_sink)
+{
+	g_return_if_fail (E_IS_ACTIVITY (activity));
+
+	if (alert_sink != NULL) {
+		g_return_if_fail (E_IS_ALERT_SINK (alert_sink));
+		g_object_ref (alert_sink);
+	}
+
+	if (activity->priv->alert_sink != NULL)
+		g_object_unref (activity->priv->alert_sink);
+
+	activity->priv->alert_sink = alert_sink;
+
+	g_object_notify (G_OBJECT (activity), "alert-sink");
+}
+
 GCancellable *
 e_activity_get_cancellable (EActivity *activity)
 {
diff --git a/e-util/e-activity.h b/e-util/e-activity.h
index 63195b7..4602a56 100644
--- a/e-util/e-activity.h
+++ b/e-util/e-activity.h
@@ -23,6 +23,7 @@
 #define E_ACTIVITY_H
 
 #include <gtk/gtk.h>
+#include <e-util/e-alert-sink.h>
 #include <e-util/e-util-enums.h>
 
 /* Standard GObject macros */
@@ -64,9 +65,10 @@ struct _EActivityClass {
 
 GType		e_activity_get_type		(void);
 EActivity *	e_activity_new			(void);
-EActivity *	e_activity_newv			(const gchar *format,
-						 ...) G_GNUC_PRINTF (1, 2);
 gchar *		e_activity_describe		(EActivity *activity);
+EAlertSink *	e_activity_get_alert_sink	(EActivity *activity);
+void		e_activity_set_alert_sink	(EActivity *activity,
+						 EAlertSink *alert_sink);
 GCancellable *	e_activity_get_cancellable	(EActivity *activity);
 void		e_activity_set_cancellable	(EActivity *activity,
 						 GCancellable *cancellable);
diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c
index 85d5bb2..99df9ed 100644
--- a/mail/em-composer-utils.c
+++ b/mail/em-composer-utils.c
@@ -598,9 +598,14 @@ composer_save_to_drafts_cleanup (CamelFolder *drafts_folder,
                                  AsyncContext *context)
 {
 	CamelSession *session;
+	EAlertSink *alert_sink;
 	GCancellable *cancellable;
 	GError *error = NULL;
 
+	session = e_msg_composer_get_session (context->composer);
+	alert_sink = e_activity_get_alert_sink (context->activity);
+	cancellable = e_activity_get_cancellable (context->activity);
+
 	e_mail_folder_append_message_finish (
 		drafts_folder, result, &context->message_uid, &error);
 
@@ -615,7 +620,7 @@ composer_save_to_drafts_cleanup (CamelFolder *drafts_folder,
 	if (error != NULL) {
 		g_warn_if_fail (context->message_uid == NULL);
 		e_alert_submit (
-			E_ALERT_SINK (context->composer),
+			alert_sink,
 			"mail-composer:save-to-drafts-error",
 			error->message, NULL);
 		async_context_free (context);
@@ -623,9 +628,6 @@ composer_save_to_drafts_cleanup (CamelFolder *drafts_folder,
 		return;
 	}
 
-	session = e_msg_composer_get_session (context->composer);
-	cancellable = e_activity_get_cancellable (context->activity);
-
 	/* Mark the previously saved draft message for deletion.
 	 * Note: This is just a nice-to-have; ignore failures. */
 	e_mail_session_handle_draft_headers (
@@ -761,8 +763,11 @@ composer_save_to_outbox_completed (CamelFolder *outbox_folder,
                                    GAsyncResult *result,
                                    AsyncContext *context)
 {
+	EAlertSink *alert_sink;
 	GError *error = NULL;
 
+	alert_sink = e_activity_get_alert_sink (context->activity);
+
 	e_mail_folder_append_message_finish (
 		outbox_folder, result, NULL, &error);
 
@@ -775,7 +780,7 @@ composer_save_to_outbox_completed (CamelFolder *outbox_folder,
 
 	if (error != NULL) {
 		e_alert_submit (
-			E_ALERT_SINK (context->composer),
+			alert_sink,
 			"mail-composer:append-to-outbox-error",
 			error->message, NULL);
 		g_error_free (error);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]