[evolution-data-server] Add e_source_registry_list_enabled().



commit 402f3d481a36dcb964ac6a9899fd0f2331f3d472
Author: Matthew Barnes <mbarnes redhat com>
Date:   Sat Mar 9 18:46:52 2013 -0500

    Add e_source_registry_list_enabled().
    
    Similar to e_source_registry_list_sources(), but returns only enabled
    sources according to e_source_registry_check_enabled().

 .../libedataserver/libedataserver-sections.txt     |    1 +
 libedataserver/e-source-registry.c                 |   49 ++++++++++++++++++++
 libedataserver/e-source-registry.h                 |    2 +
 3 files changed, 52 insertions(+), 0 deletions(-)
---
diff --git a/docs/reference/libedataserver/libedataserver-sections.txt 
b/docs/reference/libedataserver/libedataserver-sections.txt
index 821ebcd..f29ae98 100644
--- a/docs/reference/libedataserver/libedataserver-sections.txt
+++ b/docs/reference/libedataserver/libedataserver-sections.txt
@@ -853,6 +853,7 @@ e_source_registry_create_sources
 e_source_registry_create_sources_finish
 e_source_registry_ref_source
 e_source_registry_list_sources
+e_source_registry_list_enabled
 e_source_registry_find_extension
 e_source_registry_check_enabled
 e_source_registry_build_display_tree
diff --git a/libedataserver/e-source-registry.c b/libedataserver/e-source-registry.c
index a2dc1dd..6c4f2fd 100644
--- a/libedataserver/e-source-registry.c
+++ b/libedataserver/e-source-registry.c
@@ -2431,6 +2431,55 @@ e_source_registry_list_sources (ESourceRegistry *registry,
 }
 
 /**
+ * e_source_registry_list_enabled:
+ * @registry: an #ESourceRegistry
+ * @extension_name: (allow-none): an extension name, or %NULL
+ *
+ * Similar to e_source_registry_list_sources(), but returns only enabled
+ * sources according to e_source_registry_check_enabled().
+ *
+ * The sources returned in the list are referenced for thread-safety.
+ * They must each be unreferenced with g_object_unref() when finished
+ * with them.  Free the returned list itself with g_list_free().
+ *
+ * An easy way to free the list properly in one step is as follows:
+ *
+ * |[
+ *   g_list_free_full (list, g_object_unref);
+ * ]|
+ *
+ * Returns: (element-type ESource) (transfer full): a sorted list of sources
+ *
+ * Since: 3.10
+ **/
+GList *
+e_source_registry_list_enabled (ESourceRegistry *registry,
+                                const gchar *extension_name)
+{
+       GList *list, *link;
+       GQueue trash = G_QUEUE_INIT;
+
+       g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), NULL);
+
+       list = e_source_registry_list_sources (registry, extension_name);
+
+       for (link = list; link != NULL; link = g_list_next (link)) {
+               ESource *source = E_SOURCE (link->data);
+
+               if (!e_source_registry_check_enabled (registry, source)) {
+                       g_queue_push_tail (&trash, link);
+                       g_object_unref (source);
+               }
+       }
+
+       /* We do want pop_head() here, not pop_head_link(). */
+       while ((link = g_queue_pop_head (&trash)) != NULL)
+               list = g_list_delete_link (list, link);
+
+       return list;
+}
+
+/**
  * e_source_registry_find_extension:
  * @registry: an #ESourceRegistry
  * @source: an #ESource
diff --git a/libedataserver/e-source-registry.h b/libedataserver/e-source-registry.h
index 1c15f5c..b6eefc9 100644
--- a/libedataserver/e-source-registry.h
+++ b/libedataserver/e-source-registry.h
@@ -139,6 +139,8 @@ ESource *   e_source_registry_ref_source    (ESourceRegistry *registry,
                                                 const gchar *uid);
 GList *                e_source_registry_list_sources  (ESourceRegistry *registry,
                                                 const gchar *extension_name);
+GList *                e_source_registry_list_enabled  (ESourceRegistry *registry,
+                                                const gchar *extension_name);
 ESource *      e_source_registry_find_extension
                                                (ESourceRegistry *registry,
                                                 ESource *source,


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