GAppInfo *
g_app_info_get_default_for_uri_scheme (const char *uri_scheme)
{
- static gsize lookup = 0;
-
- if (g_once_init_enter (&lookup))
- {
- gsize setup_value = 1;
- GDesktopAppInfoLookup *lookup_instance;
- const char *use_this;
- GIOExtensionPoint *ep;
- GIOExtension *extension;
- GList *l;
-
- use_this = g_getenv ("GIO_USE_URI_ASSOCIATION");
-
- /* Ensure vfs in modules loaded */
- _g_io_modules_ensure_loaded ();
-
- ep = g_io_extension_point_lookup (G_DESKTOP_APP_INFO_LOOKUP_EXTENSION_POINT_NAME);
-
- lookup_instance = NULL;
- if (use_this)
- {
- extension = g_io_extension_point_get_extension_by_name (ep, use_this);
- if (extension)
- lookup_instance = g_object_new (g_io_extension_get_type (extension), NULL);
- }
-
- if (lookup_instance == NULL)
- {
- for (l = g_io_extension_point_get_extensions (ep); l != NULL; l = l->next)
- {
- extension = l->data;
- lookup_instance = g_object_new (g_io_extension_get_type (extension), NULL);
- if (lookup_instance != NULL)
- break;
- }
- }
+ GAppInfo *app_info;
+ char *content_type, *scheme_down;
- if (lookup_instance != NULL)
- setup_value = (gsize)lookup_instance;
-
- g_once_init_leave (&lookup, setup_value);
- }
+ scheme_down = g_ascii_strdown (uri_scheme, -1);
+ content_type = g_strdup_printf ("x-scheme-handler/%s", scheme_down);
+ g_free (scheme_down);
+ app_info = g_app_info_get_default_for_type (content_type, FALSE);
+ g_free (content_type);
- if (lookup == 1)
- return NULL;
-
- return g_desktop_app_info_lookup_get_default_for_uri_scheme (G_DESKTOP_APP_INFO_LOOKUP (lookup),
- uri_scheme);
+ return app_info;
}
-
static void
get_apps_from_dir (GHashTable *apps,
const char *dirname,
return desktop_entries;
}
-/* GDesktopAppInfoLookup interface: */
-
-typedef GDesktopAppInfoLookupIface GDesktopAppInfoLookupInterface;
-G_DEFINE_INTERFACE (GDesktopAppInfoLookup, g_desktop_app_info_lookup, G_TYPE_OBJECT)
-
-static void
-g_desktop_app_info_lookup_default_init (GDesktopAppInfoLookupInterface *iface)
-{
-}
-
-/**
- * g_desktop_app_info_lookup_get_default_for_uri_scheme:
- * @lookup: a #GDesktopAppInfoLookup
- * @uri_scheme: a string containing a URI scheme.
- *
- * Gets the default application for launching applications
- * using this URI scheme for a particular GDesktopAppInfoLookup
- * implementation.
- *
- * The GDesktopAppInfoLookup interface and this function is used
- * to implement g_app_info_get_default_for_uri_scheme() backends
- * in a GIO module. There is no reason for applications to use it
- * directly. Applications should use g_app_info_get_default_for_uri_scheme().
- *
- * Returns: (transfer full): #GAppInfo for given @uri_scheme or %NULL on error.
- */
-GAppInfo *
-g_desktop_app_info_lookup_get_default_for_uri_scheme (GDesktopAppInfoLookup *lookup,
- const char *uri_scheme)
-{
- GDesktopAppInfoLookupIface *iface;
-
- g_return_val_if_fail (G_IS_DESKTOP_APP_INFO_LOOKUP (lookup), NULL);
-
- iface = G_DESKTOP_APP_INFO_LOOKUP_GET_IFACE (lookup);
-
- return (* iface->get_default_for_uri_scheme) (lookup, uri_scheme);
-}
void g_desktop_app_info_set_desktop_env (const char *desktop_env);
-
-#define G_TYPE_DESKTOP_APP_INFO_LOOKUP (g_desktop_app_info_lookup_get_type ())
-#define G_DESKTOP_APP_INFO_LOOKUP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_DESKTOP_APP_INFO_LOOKUP, GDesktopAppInfoLookup))
-#define G_IS_DESKTOP_APP_INFO_LOOKUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_DESKTOP_APP_INFO_LOOKUP))
-#define G_DESKTOP_APP_INFO_LOOKUP_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_DESKTOP_APP_INFO_LOOKUP, GDesktopAppInfoLookupIface))
-
-/**
- * G_DESKTOP_APP_INFO_LOOKUP_EXTENSION_POINT_NAME:
- *
- * Extension point for default handler to URI association. See
- * <link linkend="extending-gio">Extending GIO</link>.
- */
-#define G_DESKTOP_APP_INFO_LOOKUP_EXTENSION_POINT_NAME "gio-desktop-app-info-lookup"
-
-/**
- * GDesktopAppInfoLookup:
- *
- * Interface that is used by backends to associate default
- * handlers with URI schemes.
- */
-typedef struct _GDesktopAppInfoLookup GDesktopAppInfoLookup;
-typedef struct _GDesktopAppInfoLookupIface GDesktopAppInfoLookupIface;
-
-struct _GDesktopAppInfoLookupIface
-{
- GTypeInterface g_iface;
-
- GAppInfo * (* get_default_for_uri_scheme) (GDesktopAppInfoLookup *lookup,
- const char *uri_scheme);
-};
-
-GType g_desktop_app_info_lookup_get_type (void) G_GNUC_CONST;
-
-GAppInfo *g_desktop_app_info_lookup_get_default_for_uri_scheme (GDesktopAppInfoLookup *lookup,
- const char *uri_scheme);
-
G_END_DECLS
#endif /* __G_DESKTOP_APP_INFO_H__ */