38
38
static void app_lookup_iface_init(GDesktopAppInfoLookupIface *iface);
39
39
static GObject* fm_app_lookup_constructor(GType type, guint n_props, GObjectConstructParam *props);
40
static void fm_app_lookup_finalize (GObject *object);
40
static void fm_app_lookup_finalize (GObject *object);
41
41
static GAppInfo *get_default_for_uri_scheme(GDesktopAppInfoLookup *lookup, const char *scheme);
43
43
G_DEFINE_DYNAMIC_TYPE_EXTENDED(FmAppLookup, fm_app_lookup, G_TYPE_OBJECT, 0,
47
47
static void fm_app_lookup_class_init(FmAppLookupClass *klass)
49
GObjectClass *g_object_class;
50
g_object_class = G_OBJECT_CLASS(klass);
49
GObjectClass *g_object_class;
50
g_object_class = G_OBJECT_CLASS(klass);
51
51
g_object_class->constructor = fm_app_lookup_constructor;
52
g_object_class->finalize = fm_app_lookup_finalize;
52
g_object_class->finalize = fm_app_lookup_finalize;
55
55
static void fm_app_lookup_class_finalize(FmAppLookupClass *klass)
67
67
static void fm_app_lookup_finalize(GObject *object)
71
g_return_if_fail(object != NULL);
72
g_return_if_fail(FM_IS_APP_LOOKUP(object));
74
self = FM_APP_LOOKUP(object);
75
G_OBJECT_CLASS(fm_app_lookup_parent_class)->finalize(object);
71
g_return_if_fail(object != NULL);
72
g_return_if_fail(FM_IS_APP_LOOKUP(object));
74
self = FM_APP_LOOKUP(object);
75
G_OBJECT_CLASS(fm_app_lookup_parent_class)->finalize(object);
108
108
GAppInfo *get_default_for_uri_scheme(GDesktopAppInfoLookup *lookup, const char *scheme)
114
char* desktop_id = NULL;
117
if(g_ascii_strcasecmp(scheme, "http")==0 || g_ascii_strcasecmp(scheme, "https")==0)
119
else if(g_ascii_strcasecmp(scheme, "mailto")==0)
121
else /* we don't know this */
124
kf = g_key_file_new();
126
/* try user config first */
127
fname = g_build_filename(g_get_user_config_dir(), "libfm/pref-apps.conf", NULL);
128
if(g_key_file_load_from_file(kf, fname, 0, NULL))
130
desktop_id = g_key_file_get_string(kf, "Preferred Applications", key, NULL);
131
if(desktop_id && !*desktop_id)
139
if(!desktop_id) /* system-wide */
141
const gchar* const *dirs = g_get_system_config_dirs();
143
if(g_key_file_load_from_file(kf, fname, 0, NULL))
144
desktop_id = g_key_file_get_string(kf, "Preferred Applications", key, NULL);
145
n = g_strv_length(dirs);
146
for( i = n - 1; i > 0; --i )
148
fname = g_build_filename(dirs[i], "libfm/pref-apps.conf", NULL);
149
if( g_key_file_load_from_file(kf, fname, 0, NULL) )
150
desktop_id = g_key_file_get_string(kf, "Preferred Applications", key, NULL);
170
app = g_desktop_app_info_new(desktop_id);
111
/* use a way compatible with glib >= 2.27 */
112
char* mime_type = g_strconcat("x-scheme-handler/", scheme, NULL);
113
app = g_app_info_get_default_for_type(mime_type, FALSE);