[evolution-data-server] Emit CamelFolder and CamelStore signals from idle callbacks.



commit 7fa0dd78305677d14839a480fc379ebba3a6d55c
Author: Matthew Barnes <mbarnes redhat com>
Date:   Thu Sep 30 12:51:44 2010 -0400

    Emit CamelFolder and CamelStore signals from idle callbacks.
    
    Clients will likely have to redirect these signals back to the main loop
    thread anyway, so save them the pain.  This should allow me to remove a
    bunch more redirection cruft from Evolution.
    
    TODO: Check where Camel connects to these signals internally and make
          sure the signal handlers don't block.  Should be easy since most
          blocking function names now end in "sync".

 camel/camel-folder.c                               |  106 ++++++++--
 camel/camel-folder.h                               |    2 +-
 camel/camel-store.c                                |  236 +++++++++++++++++---
 camel/camel-store.h                                |   22 +-
 docs/reference/camel/camel-sections.txt            |    1 +
 .../reference/camel/tmpl/camel-cipher-context.sgml |    4 +
 docs/reference/camel/tmpl/camel-folder.sgml        |    2 +-
 docs/reference/camel/tmpl/camel-store.sgml         |   19 ++-
 8 files changed, 329 insertions(+), 63 deletions(-)
---
diff --git a/camel/camel-folder.c b/camel/camel-folder.c
index 66cda68..7469990 100644
--- a/camel/camel-folder.c
+++ b/camel/camel-folder.c
@@ -50,6 +50,7 @@
 #define w(x)
 
 typedef struct _AsyncContext AsyncContext;
+typedef struct _SignalData SignalData;
 
 struct _CamelFolderPrivate {
 	GStaticRecMutex lock;
@@ -87,6 +88,12 @@ struct _CamelFolderChangeInfoPrivate {
 	CamelMemPool *uid_pool;	/* pool used to store copies of uid strings */
 };
 
+struct _SignalData {
+	CamelFolder *folder;
+	CamelFolderChangeInfo *changes;
+	gchar *folder_name;
+};
+
 struct _folder_filter_msg {
 	CamelSessionThreadMsg msg;
 
@@ -149,6 +156,44 @@ async_context_free (AsyncContext *async_context)
 }
 
 static void
+signal_data_free (SignalData *data)
+{
+	if (data->folder != NULL)
+		g_object_unref (data->folder);
+
+	if (data->changes != NULL)
+		camel_folder_change_info_free (data->changes);
+
+	g_free (data->folder_name);
+
+	g_slice_free (SignalData, data);
+}
+
+static gboolean
+folder_emit_changed_cb (SignalData *data)
+{
+	g_signal_emit (data->folder, signals[CHANGED], 0, data->changes);
+
+	return FALSE;
+}
+
+static gboolean
+folder_emit_deleted_cb (SignalData *data)
+{
+	g_signal_emit (data->folder, signals[DELETED], 0);
+
+	return FALSE;
+}
+
+static gboolean
+folder_emit_renamed_cb (SignalData *data)
+{
+	g_signal_emit (data->folder, signals[RENAMED], 0, data->folder_name);
+
+	return FALSE;
+}
+
+static void
 filter_filter (CamelSession *session,
                CamelSessionThreadMsg *tmsg)
 {
@@ -773,7 +818,7 @@ folder_thaw (CamelFolder *folder)
 	camel_folder_unlock (folder, CAMEL_FOLDER_CHANGE_LOCK);
 
 	if (info) {
-		g_signal_emit (folder, signals[CHANGED], 0, info);
+		camel_folder_changed (folder, info);
 		camel_folder_change_info_free (info);
 	}
 }
@@ -2440,13 +2485,17 @@ camel_folder_search_free (CamelFolder *folder,
  * camel_folder_delete:
  * @folder: a #CamelFolder
  *
- * Marks a folder object as deleted and performs any required cleanup.
+ * Marks @folder as deleted and performs any required cleanup.
+ *
+ * This also emits the #CamelFolder::deleted signal from an idle source on
+ * the main loop.  The idle source's priority is #G_PRIORITY_DEFAULT_IDLE.
  **/
 void
 camel_folder_delete (CamelFolder *folder)
 {
 	CamelFolderClass *class;
 	CamelStore *parent_store;
+	SignalData *data;
 	const gchar *full_name;
 
 	g_return_if_fail (CAMEL_IS_FOLDER (folder));
@@ -2471,43 +2520,58 @@ camel_folder_delete (CamelFolder *folder)
 	parent_store = camel_folder_get_parent_store (folder);
 	camel_db_delete_folder (parent_store->cdb_w, full_name, NULL);
 
-	g_signal_emit (folder, signals[DELETED], 0);
+	data = g_slice_new0 (SignalData);
+	data->folder = g_object_ref (folder);
+
+	g_idle_add_full (
+		G_PRIORITY_DEFAULT_IDLE,
+		(GSourceFunc) folder_emit_deleted_cb,
+		data, (GDestroyNotify) signal_data_free);
 }
 
 /**
  * camel_folder_rename:
  * @folder: a #CamelFolder
- * @new: new name for the folder
+ * @new_name: new name for the folder
+ *
+ * Marks @folder as renamed.
  *
- * Mark an active folder object as renamed.
+ * This also emits the #CamelFolder::renamed signal from an idle source on
+ * the main loop.  The idle source's priority is #G_PRIORITY_DEFAULT_IDLE.
  *
  * NOTE: This is an internal function used by camel stores, no locking
  * is performed on the folder.
  **/
 void
 camel_folder_rename (CamelFolder *folder,
-                     const gchar *new)
+                     const gchar *new_name)
 {
 	CamelFolderClass *class;
 	CamelStore *parent_store;
-	gchar *old;
+	SignalData *data;
+	gchar *old_name;
 
 	g_return_if_fail (CAMEL_IS_FOLDER (folder));
-	g_return_if_fail (new != NULL);
+	g_return_if_fail (new_name != NULL);
 
 	class = CAMEL_FOLDER_GET_CLASS (folder);
 	g_return_if_fail (class->rename != NULL);
 
-	old = g_strdup (camel_folder_get_full_name (folder));
+	old_name = g_strdup (camel_folder_get_full_name (folder));
 
-	class->rename (folder, new);
+	class->rename (folder, new_name);
 
 	parent_store = camel_folder_get_parent_store (folder);
-	camel_db_rename_folder (parent_store->cdb_w, old, new, NULL);
+	camel_db_rename_folder (parent_store->cdb_w, old_name, new_name, NULL);
 
-	g_signal_emit (folder, signals[RENAMED], 0, old);
+	data = g_slice_new0 (SignalData);
+	data->folder = g_object_ref (folder);
+	data->folder_name = old_name;  /* transfer ownership */
 
-	g_free (old);
+	g_idle_add_full (
+		G_PRIORITY_DEFAULT_IDLE,
+		(GSourceFunc) folder_emit_renamed_cb,
+		data, (GDestroyNotify) signal_data_free);
 }
 
 /**
@@ -2515,7 +2579,8 @@ camel_folder_rename (CamelFolder *folder,
  * @folder: a #CamelFolder
  * @changes: change information for @folder
  *
- * Emits the #CamelFolder::changed signal.
+ * Emits the #CamelFolder::changed signal from an idle source on the
+ * main loop.  The idle source's priority is #G_PRIORITY_DEFAULT_IDLE.
  *
  * Since: 2.32
  **/
@@ -2523,10 +2588,21 @@ void
 camel_folder_changed (CamelFolder *folder,
                       CamelFolderChangeInfo *changes)
 {
+	SignalData *data;
+
 	g_return_if_fail (CAMEL_IS_FOLDER (folder));
 	g_return_if_fail (changes != NULL);
 
-	g_signal_emit (folder, signals[CHANGED], 0, changes);
+	data = g_slice_new0 (SignalData);
+	data->folder = g_object_ref (folder);
+	data->changes = camel_folder_change_info_new ();
+
+	camel_folder_change_info_cat (data->changes, changes);
+
+	g_idle_add_full (
+		G_PRIORITY_DEFAULT_IDLE,
+		(GSourceFunc) folder_emit_changed_cb,
+		data, (GDestroyNotify) signal_data_free);
 }
 
 /**
diff --git a/camel/camel-folder.h b/camel/camel-folder.h
index 0fb551b..048f62a 100644
--- a/camel/camel-folder.h
+++ b/camel/camel-folder.h
@@ -426,7 +426,7 @@ void		camel_folder_ref_message_info	(CamelFolder *folder,
 #endif
 void		camel_folder_delete		(CamelFolder *folder);
 void		camel_folder_rename		(CamelFolder *folder,
-						 const gchar *new);
+						 const gchar *new_name);
 void		camel_folder_changed		(CamelFolder *folder,
 						 CamelFolderChangeInfo *changes);
 void		camel_folder_freeze		(CamelFolder *folder);
diff --git a/camel/camel-store.c b/camel/camel-store.c
index f109e57..a463aeb 100644
--- a/camel/camel-store.c
+++ b/camel/camel-store.c
@@ -49,6 +49,7 @@
 	((obj), CAMEL_TYPE_STORE, CamelStorePrivate))
 
 typedef struct _AsyncContext AsyncContext;
+typedef struct _SignalData SignalData;
 
 struct _CamelStorePrivate {
 	GStaticRecMutex folder_lock;	/* for locking folder operations */
@@ -66,6 +67,13 @@ struct _AsyncContext {
 	CamelFolderInfo *folder_info;
 };
 
+struct _SignalData {
+	CamelStore *store;
+	CamelFolder *folder;
+	CamelFolderInfo *folder_info;
+	gchar *folder_name;
+};
+
 enum {
 	FOLDER_CREATED,
 	FOLDER_DELETED,
@@ -94,6 +102,90 @@ async_context_free (AsyncContext *async_context)
 	g_slice_free (AsyncContext, async_context);
 }
 
+static void
+signal_data_free (SignalData *data)
+{
+	if (data->store != NULL)
+		g_object_unref (data->store);
+
+	if (data->folder != NULL)
+		g_object_unref (data->folder);
+
+	if (data->folder_info != NULL)
+		camel_folder_info_free (data->folder_info);
+
+	g_free (data->folder_name);
+
+	g_slice_free (SignalData, data);
+}
+
+static gboolean
+store_emit_folder_created_cb (SignalData *data)
+{
+	g_signal_emit (
+		data->store,
+		signals[FOLDER_CREATED], 0,
+		data->folder_info);
+
+	return FALSE;
+}
+
+static gboolean
+store_emit_folder_deleted_cb (SignalData *data)
+{
+	g_signal_emit (
+		data->store,
+		signals[FOLDER_DELETED], 0,
+		data->folder_info);
+
+	return FALSE;
+}
+
+static gboolean
+store_emit_folder_opened_cb (SignalData *data)
+{
+	g_signal_emit (
+		data->store,
+		signals[FOLDER_OPENED], 0,
+		data->folder);
+
+	return FALSE;
+}
+
+static gboolean
+store_emit_folder_renamed_cb (SignalData *data)
+{
+	g_signal_emit (
+		data->store,
+		signals[FOLDER_RENAMED], 0,
+		data->folder_name,
+		data->folder_info);
+
+	return FALSE;
+}
+
+static gboolean
+store_emit_folder_subscribed_cb (SignalData *data)
+{
+	g_signal_emit (
+		data->store,
+		signals[FOLDER_SUBSCRIBED], 0,
+		data->folder_info);
+
+	return FALSE;
+}
+
+static gboolean
+store_emit_folder_unsubscribed_cb (SignalData *data)
+{
+	g_signal_emit (
+		data->store,
+		signals[FOLDER_UNSUBSCRIBED], 0,
+		data->folder_info);
+
+	return FALSE;
+}
+
 /**
  * ignore_no_such_table_exception:
  * Clears the exception 'ex' when it's the 'no such table' exception.
@@ -1282,9 +1374,10 @@ cs_delete_cached_folder (CamelStore *store,
 /**
  * camel_store_folder_created:
  * @store: a #CamelStore
- * @info: information about the created folder
+ * @folder_info: information about the created folder
  *
- * Emits the #CamelStore::folder-created signal.
+ * Emits the #CamelStore::folder-created signal from an idle source on
+ * the main loop.  The idle source's priority is #G_PRIORITY_DEFAULT_IDLE.
  *
  * This function is only intended for Camel providers.
  *
@@ -1292,20 +1385,30 @@ cs_delete_cached_folder (CamelStore *store,
  **/
 void
 camel_store_folder_created (CamelStore *store,
-                            CamelFolderInfo *info)
+                            CamelFolderInfo *folder_info)
 {
-	g_return_if_fail (CAMEL_STORE (store));
-	g_return_if_fail (info != NULL);
+	SignalData *data;
 
-	g_signal_emit (store, signals[FOLDER_CREATED], 0, info);
+	g_return_if_fail (CAMEL_IS_STORE (store));
+	g_return_if_fail (folder_info != NULL);
+
+	data = g_slice_new0 (SignalData);
+	data->store = g_object_ref (store);
+	data->folder_info = camel_folder_info_clone (folder_info);
+
+	g_idle_add_full (
+		G_PRIORITY_DEFAULT_IDLE,
+		(GSourceFunc) store_emit_folder_created_cb,
+		data, (GDestroyNotify) signal_data_free);
 }
 
 /**
  * camel_store_folder_deleted:
  * @store: a #CamelStore
- * @info: information about the deleted folder
+ * @folder_info: information about the deleted folder
  *
- * Emits the #CamelStore::folder-deleted signal.
+ * Emits the #CamelStore::folder-deleted signal from an idle source on
+ * the main loop.  The idle source's priority is #G_PRIORITY_DEFAULT_IDLE.
  *
  * This function is only intended for Camel providers.
  *
@@ -1313,21 +1416,62 @@ camel_store_folder_created (CamelStore *store,
  **/
 void
 camel_store_folder_deleted (CamelStore *store,
-                            CamelFolderInfo *info)
+                            CamelFolderInfo *folder_info)
 {
-	g_return_if_fail (CAMEL_STORE (store));
-	g_return_if_fail (info != NULL);
+	SignalData *data;
+
+	g_return_if_fail (CAMEL_IS_STORE (store));
+	g_return_if_fail (folder_info != NULL);
+
+	data = g_slice_new0 (SignalData);
+	data->store = g_object_ref (store);
+	data->folder_info = camel_folder_info_clone (folder_info);
 
-	g_signal_emit (store, signals[FOLDER_DELETED], 0, info);
+	g_idle_add_full (
+		G_PRIORITY_DEFAULT_IDLE,
+		(GSourceFunc) store_emit_folder_deleted_cb,
+		data, (GDestroyNotify) signal_data_free);
+}
+
+/**
+ * camel_store_folder_opened:
+ * @store: a #CamelStore
+ * @folder: the #CamelFolder that was opened
+ *
+ * Emits the #CamelStore::folder-opened signal from an idle source on
+ * the main loop.  The idle source's priority is #G_PRIORITY_DEFAULT_IDLE.
+ *
+ * This function is only intended for Camel providers.
+ *
+ * Since: 3.0
+ **/
+void
+camel_store_folder_opened (CamelStore *store,
+                           CamelFolder *folder)
+{
+	SignalData *data;
+
+	g_return_if_fail (CAMEL_IS_STORE (store));
+	g_return_if_fail (CAMEL_IS_FOLDER (folder));
+
+	data = g_slice_new0 (SignalData);
+	data->store = g_object_ref (store);
+	data->folder = g_object_ref (folder);
+
+	g_idle_add_full (
+		G_PRIORITY_DEFAULT_IDLE,
+		(GSourceFunc) store_emit_folder_opened_cb,
+		data, (GDestroyNotify) signal_data_free);
 }
 
 /**
  * camel_store_folder_renamed:
  * @store: a #CamelStore
  * @old_name: the old name of the folder
- * @info: information about the renamed folder
+ * @folder_info: information about the renamed folder
  *
- * Emits the #CamelStore::folder-renamed signal.
+ * Emits the #CamelStore::folder-renamed signal from an idle source on
+ * the main loop.  The idle source's priority is #G_PRIORITY_DEFAULT_IDLE.
  *
  * This function is only intended for Camel providers.
  *
@@ -1336,21 +1480,32 @@ camel_store_folder_deleted (CamelStore *store,
 void
 camel_store_folder_renamed (CamelStore *store,
                             const gchar *old_name,
-                            CamelFolderInfo *info)
+                            CamelFolderInfo *folder_info)
 {
-	g_return_if_fail (CAMEL_STORE (store));
+	SignalData *data;
+
+	g_return_if_fail (CAMEL_IS_STORE (store));
 	g_return_if_fail (old_name != NULL);
-	g_return_if_fail (info != NULL);
+	g_return_if_fail (folder_info != NULL);
 
-	g_signal_emit (store, signals[FOLDER_RENAMED], 0, old_name, info);
+	data = g_slice_new0 (SignalData);
+	data->store = g_object_ref (store);
+	data->folder_info = camel_folder_info_clone (folder_info);
+	data->folder_name = g_strdup (old_name);
+
+	g_idle_add_full (
+		G_PRIORITY_DEFAULT_IDLE,
+		(GSourceFunc) store_emit_folder_renamed_cb,
+		data, (GDestroyNotify) signal_data_free);
 }
 
 /**
  * camel_store_folder_subscribed:
  * @store: a #CamelStore
- * @info: information about the subscribed folder
+ * @folder_info: information about the subscribed folder
  *
- * Emits the #CamelStore::folder-subscribed signal.
+ * Emits the #CamelStore::folder-subscribed signal from an idle source on
+ * the main loop.  The idle source's priority is #G_PRIORITY_DEFAULT_IDLE.
  *
  * This function is only intended for Camel providers.
  *
@@ -1358,20 +1513,30 @@ camel_store_folder_renamed (CamelStore *store,
  **/
 void
 camel_store_folder_subscribed (CamelStore *store,
-                               CamelFolderInfo *info)
+                               CamelFolderInfo *folder_info)
 {
-	g_return_if_fail (CAMEL_STORE (store));
-	g_return_if_fail (info != NULL);
+	SignalData *data;
+
+	g_return_if_fail (CAMEL_IS_STORE (store));
+	g_return_if_fail (folder_info != NULL);
+
+	data = g_slice_new0 (SignalData);
+	data->store = g_object_ref (store);
+	data->folder_info = camel_folder_info_clone (folder_info);
 
-	g_signal_emit (store, signals[FOLDER_SUBSCRIBED], 0, info);
+	g_idle_add_full (
+		G_PRIORITY_DEFAULT_IDLE,
+		(GSourceFunc) store_emit_folder_subscribed_cb,
+		data, (GDestroyNotify) signal_data_free);
 }
 
 /**
  * camel_store_folder_unsubscribed:
  * @store: a #CamelStore
- * @info: information about the unsubscribed folder
+ * @folder_info: information about the unsubscribed folder
  *
- * Emits the #CamelStore::folder-unsubscribed signal.
+ * Emits the #CamelStore::folder-unsubscribed signal from an idle source on
+ * the main loop.  The idle source's priority is #G_PRIORITY_DEFAULT_IDLE.
  *
  * This function is only intended for Camel providers.
  *
@@ -1379,12 +1544,21 @@ camel_store_folder_subscribed (CamelStore *store,
  **/
 void
 camel_store_folder_unsubscribed (CamelStore *store,
-                                 CamelFolderInfo *info)
+                                 CamelFolderInfo *folder_info)
 {
-	g_return_if_fail (CAMEL_STORE (store));
-	g_return_if_fail (info != NULL);
+	SignalData *data;
+
+	g_return_if_fail (CAMEL_IS_STORE (store));
+	g_return_if_fail (folder_info != NULL);
+
+	data = g_slice_new0 (SignalData);
+	data->store = g_object_ref (store);
+	data->folder_info = camel_folder_info_clone (folder_info);
 
-	g_signal_emit (store, signals[FOLDER_UNSUBSCRIBED], 0, info);
+	g_idle_add_full (
+		G_PRIORITY_DEFAULT_IDLE,
+		(GSourceFunc) store_emit_folder_unsubscribed_cb,
+		data, (GDestroyNotify) signal_data_free);
 }
 
 static void
