Commit fb94859e authored by Benjamin Otte's avatar Benjamin Otte

API: Reinstate "gio-desktop-app-info-lookup" extension point

Removing an extension point is an API and ABI break. In particular, it
causes (older) gvfs versions to fail loading with a linkage error from
ld which in turn makes the desktop unusable.
So this reinstate the extension point and API provided by it, but
deprecates and does not use it. So no functionality is changed.

This reverts parts of commit 9b262f1c.

Complaints-Also-To: Ryan Lortie <desrt@desrt.ca>
parent 9f02ee79
......@@ -32,6 +32,8 @@
#include <crt_externs.h>
#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);
}
......@@ -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
* <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);
#endif /* G_DISABLE_DEPRECATED */
G_END_DECLS
#endif /* __G_DESKTOP_APP_INFO_H__ */
......@@ -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
......
......@@ -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 <glib/gstdio.h>
#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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment