mirror of
https://github.com/labwc/labwc.git
synced 2025-10-29 05:40:24 -04:00
Add the -m|--merge-config command line option to iterate backwards over XDG Base Dir paths and read config/theme files multiple times. For example if both ~/.config/labwc/rc.xml and /etc/xdg/labwc/rc.xml exist, the latter will be read first and then the former (if --merge-config is enabled). When $XDG_CONFIG_HOME is defined, make it replace (not augment) $HOME/.config. Similarly, make $XDG_CONFIG_DIRS replace /etc/xdg when defined. XDG Base Dir Spec does not specify whether or not an application (or a compositor!) should (a) define that only the file under the most important base directory should be used, or (b) define rules for merging the information from the different files. ref: https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html In the case of labwc there is a use-case for both positions, just to be clear, the default behaviour, described by position (a) above, does NOT change. This change affects the following config/theme files: - rc.xml - menu.xml - autostart - environment - themerc - themerc-override - Theme buttons, for example max.xbm Instead of caching global config/theme directories, create lists of paths (e.g. '/home/foo/.config/labwc/rc.xml', '/etc/xdg/labwc/rc.xml', etc). This creates more common parsing logic and just reversing the direction of iteration and breaks early if config-merge is not wanted. Enable better fallback for themes. For example if a particular theme does not exist in $HOME/.local/share/themes, it will be searched for in ~/.themes/ and so on. This also applies to theme buttons which now fallback on an individual basis. Avoid using stat() in most situations and just go straight to fopen(). Fixes #1406
20 lines
516 B
C
20 lines
516 B
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
#ifndef LABWC_DIR_H
|
|
#define LABWC_DIR_H
|
|
|
|
#include <wayland-server-core.h>
|
|
|
|
struct path {
|
|
char *string;
|
|
struct wl_list link;
|
|
};
|
|
|
|
struct wl_list *paths_get_prev(struct wl_list *elm);
|
|
struct wl_list *paths_get_next(struct wl_list *elm);
|
|
|
|
void paths_config_create(struct wl_list *paths, const char *filename);
|
|
void paths_theme_create(struct wl_list *paths, const char *theme_name,
|
|
const char *filename);
|
|
void paths_destroy(struct wl_list *paths);
|
|
|
|
#endif /* LABWC_DIR_H */
|