From 3df9b0ab2e7e9169ff23b9dd9c6579608772eca5 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 7 Oct 2012 11:51:11 -0400 Subject: [PATCH] Add e_cal_backend_list_views(). Alternative to e_cal_backend_foreach_view(). --- calendar/libedata-cal/e-cal-backend.c | 39 ++++++++++++++++++++++ calendar/libedata-cal/e-cal-backend.h | 1 + .../libedata-cal/libedata-cal-sections.txt | 1 + 3 files changed, 41 insertions(+) diff --git a/calendar/libedata-cal/e-cal-backend.c b/calendar/libedata-cal/e-cal-backend.c index f0d2937..1f78b35 100644 --- a/calendar/libedata-cal/e-cal-backend.c +++ b/calendar/libedata-cal/e-cal-backend.c @@ -759,6 +759,45 @@ e_cal_backend_remove_view (ECalBackend *backend, } /** + * e_cal_backend_list_views: + * @backend: an #ECalBackend + * + * Returns a list of #ECalBookView instances added with + * e_cal_backend_add_view(). + * + * The views 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: a list of cal views + * + * Since: 3.8 + **/ +GList * +e_cal_backend_list_views (ECalBackend *backend) +{ + GList *list; + + g_return_val_if_fail (E_IS_CAL_BACKEND (backend), NULL); + + g_mutex_lock (backend->priv->views_mutex); + + /* XXX Use g_list_copy_deep() once we require GLib >= 2.34. */ + list = g_list_copy (backend->priv->views); + g_list_foreach (list, (GFunc) g_object_ref, NULL); + + g_mutex_unlock (backend->priv->views_mutex); + + return list; +} + +/** * e_cal_backend_foreach_view: * @backend: an #ECalBackend * @callback: callback to call diff --git a/calendar/libedata-cal/e-cal-backend.h b/calendar/libedata-cal/e-cal-backend.h index 8aa5dcf..37d6136 100644 --- a/calendar/libedata-cal/e-cal-backend.h +++ b/calendar/libedata-cal/e-cal-backend.h @@ -290,6 +290,7 @@ void e_cal_backend_add_view (ECalBackend *backend, EDataCalView *view); void e_cal_backend_remove_view (ECalBackend *backend, EDataCalView *view); +GList * e_cal_backend_list_views (ECalBackend *backend); void e_cal_backend_foreach_view (ECalBackend *backend, gboolean (*callback) (EDataCalView *view, gpointer user_data), diff --git a/docs/reference/calendar/libedata-cal/libedata-cal-sections.txt b/docs/reference/calendar/libedata-cal/libedata-cal-sections.txt index 2c8ef6f..57520e4 100644 --- a/docs/reference/calendar/libedata-cal/libedata-cal-sections.txt +++ b/docs/reference/calendar/libedata-cal/libedata-cal-sections.txt @@ -25,6 +25,7 @@ e_cal_backend_add_client e_cal_backend_remove_client e_cal_backend_add_view e_cal_backend_remove_view +e_cal_backend_list_views e_cal_backend_foreach_view e_cal_backend_set_notification_proxy e_cal_backend_get_backend_property -- 2.7.4