Look for directories in $XDG_DATA_DIRS as well
This commit is contained in:
parent
a2289b75e1
commit
c9e6173bd2
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
@ -157,17 +158,46 @@ static int _settings_browse_folder(Settings * settings, Config * config,
|
||||||
|
|
||||||
static int _settings_browse(Settings * settings)
|
static int _settings_browse(Settings * settings)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret = 0;
|
||||||
Config * config;
|
Config * config;
|
||||||
GtkTreeModel * model;
|
GtkTreeModel * model;
|
||||||
|
char const * path;
|
||||||
|
char * p;
|
||||||
|
size_t i;
|
||||||
|
size_t j;
|
||||||
|
int datadir = 0;
|
||||||
|
|
||||||
if((config = config_new()) == NULL)
|
if((config = config_new()) == NULL)
|
||||||
return -_settings_error(error_get(), 1);
|
return -_settings_error(error_get(), 1);
|
||||||
model = gtk_icon_view_get_model(GTK_ICON_VIEW(settings->view));
|
model = gtk_icon_view_get_model(GTK_ICON_VIEW(settings->view));
|
||||||
gtk_list_store_clear(GTK_LIST_STORE(model));
|
gtk_list_store_clear(GTK_LIST_STORE(model));
|
||||||
/* FIXME read through every XDG folder as expected */
|
/* read through every XDG application folder */
|
||||||
ret = _settings_browse_folder(settings, config,
|
if((path = getenv("XDG_DATA_DIRS")) == NULL || strlen(path) == 0)
|
||||||
DATADIR "/applications");
|
path = "/usr/local/share:/usr/share";
|
||||||
|
if((p = strdup(path)) == NULL)
|
||||||
|
_settings_error(error_get(), 1);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(i = 0, j = 0;; i++)
|
||||||
|
if(p[i] == '\0')
|
||||||
|
{
|
||||||
|
_settings_browse_folder(settings, config,
|
||||||
|
&p[j]);
|
||||||
|
datadir |= (strcmp(&p[j], DATADIR) == 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if(p[i] == ':')
|
||||||
|
{
|
||||||
|
p[i] = '\0';
|
||||||
|
_settings_browse_folder(settings, config,
|
||||||
|
&p[j]);
|
||||||
|
datadir |= (strcmp(&p[j], DATADIR) == 0);
|
||||||
|
j = i + 1;
|
||||||
|
}
|
||||||
|
free(p);
|
||||||
|
}
|
||||||
|
if(datadir == 0)
|
||||||
|
ret = _settings_browse_folder(settings, config, DATADIR);
|
||||||
config_delete(config);
|
config_delete(config);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -196,7 +226,14 @@ static int _settings_browse_folder(Settings * settings, Config * config,
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
GError * error = NULL;
|
GError * error = NULL;
|
||||||
|
|
||||||
if((dir = opendir(folder)) == NULL)
|
#ifdef DEBUG
|
||||||
|
fprintf(stderr, "DEBUG: %s(\"%s\")\n", __func__, folder);
|
||||||
|
#endif
|
||||||
|
if((path = string_new_append(folder, "/applications", NULL)) == NULL)
|
||||||
|
return -_settings_error(error_get(), 1);
|
||||||
|
dir = opendir(path);
|
||||||
|
string_delete(path);
|
||||||
|
if(dir == NULL)
|
||||||
return -_settings_error(strerror(errno), 1);
|
return -_settings_error(strerror(errno), 1);
|
||||||
theme = gtk_icon_theme_get_default();
|
theme = gtk_icon_theme_get_default();
|
||||||
model = gtk_icon_view_get_model(GTK_ICON_VIEW(settings->view));
|
model = gtk_icon_view_get_model(GTK_ICON_VIEW(settings->view));
|
||||||
|
|
Loading…
Reference in New Issue
Block a user