Add _g_io_module_get_default(), use to simplify other *_get_default()s

Add _g_io_module_get_default(), which implements the
figure-out-the-best-available-module-that-is-actually-usable logic,
and use that to simplify g_proxy_resolver_get_default(),
g_settings_backend_get_default(), g_tls_backend_get_default(), and
g_vfs_get_default().

https://bugzilla.gnome.org/show_bug.cgi?id=620932
This commit is contained in:
Dan Winship
2011-06-21 18:21:27 -04:00
parent 38d21f6d8a
commit 1481b7bca3
6 changed files with 161 additions and 174 deletions

View File

@@ -50,52 +50,6 @@ g_proxy_resolver_default_init (GProxyResolverInterface *iface)
{
}
static gpointer
get_default_proxy_resolver (gpointer arg)
{
const gchar *use_this;
GProxyResolver *resolver;
GList *l;
GIOExtensionPoint *ep;
GIOExtension *extension;
use_this = g_getenv ("GIO_USE_PROXY_RESOLVER");
/* Ensure proxy-resolver modules loaded */
_g_io_modules_ensure_loaded ();
ep = g_io_extension_point_lookup (G_PROXY_RESOLVER_EXTENSION_POINT_NAME);
if (use_this)
{
extension = g_io_extension_point_get_extension_by_name (ep, use_this);
if (extension)
{
resolver = g_object_new (g_io_extension_get_type (extension), NULL);
if (g_proxy_resolver_is_supported (resolver))
return resolver;
g_object_unref (resolver);
}
}
for (l = g_io_extension_point_get_extensions (ep); l != NULL; l = l->next)
{
extension = l->data;
resolver = g_object_new (g_io_extension_get_type (extension), NULL);
if (g_proxy_resolver_is_supported (resolver))
return resolver;
g_object_unref (resolver);
}
return NULL;
}
/**
* g_proxy_resolver_get_default:
*
@@ -108,9 +62,9 @@ get_default_proxy_resolver (gpointer arg)
GProxyResolver *
g_proxy_resolver_get_default (void)
{
static GOnce once_init = G_ONCE_INIT;
return g_once (&once_init, get_default_proxy_resolver, NULL);
return _g_io_module_get_default (G_PROXY_RESOLVER_EXTENSION_POINT_NAME,
"GIO_USE_PROXY_RESOLVER",
(GIOModuleVerifyFunc)g_proxy_resolver_is_supported);
}
/**