@@ -2021,7 +2195,7 @@ camel_store_get_folder_sync (CamelStore *store,
 		}
 
 		if (folder)
-			g_signal_emit (store, signals[FOLDER_OPENED], 0, folder);
+			camel_store_folder_opened (store, folder);
 	}
 
 	return folder;
diff --git a/camel/camel-store.h b/camel/camel-store.h
index ce53de6..9b27523 100644
--- a/camel/camel-store.h
+++ b/camel/camel-store.h
@@ -405,33 +405,35 @@ struct _CamelStoreClass {
 
 	/* Signals */
 	void		(*folder_created)	(CamelStore *store,
-						 CamelFolderInfo *info);
+						 CamelFolderInfo *folder_info);
 	void		(*folder_deleted)	(CamelStore *store,
-						 CamelFolderInfo *info);
+						 CamelFolderInfo *folder_info);
 	void		(*folder_opened)	(CamelStore *store,
 						 CamelFolder *folder);
 	void		(*folder_renamed)	(CamelStore *store,
 						 const gchar *old_name,
-						 CamelFolderInfo *info);
+						 CamelFolderInfo *folder_info);
 	void		(*folder_subscribed)	(CamelStore *store,
-						 CamelFolderInfo *info);
+						 CamelFolderInfo *folder_info);
 	void		(*folder_unsubscribed)	(CamelStore *store,
-						 CamelFolderInfo *info);
+						 CamelFolderInfo *folder_info);
 };
 
 GType		camel_store_get_type		(void);
 GQuark		camel_store_error_quark		(void) G_GNUC_CONST;
 void		camel_store_folder_created	(CamelStore *store,
-						 CamelFolderInfo *info);
+						 CamelFolderInfo *folder_info);
 void		camel_store_folder_deleted	(CamelStore *store,
-						 CamelFolderInfo *info);
+						 CamelFolderInfo *folder_info);
+void		camel_store_folder_opened	(CamelStore *store,
+						 CamelFolder *folder);
 void		camel_store_folder_renamed	(CamelStore *store,
 						 const gchar *old_name,
-						 CamelFolderInfo *info);
+						 CamelFolderInfo *folder_info);
 void		camel_store_folder_subscribed	(CamelStore *store,
-						 CamelFolderInfo *info);
+						 CamelFolderInfo *folder_info);
 void		camel_store_folder_unsubscribed	(CamelStore *store,
-						 CamelFolderInfo *info);
+						 CamelFolderInfo *folder_info);
 void		camel_store_free_folder_info	(CamelStore *store,
 						 CamelFolderInfo *fi);
 void		camel_store_free_folder_info_full
