[evolution-data-server] CamelSession: Add a read-only "main-context" property.



commit 6d555a21dc1aa29da9c2778a817109206d0b14bf
Author: Matthew Barnes <mbarnes redhat com>
Date:   Sat May 19 08:35:14 2012 -0400

    CamelSession: Add a read-only "main-context" property.

 camel/camel-session.c                   |   50 ++++++++++++++++++++++++++----
 camel/camel-session.h                   |    1 +
 docs/reference/camel/camel-sections.txt |    1 +
 3 files changed, 45 insertions(+), 7 deletions(-)
---
diff --git a/camel/camel-session.c b/camel/camel-session.c
index 2226241..d45994f 100644
--- a/camel/camel-session.c
+++ b/camel/camel-session.c
@@ -71,7 +71,7 @@ struct _CamelSessionPrivate {
 	GHashTable *junk_headers;
 	CamelJunkFilter *junk_filter;
 
-	GMainContext *context;
+	GMainContext *main_context;
 
 	guint check_junk        : 1;
 	guint network_available : 1;
@@ -95,6 +95,7 @@ enum {
 	PROP_0,
 	PROP_CHECK_JUNK,
 	PROP_JUNK_FILTER,
+	PROP_MAIN_CONTEXT,
 	PROP_NETWORK_AVAILABLE,
 	PROP_ONLINE,
 	PROP_USER_DATA_DIR,
@@ -287,6 +288,12 @@ session_get_property (GObject *object,
 				CAMEL_SESSION (object)));
 			return;
 
+		case PROP_MAIN_CONTEXT:
+			g_value_set_boxed (
+				value, camel_session_get_main_context (
+				CAMEL_SESSION (object)));
+			return;
+
 		case PROP_NETWORK_AVAILABLE:
 			g_value_set_boolean (
 				value, camel_session_get_network_available (
@@ -345,8 +352,8 @@ session_finalize (GObject *object)
 
 	g_hash_table_destroy (priv->services);
 
-	if (priv->context != NULL)
-		g_main_context_unref (priv->context);
+	if (priv->main_context != NULL)
+		g_main_context_unref (priv->main_context);
 
 	g_mutex_free (priv->lock);
 	g_mutex_free (priv->thread_lock);
@@ -658,6 +665,17 @@ camel_session_class_init (CamelSessionClass *class)
 
 	g_object_class_install_property (
 		object_class,
+		PROP_MAIN_CONTEXT,
+		g_param_spec_boxed (
+			"main-context",
+			"Main Context",
+			"The GMainContext used for signal emissions",
+			G_TYPE_MAIN_CONTEXT,
+			G_PARAM_READABLE |
+			G_PARAM_STATIC_STRINGS));
+
+	g_object_class_install_property (
+		object_class,
 		PROP_NETWORK_AVAILABLE,
 		g_param_spec_boolean (
 			"network-available",
@@ -744,9 +762,27 @@ camel_session_init (CamelSession *session)
 	session->priv->services = services;
 	session->priv->junk_headers = NULL;
 
-	session->priv->context = g_main_context_get_thread_default ();
-	if (session->priv->context != NULL)
-		g_main_context_ref (session->priv->context);
+	session->priv->main_context = g_main_context_ref_thread_default ();
+}
+
+/**
+ * camel_session_get_main_context:
+ * @session: a #CamelSession
+ *
+ * Returns the #GMainContext from which signals are emitted.  This
+ * was the thread-default #GMainContext for the thread where @session
+ * was instantiated.
+ *
+ * Returns: the #GMainContext for signal emissions
+ *
+ * Since: 3.6
+ **/
+GMainContext *
+camel_session_get_main_context (CamelSession *session)
+{
+	g_return_val_if_fail (CAMEL_IS_SESSION (session), NULL);
+
+	return session->priv->main_context;
 }
 
 /**
@@ -1375,7 +1411,7 @@ camel_session_submit_job (CamelSession *session,
 	g_source_set_callback (
 		source, (GSourceFunc) session_start_job_cb,
 		job_data, (GDestroyNotify) NULL);
-	g_source_attach (source, job_data->session->priv->context);
+	g_source_attach (source, job_data->session->priv->main_context);
 	g_source_unref (source);
 }
 
diff --git a/camel/camel-session.h b/camel/camel-session.h
index 3ecb0bc..b03ec78 100644
--- a/camel/camel-session.h
+++ b/camel/camel-session.h
@@ -170,6 +170,7 @@ struct _CamelSessionClass {
 };
 
 GType		camel_session_get_type		(void);
+GMainContext *	camel_session_get_main_context	(CamelSession *session);
 const gchar *	camel_session_get_user_data_dir	(CamelSession *session);
 const gchar *	camel_session_get_user_cache_dir
 						(CamelSession *session);
diff --git a/docs/reference/camel/camel-sections.txt b/docs/reference/camel/camel-sections.txt
index a8f10e5..e7afd25 100644
--- a/docs/reference/camel/camel-sections.txt
+++ b/docs/reference/camel/camel-sections.txt
@@ -2005,6 +2005,7 @@ camel_service_error_quark
 <TITLE>CamelSession</TITLE>
 CamelSession
 CamelSessionAlertType
+camel_session_get_main_context
 camel_session_get_user_data_dir
 camel_session_get_user_cache_dir
 camel_session_get_socks_proxy



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