[evolution] MailFolderCache: Add a read-only "main-context" property.
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] MailFolderCache: Add a read-only "main-context" property.
- Date: Wed, 17 Jul 2013 16:10:15 +0000 (UTC)
commit 079fc1a78d35d79350b7390ca3a76f65f9f22841
Author: Matthew Barnes <mbarnes redhat com>
Date: Tue Jul 16 10:16:24 2013 -0400
MailFolderCache: Add a read-only "main-context" property.
New functions:
mail_folder_cache_ref_main_context()
libemail-engine/mail-folder-cache.c | 60 +++++++++++++++++++++++++++++++++++
libemail-engine/mail-folder-cache.h | 2 +
2 files changed, 62 insertions(+), 0 deletions(-)
---
diff --git a/libemail-engine/mail-folder-cache.c b/libemail-engine/mail-folder-cache.c
index 745bd5b..7c778ca 100644
--- a/libemail-engine/mail-folder-cache.c
+++ b/libemail-engine/mail-folder-cache.c
@@ -60,6 +60,8 @@
typedef struct _StoreInfo StoreInfo;
struct _MailFolderCachePrivate {
+ GMainContext *main_context;
+
/* source id for the ping timeout callback */
guint ping_id;
/* Store to storeinfo table, active stores */
@@ -79,6 +81,11 @@ struct _MailFolderCachePrivate {
};
enum {
+ PROP_0,
+ PROP_MAIN_CONTEXT,
+};
+
+enum {
FOLDER_AVAILABLE,
FOLDER_UNAVAILABLE,
FOLDER_DELETED,
@@ -1059,12 +1066,32 @@ storeinfo_find_folder_info (CamelStore *store,
}
static void
+mail_folder_cache_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ switch (property_id) {
+ case PROP_MAIN_CONTEXT:
+ g_value_take_boxed (
+ value,
+ mail_folder_cache_ref_main_context (
+ MAIL_FOLDER_CACHE (object)));
+ return;
+ }
+
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
mail_folder_cache_finalize (GObject *object)
{
MailFolderCachePrivate *priv;
priv = MAIL_FOLDER_CACHE_GET_PRIVATE (object);
+ g_main_context_unref (priv->main_context);
+
g_hash_table_destroy (priv->stores);
g_rec_mutex_clear (&priv->stores_mutex);
@@ -1252,12 +1279,25 @@ mail_folder_cache_class_init (MailFolderCacheClass *class)
g_type_class_add_private (class, sizeof (MailFolderCachePrivate));
object_class = G_OBJECT_CLASS (class);
+ object_class->get_property = mail_folder_cache_get_property;
object_class->finalize = mail_folder_cache_finalize;
class->folder_available = mail_folder_cache_folder_available;
class->folder_unavailable = mail_folder_cache_folder_unavailable;
class->folder_deleted = mail_folder_cache_folder_deleted;
+ g_object_class_install_property (
+ object_class,
+ PROP_MAIN_CONTEXT,
+ g_param_spec_boxed (
+ "main-context",
+ "Main Context",
+ "The main loop context on "
+ "which to attach event sources",
+ G_TYPE_MAIN_CONTEXT,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
/**
* MailFolderCache::folder-available
* @store: the #CamelStore containing the folder
@@ -1384,6 +1424,7 @@ mail_folder_cache_init (MailFolderCache *cache)
guint timeout;
cache->priv = MAIL_FOLDER_CACHE_GET_PRIVATE (cache);
+ cache->priv->main_context = g_main_context_ref_thread_default ();
/* initialize values */
cache->priv->stores = g_hash_table_new (NULL, NULL);
@@ -1409,6 +1450,25 @@ mail_folder_cache_new (void)
}
/**
+ * mail_folder_cache_ref_main_context:
+ *
+ * Returns the #GMainContext on which event sources for @cache are to be
+ * attached.
+ *
+ * The returned #GMainContext is referenced for thread-safety and should
+ * be unreferenced with g_main_context_unref() when finished with it.
+ *
+ * Returns: a #GMainContext
+ **/
+GMainContext *
+mail_folder_cache_ref_main_context (MailFolderCache *cache)
+{
+ g_return_val_if_fail (MAIL_IS_FOLDER_CACHE (cache), NULL);
+
+ return g_main_context_ref (cache->priv->main_context);
+}
+
+/**
* mail_folder_cache_note_store:
*
* Add a store whose folders should appear in the shell The folders are scanned
diff --git a/libemail-engine/mail-folder-cache.h b/libemail-engine/mail-folder-cache.h
index e1547f1..4581552 100644
--- a/libemail-engine/mail-folder-cache.h
+++ b/libemail-engine/mail-folder-cache.h
@@ -108,6 +108,8 @@ struct _MailFolderCacheClass {
GType mail_folder_cache_get_type (void) G_GNUC_CONST;
MailFolderCache *
mail_folder_cache_new (void);
+GMainContext * mail_folder_cache_ref_main_context
+ (MailFolderCache *cache);
void mail_folder_cache_note_store (MailFolderCache *cache,
CamelStore *store,
GCancellable *cancellable,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]