Commit graph

19 commits

Author SHA1 Message Date
John Lindgren
0573f16693 common: remove buf_init(), add BUF_INIT and buf_move()
Add a BUF_INIT macro, which makes it easier to initialize a struct buf
to an empty string (without a heap allocation).

Add buf_move() to move the contents of one struct buf to another (the
source is reset to BUF_INIT, analogous to C++ move-assignment).

Use buf_reset() instead of directly calling `free(s->buf)` since the
internal buf may not always be allocated by malloc() now.
2024-04-18 07:00:23 +01:00
Johan Malm
698c7ace07 config: support merging multiple config files
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
2024-01-18 20:20:36 +00:00
Consolatis
82e9e866ec Enable more compiler warnings 2023-02-01 10:42:22 +01:00
Consolatis
1995a33df9 CodeStyle: prevent space in code indents 2023-01-31 21:22:40 +00:00
Johan Malm
b94f3b1af0 src/common/dirs.c: add missing slash
Change "opt/share/themes" to "/opt/share/themes"
2022-04-26 21:50:24 +01:00
Johan Malm
5b34c81768 Fix trivial coding style breaches 2022-04-04 20:53:36 +01:00
Johan Malm
e227de1346 Add SPDX identifiers 2021-11-13 21:56:53 +00:00
Johan Malm
b967592289 Fix coding style 2021-09-24 22:14:04 +01:00
Johan Malm
82e47ac1f5 Remove src/common/log.c
Use wlr_log() instead
2021-07-23 21:15:55 +01:00
Johan Malm
20fd8f59a7 Remove info() and die() 2021-07-22 21:30:17 +01:00
Johan Malm
2f44e954aa Remove clang-format on/off comments 2020-10-31 15:33:46 +00:00
Johan Malm
96e05057a3 Update .clang-format
Align with wlroots style
2020-09-28 20:41:41 +01:00
Johan Malm
1721b339da Reload config+theme on SIGHUP 2020-09-25 19:42:40 +01:00
Johan Malm
4a89fbfb22 Improve log messages for reading config+theme 2020-09-14 18:17:36 +01:00
Johan Malm
7afc189c06 common/dir.c: do not include openbox/ dirs
It is better to be explicit with config files and only using those
specifically intended for labwc. Whilst compatibility with openbox is
intended, there are areas where it just doesn't make sense to include
settings intended for openbox, for example in the case of
$HOME/.config/openbox/autostart

With built-in icons and theme/config settings, it should be easy for new
users to get started without spending time on config files anyway.
2020-08-31 08:17:34 +01:00
Johan Malm
e62c251a74 common/dir.c: fix double free 2020-08-21 20:01:08 +01:00
Johan Malm
fd20570861 common/dir.c: add strfreev() 2020-08-18 20:15:14 +01:00
Johan Malm
2a17df0f8b Add log.c with info() and warn() 2020-08-12 19:37:44 +01:00
Johan Malm
f003abf608 Simplify and merge {config,theme}-dir.c 2020-08-10 17:24:17 +01:00