mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-25 15:06:14 +01:00
Replace "gio-desktop-app-info-lookup" extension point
With a native version, that looks for desktop items supporting x-scheme-handler/foo, when looking for a handler for the "foo" URI scheme handler. https://bugzilla.gnome.org/show_bug.cgi?id=631410
This commit is contained in:
parent
1612a4d506
commit
9b262f1c5f
@ -1838,57 +1838,18 @@ g_app_info_get_default_for_type (const char *content_type,
|
|||||||
GAppInfo *
|
GAppInfo *
|
||||||
g_app_info_get_default_for_uri_scheme (const char *uri_scheme)
|
g_app_info_get_default_for_uri_scheme (const char *uri_scheme)
|
||||||
{
|
{
|
||||||
static gsize lookup = 0;
|
GAppInfo *app_info;
|
||||||
|
char *content_type, *scheme_down;
|
||||||
|
|
||||||
if (g_once_init_enter (&lookup))
|
scheme_down = g_ascii_strdown (uri_scheme, -1);
|
||||||
{
|
content_type = g_strdup_printf ("x-scheme-handler/%s", scheme_down);
|
||||||
gsize setup_value = 1;
|
g_free (scheme_down);
|
||||||
GDesktopAppInfoLookup *lookup_instance;
|
app_info = g_app_info_get_default_for_type (content_type, FALSE);
|
||||||
const char *use_this;
|
g_free (content_type);
|
||||||
GIOExtensionPoint *ep;
|
|
||||||
GIOExtension *extension;
|
|
||||||
GList *l;
|
|
||||||
|
|
||||||
use_this = g_getenv ("GIO_USE_URI_ASSOCIATION");
|
return app_info;
|
||||||
|
|
||||||
/* 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lookup_instance != NULL)
|
|
||||||
setup_value = (gsize)lookup_instance;
|
|
||||||
|
|
||||||
g_once_init_leave (&lookup, setup_value);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lookup == 1)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
return g_desktop_app_info_lookup_get_default_for_uri_scheme (G_DESKTOP_APP_INFO_LOOKUP (lookup),
|
|
||||||
uri_scheme);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
get_apps_from_dir (GHashTable *apps,
|
get_apps_from_dir (GHashTable *apps,
|
||||||
const char *dirname,
|
const char *dirname,
|
||||||
@ -2677,41 +2638,3 @@ get_all_desktop_entries_for_mime_type (const char *base_mime_type,
|
|||||||
return desktop_entries;
|
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);
|
|
||||||
}
|
|
||||||
|
@ -55,42 +55,6 @@ gboolean g_desktop_app_info_get_is_hidden (GDesktopAppInfo *info);
|
|||||||
|
|
||||||
void g_desktop_app_info_set_desktop_env (const char *desktop_env);
|
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
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __G_DESKTOP_APP_INFO_H__ */
|
#endif /* __G_DESKTOP_APP_INFO_H__ */
|
||||||
|
@ -114,7 +114,6 @@ g_desktop_app_info_get_type G_GNUC_CONST
|
|||||||
g_desktop_app_info_get_is_hidden
|
g_desktop_app_info_get_is_hidden
|
||||||
g_desktop_app_info_set_desktop_env
|
g_desktop_app_info_set_desktop_env
|
||||||
g_desktop_app_info_lookup_get_type G_GNUC_CONST
|
g_desktop_app_info_lookup_get_type G_GNUC_CONST
|
||||||
g_desktop_app_info_lookup_get_default_for_uri_scheme
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -523,11 +523,6 @@ _g_io_modules_ensure_extension_points_registered (void)
|
|||||||
{
|
{
|
||||||
registered_extensions = TRUE;
|
registered_extensions = TRUE;
|
||||||
|
|
||||||
#ifdef G_OS_UNIX
|
|
||||||
ep = g_io_extension_point_register (G_DESKTOP_APP_INFO_LOOKUP_EXTENSION_POINT_NAME);
|
|
||||||
g_io_extension_point_set_required_type (ep, G_TYPE_DESKTOP_APP_INFO_LOOKUP);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ep = g_io_extension_point_register (G_LOCAL_DIRECTORY_MONITOR_EXTENSION_POINT_NAME);
|
ep = g_io_extension_point_register (G_LOCAL_DIRECTORY_MONITOR_EXTENSION_POINT_NAME);
|
||||||
g_io_extension_point_set_required_type (ep, G_TYPE_LOCAL_DIRECTORY_MONITOR);
|
g_io_extension_point_set_required_type (ep, G_TYPE_LOCAL_DIRECTORY_MONITOR);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user