diff --git a/docs/reference/camel/camel-sections.txt b/docs/reference/camel/camel-sections.txt
index c80d562..1652a1b 100644
--- a/docs/reference/camel/camel-sections.txt
+++ b/docs/reference/camel/camel-sections.txt
@@ -2148,6 +2148,7 @@ CAMEL_STORE_FOLDER_INFO_NO_VIRTUAL
 CAMEL_STORE_FOLDER_INFO_SUBSCRIPTION_LIST
 camel_store_folder_created
 camel_store_folder_deleted
+camel_store_folder_opened
 camel_store_folder_renamed
 camel_store_folder_subscribed
 camel_store_folder_unsubscribed
diff --git a/docs/reference/camel/tmpl/camel-cipher-context.sgml b/docs/reference/camel/tmpl/camel-cipher-context.sgml
index b9ba267..8bf6281 100644
--- a/docs/reference/camel/tmpl/camel-cipher-context.sgml
+++ b/docs/reference/camel/tmpl/camel-cipher-context.sgml
@@ -720,6 +720,10 @@ CamelCipherContext
 @gpointer cert_data: 
 @gpointer cert_data:
 @gpointer cert_data: 
+ gpointer cert_data:
+ gpointer cert_data: 
+ gpointer cert_data:
+ gpointer cert_data: 
 @gpointer cert_data: 
 
 
