From 5488c24819de10d0b9c4dc1c512adc859d47a777 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 20 Feb 2013 12:48:46 -0500 Subject: Add e_client_selector_ref_cached_client_by_iter(). --- doc/reference/libeutil/libeutil-sections.txt | 1 + e-util/e-client-selector.c | 37 ++++++++++++++++++++++++++++ e-util/e-client-selector.h | 3 +++ 3 files changed, 41 insertions(+) diff --git a/doc/reference/libeutil/libeutil-sections.txt b/doc/reference/libeutil/libeutil-sections.txt index f4eee6f7d5..ca98eb5a1c 100644 --- a/doc/reference/libeutil/libeutil-sections.txt +++ b/doc/reference/libeutil/libeutil-sections.txt @@ -1284,6 +1284,7 @@ e_client_selector_get_client_sync e_client_selector_get_client e_client_selector_get_client_finish e_client_selector_ref_cached_client +e_client_selector_ref_cached_client_by_iter e_client_selector_is_backend_dead E_CLIENT_SELECTOR diff --git a/e-util/e-client-selector.c b/e-util/e-client-selector.c index a38cc381ce..1b753f5421 100644 --- a/e-util/e-client-selector.c +++ b/e-util/e-client-selector.c @@ -417,6 +417,43 @@ e_client_selector_ref_cached_client (EClientSelector *selector, return client; } +/** + * e_client_selector_ref_cached_client_by_iter: + * @selector: an #EClientSelector + * @iter: a #GtkTreeIter + * + * Returns a shared #EClient instance for the #ESource in the tree model + * row pointed to by @iter and the value of #ESourceSelector:extension-name + * if such an instance is already cached, or else %NULL. This function does + * not create a new #EClient instance, and therefore does not block. + * + * The returned #EClient is referenced for thread-safety and must be + * unreferenced with g_object_unref() when finished with it. + * + * Returns: an #EClient, or %NULL + **/ +EClient * +e_client_selector_ref_cached_client_by_iter (EClientSelector *selector, + GtkTreeIter *iter) +{ + EClient *client = NULL; + ESource *source; + + g_return_val_if_fail (E_IS_CLIENT_SELECTOR (selector), NULL); + g_return_val_if_fail (iter != NULL, NULL); + + source = e_source_selector_ref_source_by_iter ( + E_SOURCE_SELECTOR (selector), iter); + + if (source != NULL) { + client = e_client_selector_ref_cached_client ( + selector, source); + g_object_unref (source); + } + + return client; +} + /** * e_client_selector_is_backend_dead: * @selector: an #EClientSelector diff --git a/e-util/e-client-selector.h b/e-util/e-client-selector.h index 8e3c1ac12f..ce91fe7c2f 100644 --- a/e-util/e-client-selector.h +++ b/e-util/e-client-selector.h @@ -82,6 +82,9 @@ EClient * e_client_selector_get_client_finish EClient * e_client_selector_ref_cached_client (EClientSelector *selector, ESource *source); +EClient * e_client_selector_ref_cached_client_by_iter + (EClientSelector *selector, + GtkTreeIter *iter); gboolean e_client_selector_is_backend_dead (EClientSelector *selector, ESource *source); -- cgit v1.2.3