forked from enlightenment/enlightenment
handle xdg "autostart" directories in apps dialogs
a valid autostart directory can exist in any xdg data/config directory according to spec, so ensure we check everywhere when listing them
This commit is contained in:
parent
db264cca49
commit
07ea23b5b9
|
@ -601,50 +601,56 @@ _fill_apps_list(E_Config_App_List *apps)
|
||||||
static void
|
static void
|
||||||
_fill_xdg_list(E_Config_App_List *apps)
|
_fill_xdg_list(E_Config_App_List *apps)
|
||||||
{
|
{
|
||||||
Eina_List *files;
|
Eina_List *files, *dirs;
|
||||||
Efreet_Desktop *desk = NULL;
|
Efreet_Desktop *desk = NULL;
|
||||||
const char *path = "/etc/xdg/autostart";
|
const char *path;
|
||||||
char *file, *ext;
|
char *file, *ext;
|
||||||
char buf[4096];
|
char buf[PATH_MAX], pbuf[PATH_MAX];
|
||||||
|
|
||||||
files = ecore_file_ls(path);
|
dirs = eina_list_merge(eina_list_clone(efreet_config_dirs_get()), eina_list_clone(efreet_data_dirs_get()));
|
||||||
EINA_LIST_FREE(files, file)
|
dirs = eina_list_append(dirs, efreet_data_home_get());
|
||||||
|
EINA_LIST_FREE(dirs, path)
|
||||||
{
|
{
|
||||||
Eina_List *ll;
|
snprintf(pbuf, sizeof(pbuf), "%s/autostart", path);
|
||||||
|
files = ecore_file_ls(pbuf);
|
||||||
if ((file[0] == '.') || !(ext = strrchr(file, '.')) || (strcmp(ext, ".desktop")))
|
EINA_LIST_FREE(files, file)
|
||||||
{
|
{
|
||||||
free(file);
|
Eina_List *ll;
|
||||||
continue;
|
|
||||||
}
|
|
||||||
snprintf(buf, sizeof(buf), "%s/%s", path, file);
|
|
||||||
free(file);
|
|
||||||
|
|
||||||
desk = efreet_desktop_new(buf);
|
if ((file[0] == '.') || !(ext = strrchr(file, '.')) || (strcmp(ext, ".desktop")))
|
||||||
if (!desk)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
ll = eina_list_search_unsorted_list(apps->desks, _cb_desks_sort, desk);
|
|
||||||
if (ll)
|
|
||||||
{
|
|
||||||
Efreet_Desktop *old;
|
|
||||||
|
|
||||||
old = eina_list_data_get(ll);
|
|
||||||
/*
|
|
||||||
* This fixes when we have several .desktop with the same name,
|
|
||||||
* and the only difference is that some of them are for specific
|
|
||||||
* desktops.
|
|
||||||
*/
|
|
||||||
if ((old->only_show_in) && (!desk->only_show_in))
|
|
||||||
{
|
{
|
||||||
efreet_desktop_free(old);
|
free(file);
|
||||||
eina_list_data_set(ll, desk);
|
continue;
|
||||||
|
}
|
||||||
|
snprintf(buf, sizeof(buf), "%s/%s", pbuf, file);
|
||||||
|
free(file);
|
||||||
|
|
||||||
|
desk = efreet_desktop_new(buf);
|
||||||
|
if (!desk)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
ll = eina_list_search_unsorted_list(apps->desks, _cb_desks_sort, desk);
|
||||||
|
if (ll)
|
||||||
|
{
|
||||||
|
Efreet_Desktop *old;
|
||||||
|
|
||||||
|
old = eina_list_data_get(ll);
|
||||||
|
/*
|
||||||
|
* This fixes when we have several .desktop with the same name,
|
||||||
|
* and the only difference is that some of them are for specific
|
||||||
|
* desktops.
|
||||||
|
*/
|
||||||
|
if ((old->only_show_in) && (!desk->only_show_in))
|
||||||
|
{
|
||||||
|
efreet_desktop_free(old);
|
||||||
|
eina_list_data_set(ll, desk);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
efreet_desktop_free(desk);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
efreet_desktop_free(desk);
|
apps->desks = eina_list_append(apps->desks, desk);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
apps->desks = eina_list_append(apps->desks, desk);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
apps->desks = eina_list_sort(apps->desks, -1, _cb_desks_sort);
|
apps->desks = eina_list_sort(apps->desks, -1, _cb_desks_sort);
|
||||||
|
|
Loading…
Reference in New Issue