diff --git a/docs/reference/camel/tmpl/camel-folder.sgml b/docs/reference/camel/tmpl/camel-folder.sgml
index 4e52502..1e7a868 100644
--- a/docs/reference/camel/tmpl/camel-folder.sgml
+++ b/docs/reference/camel/tmpl/camel-folder.sgml
@@ -513,7 +513,7 @@ CamelFolder
 </para>
 
 @folder: 
- new: 
+ new_name: 
 
 
 <!-- ##### FUNCTION camel_folder_changed ##### -->
diff --git a/docs/reference/camel/tmpl/camel-store.sgml b/docs/reference/camel/tmpl/camel-store.sgml
index aa399d9..e202298 100644
--- a/docs/reference/camel/tmpl/camel-store.sgml
+++ b/docs/reference/camel/tmpl/camel-store.sgml
@@ -377,7 +377,7 @@ CamelStore
 </para>
 
 @store: 
- info: 
+ folder_info: 
 
 
 <!-- ##### FUNCTION camel_store_folder_deleted ##### -->
@@ -386,7 +386,16 @@ CamelStore
 </para>
 
 @store: 
- info: 
+ folder_info: 
+
+
+<!-- ##### FUNCTION camel_store_folder_opened ##### -->
+<para>
+
+</para>
+
+ store: 
+ folder: 
 
 
 <!-- ##### FUNCTION camel_store_folder_renamed ##### -->
@@ -396,7 +405,7 @@ CamelStore
 
 @store: 
 @old_name: 
- info: 
+ folder_info: 
 
 
 <!-- ##### FUNCTION camel_store_folder_subscribed ##### -->
@@ -405,7 +414,7 @@ CamelStore
 </para>
 
 @store: 
- info: 
+ folder_info: 
 
 
 <!-- ##### FUNCTION camel_store_folder_unsubscribed ##### -->
@@ -414,7 +423,7 @@ CamelStore
 </para>
 
 @store: 
- info: 
+ folder_info: 
 
 
 <!-- ##### FUNCTION camel_store_free_folder_info ##### -->



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