diff --git a/gio/gdesktopappinfo.c b/gio/gdesktopappinfo.c index 8047d9c4a..99a6fb7dd 100644 --- a/gio/gdesktopappinfo.c +++ b/gio/gdesktopappinfo.c @@ -32,6 +32,8 @@ #include #endif +#undef G_DISABLE_DEPRECATED + #include "gcontenttypeprivate.h" #include "gdesktopappinfo.h" #include "gfile.h" @@ -2638,3 +2640,43 @@ get_all_desktop_entries_for_mime_type (const char *base_mime_type, 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. + * + * Deprecated: The #GDesktopAppInfoLookup interface is deprecated and unused by gio. + */ +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); +} diff --git a/gio/gdesktopappinfo.h b/gio/gdesktopappinfo.h index d7703f7bc..6be936904 100644 --- a/gio/gdesktopappinfo.h +++ b/gio/gdesktopappinfo.h @@ -55,6 +55,46 @@ gboolean g_desktop_app_info_get_is_hidden (GDesktopAppInfo *info); void g_desktop_app_info_set_desktop_env (const char *desktop_env); + +#ifndef G_DISABLE_DEPRECATED + +#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 + * Extending GIO. + */ +#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); + +#endif /* G_DISABLE_DEPRECATED */ + G_END_DECLS #endif /* __G_DESKTOP_APP_INFO_H__ */ diff --git a/gio/gio.symbols b/gio/gio.symbols index eb79b705e..90ea290ea 100644 --- a/gio/gio.symbols +++ b/gio/gio.symbols @@ -131,6 +131,8 @@ g_desktop_app_info_get_filename g_desktop_app_info_get_type G_GNUC_CONST g_desktop_app_info_get_is_hidden g_desktop_app_info_set_desktop_env +g_desktop_app_info_lookup_get_type G_GNUC_CONST +g_desktop_app_info_lookup_get_default_for_uri_scheme #endif #endif #endif diff --git a/gio/giomodule.c b/gio/giomodule.c index 86bf25ed2..d1318933f 100644 --- a/gio/giomodule.c +++ b/gio/giomodule.c @@ -36,14 +36,17 @@ #include "gsocks4aproxy.h" #include "gsocks5proxy.h" #include "gvfs.h" -#ifdef G_OS_UNIX -#include "gdesktopappinfo.h" -#endif #ifdef G_OS_WIN32 #include "gregistrysettingsbackend.h" #endif #include +#undef G_DISABLE_DEPRECATED + +#ifdef G_OS_UNIX +#include "gdesktopappinfo.h" +#endif + /** * SECTION:giomodule * @short_description: Loadable GIO Modules @@ -523,6 +526,13 @@ _g_io_modules_ensure_extension_points_registered (void) { registered_extensions = TRUE; +#ifdef G_OS_UNIX +#if !GLIB_CHECK_VERSION (3, 0, 0) + 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 +#endif + 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);