static GType get_default_native_class (gpointer data) { GNativeVolumeMonitorClass *klass, *native_class, **native_class_out; const char *use_this; GIOExtensionPoint *ep; GIOExtension *extension; GList *l; native_class_out = data; use_this = g_getenv ("GIO_USE_VOLUME_MONITOR"); /* Ensure vfs in modules loaded */ _g_io_modules_ensure_loaded (); ep = g_io_extension_point_lookup (G_NATIVE_VOLUME_MONITOR_EXTENSION_POINT_NAME); native_class = NULL; if (use_this) { extension = g_io_extension_point_get_extension_by_name (ep, use_this); if (extension) { klass = G_NATIVE_VOLUME_MONITOR_CLASS (g_io_extension_ref_class (extension)); if (G_VOLUME_MONITOR_CLASS (klass)->is_supported()) native_class = klass; else g_type_class_unref (klass); } } if (native_class == NULL) { for (l = g_io_extension_point_get_extensions (ep); l != NULL; l = l->next) { extension = l->data; klass = G_NATIVE_VOLUME_MONITOR_CLASS (g_io_extension_ref_class (extension)); if (G_VOLUME_MONITOR_CLASS (klass)->is_supported()) { native_class = klass; break; } else g_type_class_unref (klass); } } if (native_class) { *native_class_out = native_class; return G_TYPE_FROM_CLASS (native_class); } else return G_TYPE_INVALID; }
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_get_default_for_protocol: * @protocol: the proxy protocol name (e.g. http, socks, etc) * * Lookup "gio-proxy" extension point for a proxy implementation that supports * specified protocol. * * Returns: (transfer full): return a #GProxy or NULL if protocol * is not supported. * * Since: 2.26 **/ GProxy * g_proxy_get_default_for_protocol (const gchar *protocol) { GIOExtensionPoint *ep; GIOExtension *extension; /* Ensure proxy modules loaded */ _g_io_modules_ensure_loaded (); ep = g_io_extension_point_lookup (G_PROXY_EXTENSION_POINT_NAME); extension = g_io_extension_point_get_extension_by_name (ep, protocol); if (extension) return g_object_new (g_io_extension_get_type (extension), NULL); return NULL; }
static gpointer get_default_local_directory_monitor (gpointer data) { GLocalDirectoryMonitorClass *chosen_class; GLocalDirectoryMonitorClass **ret = data; GIOExtensionPoint *ep; GList *extensions, *l; _g_io_modules_ensure_loaded (); ep = g_io_extension_point_lookup (G_LOCAL_DIRECTORY_MONITOR_EXTENSION_POINT_NAME); extensions = g_io_extension_point_get_extensions (ep); chosen_class = NULL; for (l = extensions; l != NULL; l = l->next) { GIOExtension *extension = l->data; GLocalDirectoryMonitorClass *klass; klass = G_LOCAL_DIRECTORY_MONITOR_CLASS (g_io_extension_ref_class (extension)); if (klass->is_supported ()) { chosen_class = klass; break; } else g_type_class_unref (klass); } if (chosen_class) { *ret = chosen_class; return (gpointer)G_TYPE_FROM_CLASS (chosen_class); } else return (gpointer)G_TYPE_INVALID; }