Add func to read a .desktop file from disk

SVN revision: 47250
This commit is contained in:
Sebastian Dransfeld 2010-03-15 19:57:57 +00:00
parent a4c63dd80d
commit ef2cb7ab02
2 changed files with 30 additions and 12 deletions

View File

@ -428,12 +428,13 @@ EAPI Efreet_Desktop *
efreet_desktop_new(const char *file)
{
Efreet_Desktop *desktop = NULL;
char rp[PATH_MAX];
if (!file) return NULL;
if (!realpath(file, rp)) return NULL;
if (cache)
{
char rp[PATH_MAX];
if (!realpath(file, rp)) return NULL;
/* TODO: Check if the cached version is out of date */
desktop = eet_data_read(cache, desktop_edd, rp);
if (desktop)
@ -443,24 +444,40 @@ efreet_desktop_new(const char *file)
return desktop;
}
}
/* TODO:
* Add .desktop file path to a cache file, so that
* efreet_desktop_cache_create can add it to the cache
*/
return efreet_desktop_uncached_new(file);
}
if (!ecore_file_exists(rp)) goto error;
/**
* @param file: The file to create the Efreet_Desktop from
* @return Returns a new Efreet_Desktop on success, NULL on failure
* @brief Creates a new Efreet_Desktop structure initialized from the
* contents of @a file or NULL on failure
*
* By using efreet_desktop_uncached_new the Efreet_Desktop structure will be
* read from disk, and not from any cache.
*/
EAPI Efreet_Desktop *
efreet_desktop_uncached_new(const char *file)
{
Efreet_Desktop *desktop = NULL;
char rp[PATH_MAX];
if (!file) return NULL;
if (!realpath(file, rp)) return NULL;
if (!ecore_file_exists(rp)) return NULL;
desktop = NEW(Efreet_Desktop, 1);
if (!desktop) goto error;
if (!desktop) return NULL;
desktop->orig_path = strdup(rp);
if (!efreet_desktop_read(desktop)) goto error;
if (!efreet_desktop_read(desktop))
{
efreet_desktop_free(desktop);
return NULL;
}
desktop->ref = 1;
return desktop;
error:
if (desktop) efreet_desktop_free(desktop);
return NULL;
}
/**

View File

@ -96,6 +96,7 @@ EAPI Efreet_Desktop *efreet_desktop_get(const char *file);
EAPI int efreet_desktop_ref(Efreet_Desktop *desktop);
EAPI Efreet_Desktop *efreet_desktop_empty_new(const char *file);
EAPI Efreet_Desktop *efreet_desktop_new(const char *file);
EAPI Efreet_Desktop *efreet_desktop_uncached_new(const char *file);
EAPI void efreet_desktop_free(Efreet_Desktop *desktop);
#define efreet_desktop_unref(desktop) efreet_desktop_free((desktop))