[evolution] Add signals to MailFolderCache for common events



commit 6e73a7a8f31c3b890ad900960a24b930cfeb13ed
Author: Jonathon Jongsma <jonathon quotidian org>
Date:   Thu Dec 10 17:35:29 2009 -0600

    Add signals to MailFolderCache for common events
    
    This will allow us to decouple ourselves from some of the current dependencies,
    such as the folder treemodel, the shell, etc.  This just defines the signals,
    the next step is to refactor things and actually make other classes use them.
    
    We need one additional signal yet related to indicating the new unread emails,
    but that one will require a little more thought I think.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=604627

 e-util/e-marshal.list    |    3 ++
 mail/mail-folder-cache.c |   83 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 86 insertions(+), 0 deletions(-)
---
diff --git a/e-util/e-marshal.list b/e-util/e-marshal.list
index 813234b..4346d43 100644
--- a/e-util/e-marshal.list
+++ b/e-util/e-marshal.list
@@ -38,6 +38,9 @@ NONE:POINTER,INT,INT,INT,INT
 NONE:POINTER,INT,OBJECT
 NONE:POINTER,POINTER
 NONE:POINTER,POINTER,INT
+NONE:POINTER,STRING
+NONE:POINTER,STRING,STRING
+NONE:POINTER,STRING,INT
 NONE:STRING,DOUBLE
 NONE:STRING,INT,INT
 NONE:STRING,POINTER,POINTER
diff --git a/mail/mail-folder-cache.c b/mail/mail-folder-cache.c
index 39ef7d2..9d9a9b4 100644
--- a/mail/mail-folder-cache.c
+++ b/mail/mail-folder-cache.c
@@ -49,6 +49,7 @@
 
 #include <libedataserver/e-data-server-util.h>
 #include "shell/e-shell.h"
+#include "e-util/e-marshal.h"
 
 #include "mail-mt.h"
 #include "mail-folder-cache.h"
@@ -94,6 +95,17 @@ struct _MailFolderCachePrivate
 	gint count_trash;
 };
 
+enum
+{
+	FOLDER_AVAILABLE,
+	FOLDER_UNAVAILABLE,
+	FOLDER_DELETED,
+	FOLDER_RENAMED,
+	LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
 struct _folder_info {
 	struct _store_info *store_info;	/* 'parent' link */
 
@@ -1197,6 +1209,77 @@ mail_folder_cache_class_init (MailFolderCacheClass *klass)
 
 	object_class->dispose = mail_folder_cache_dispose;
 	object_class->finalize = mail_folder_cache_finalize;
+
+	/**
+	 * MailFolderCache::folder-available
+	 * @store: the #CamelStore containing the folder
+	 * @uri: the uri of the folder
+	 *
+	 * Emitted when a folder becomes available
+	 **/
+	signals[FOLDER_AVAILABLE] =
+		g_signal_new ("folder-available",
+			      G_OBJECT_CLASS_TYPE (object_class),
+			      G_SIGNAL_RUN_FIRST,
+			      0, /* struct offset */
+			      NULL, NULL, /* accumulator */
+			      e_marshal_VOID__POINTER_STRING,
+			      G_TYPE_NONE, 2,
+			      G_TYPE_POINTER, G_TYPE_STRING);
+
+	/**
+	 * MailFolderCache::folder-unavailable
+	 * @store: the #CamelStore containing the folder
+	 * @uri: the uri of the folder
+	 *
+	 * Emitted when a folder becomes unavailable.  This represents a
+	 * transient condition.  See MailFolderCache::folder-deleted to be
+	 * notified when a folder is permanently removed.
+	 **/
+	signals[FOLDER_UNAVAILABLE] =
+		g_signal_new ("folder-unavailable",
+			      G_OBJECT_CLASS_TYPE (object_class),
+			      G_SIGNAL_RUN_FIRST,
+			      0, /* struct offset */
+			      NULL, NULL, /* accumulator */
+			      e_marshal_VOID__POINTER_STRING,
+			      G_TYPE_NONE, 2,
+			      G_TYPE_POINTER, G_TYPE_STRING);
+
+	/**
+	 * MailFolderCache::folder-deleted
+	 * @store: the #CamelStore containing the folder
+	 * @uri: the uri of the folder
+	 *
+	 * Emitted when a folder is deleted
+	 **/
+	signals[FOLDER_DELETED] =
+		g_signal_new ("folder-deleted",
+			      G_OBJECT_CLASS_TYPE (object_class),
+			      G_SIGNAL_RUN_FIRST,
+			      0, /* struct offset */
+			      NULL, NULL, /* accumulator */
+			      e_marshal_VOID__POINTER_STRING,
+			      G_TYPE_NONE, 2,
+			      G_TYPE_POINTER, G_TYPE_STRING);
+
+	/**
+	 * MailFolderCache::folder-renamed
+	 * @store: the #CamelStore containing the folder
+	 * @old_uri: the old uri of the folder
+	 * @new_uri: the new uri of the folder
+	 *
+	 * Emitted when a folder is renamed
+	 **/
+	signals[FOLDER_RENAMED] =
+		g_signal_new ("folder-renamed",
+			      G_OBJECT_CLASS_TYPE (object_class),
+			      G_SIGNAL_RUN_FIRST,
+			      0, /* struct offset */
+			      NULL, NULL, /* accumulator */
+			      e_marshal_VOID__POINTER_STRING_STRING,
+			      G_TYPE_NONE, 3,
+			      G_TYPE_POINTER, G_TYPE_STRING, G_TYPE_STRING);
 }
 
 static void



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