window: add a helper for config file paths
Add a helper function, that constructs a path to a config file from XDG_CONFIG_HOME environment variable, by the rules of http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html Make desktop-shell find its config file from XDG_CONFIG_HOME. This allows to have a personal config file without continuously fighting with git about wayland-desktop-shell.ini. Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
This commit is contained in:
committed by
Kristian Høgsberg
parent
b38666e6d7
commit
668dd56918
@@ -135,3 +135,41 @@ parse_config_file(const char *path,
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
config_file_path(const char *name)
|
||||||
|
{
|
||||||
|
const char dotconf[] = "/.config/";
|
||||||
|
const char *config_dir;
|
||||||
|
const char *home_dir;
|
||||||
|
char *path;
|
||||||
|
size_t size;
|
||||||
|
|
||||||
|
config_dir = getenv("XDG_CONFIG_HOME");
|
||||||
|
if (!config_dir) {
|
||||||
|
fprintf(stderr, "XDG_CONFIG_HOME is not set,"
|
||||||
|
" falling back to $HOME/.config\n");
|
||||||
|
|
||||||
|
home_dir = getenv("HOME");
|
||||||
|
if (!home_dir) {
|
||||||
|
fprintf(stderr, "HOME is not set, using cwd.\n");
|
||||||
|
return strdup(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
size = strlen(home_dir) + sizeof dotconf + strlen(name);
|
||||||
|
path = malloc(size);
|
||||||
|
if (!path)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
snprintf(path, size, "%s%s%s", home_dir, dotconf, name);
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
size = strlen(config_dir) + 1 + strlen(name) + 1;
|
||||||
|
path = malloc(size);
|
||||||
|
if (!path)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
snprintf(path, size, "%s/%s", config_dir, name);
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|||||||
@@ -348,6 +348,7 @@ launcher_section_done(void *data)
|
|||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
struct desktop desktop;
|
struct desktop desktop;
|
||||||
|
char *config_file;
|
||||||
|
|
||||||
desktop.display = display_create(&argc, &argv, NULL);
|
desktop.display = display_create(&argc, &argv, NULL);
|
||||||
if (desktop.display == NULL) {
|
if (desktop.display == NULL) {
|
||||||
@@ -363,9 +364,11 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
desktop.panel = panel_create(desktop.display);
|
desktop.panel = panel_create(desktop.display);
|
||||||
|
|
||||||
parse_config_file("wayland-desktop-shell.ini",
|
config_file = config_file_path("wayland-desktop-shell.ini");
|
||||||
|
parse_config_file(config_file,
|
||||||
config_sections, ARRAY_LENGTH(config_sections),
|
config_sections, ARRAY_LENGTH(config_sections),
|
||||||
&desktop);
|
&desktop);
|
||||||
|
free(config_file);
|
||||||
|
|
||||||
printf("panel color: %08x\n", key_panel_color);
|
printf("panel color: %08x\n", key_panel_color);
|
||||||
|
|
||||||
|
|||||||
@@ -346,4 +346,7 @@ parse_config_file(const char *path,
|
|||||||
const struct config_section *sections, int num_sections,
|
const struct config_section *sections, int num_sections,
|
||||||
void *data);
|
void *data);
|
||||||
|
|
||||||
|
char *
|
||||||
|
config_file_path(const char *name);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user