static gboolean parse_link (EggDesktopFile *desktop_file, EggDesktopFile **app_desktop_file, GSList **documents, GError **error) { char *url; GKeyFile *key_file; url = g_key_file_get_string (desktop_file->key_file, EGG_DESKTOP_FILE_GROUP, EGG_DESKTOP_FILE_KEY_URL, error); if (!url) return FALSE; *documents = g_slist_prepend (NULL, url); /* FIXME: use gvfs */ key_file = g_key_file_new (); g_key_file_set_string (key_file, EGG_DESKTOP_FILE_GROUP, EGG_DESKTOP_FILE_KEY_NAME, "xdg-open"); g_key_file_set_string (key_file, EGG_DESKTOP_FILE_GROUP, EGG_DESKTOP_FILE_KEY_TYPE, "Application"); g_key_file_set_string (key_file, EGG_DESKTOP_FILE_GROUP, EGG_DESKTOP_FILE_KEY_EXEC, "xdg-open %u"); *app_desktop_file = egg_desktop_file_new_from_key_file (key_file, NULL, NULL); return TRUE; }
/** * egg_desktop_file_new: * @desktop_file_path: path to a Freedesktop-style Desktop file * @error: error pointer * * Creates a new #EggDesktopFile for @desktop_file. * * Return value: the new #EggDesktopFile, or %NULL on error. **/ EggDesktopFile* egg_desktop_file_new(const char* desktop_file_path, GError** error) { GKeyFile* key_file; key_file = g_key_file_new(); if (!g_key_file_load_from_file(key_file, desktop_file_path, 0, error)) { g_key_file_free(key_file); return NULL; } return egg_desktop_file_new_from_key_file(key_file, desktop_file_path, error); }
/** * egg_desktop_file_new_from_data_dirs: * @desktop_file_path: relative path to a Freedesktop-style Desktop file * @error: error pointer * * Looks for @desktop_file_path in the paths returned from * g_get_user_data_dir() and g_get_system_data_dirs(), and creates * a new #EggDesktopFile from it. * * Return value: the new #EggDesktopFile, or %NULL on error. **/ EggDesktopFile* egg_desktop_file_new_from_data_dirs(const char* desktop_file_path, GError** error) { EggDesktopFile* desktop_file; GKeyFile* key_file; char* full_path; key_file = g_key_file_new(); if (!g_key_file_load_from_data_dirs(key_file, desktop_file_path, &full_path, 0, error)) { g_key_file_free(key_file); return NULL; } desktop_file = egg_desktop_file_new_from_key_file(key_file, full_path, error); g_free(full_path); return desktop_file; }