mirror of
https://codeberg.org/dnkl/yambar.git
synced 2025-04-23 04:25:42 +02:00
config: allow font/foreground attributes on modules too
Previously we allowed it on the bar, and on all particles. Now we also allow it on all modules. This allows us to specify a "default" font/foreground on a per-module basis, having it applied to all the modules particles.
This commit is contained in:
parent
8dc278aaf2
commit
a425378576
13 changed files with 47 additions and 14 deletions
34
config.c
34
config.c
|
@ -191,18 +191,29 @@ conf_to_particle(const struct yml_node *node, struct conf_inherit inherited)
|
||||||
|
|
||||||
const char *on_click_template
|
const char *on_click_template
|
||||||
= on_click != NULL ? yml_value_as_string(on_click) : NULL;
|
= on_click != NULL ? yml_value_as_string(on_click) : NULL;
|
||||||
|
struct deco *deco = deco_node != NULL ? deco_from_config(deco_node) : NULL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Font and foreground are inheritable attributes. Each particle
|
||||||
|
* may specify its own font/foreground values, which will then be
|
||||||
|
* used by itself, and all its sub-particles. If *not* specified,
|
||||||
|
* we inherit the values from our parent. Note that since
|
||||||
|
* particles actually *use* the font/foreground values, we must
|
||||||
|
* clone the font, since each particle takes ownership of its own
|
||||||
|
* font.
|
||||||
|
*/
|
||||||
struct font *font = font_node != NULL
|
struct font *font = font_node != NULL
|
||||||
? conf_to_font(font_node) : font_clone(inherited.font);
|
? conf_to_font(font_node) : font_clone(inherited.font);
|
||||||
struct rgba foreground = foreground_node != NULL
|
struct rgba foreground = foreground_node != NULL
|
||||||
? conf_to_color(foreground_node) : inherited.foreground;
|
? conf_to_color(foreground_node) : inherited.foreground;
|
||||||
struct deco *deco = deco_node != NULL ? deco_from_config(deco_node) : NULL;
|
|
||||||
|
|
||||||
|
/* Instantiate base/common particle */
|
||||||
struct particle *common = particle_common_new(
|
struct particle *common = particle_common_new(
|
||||||
left, right, on_click_template, font, foreground, deco);
|
left, right, on_click_template, font, foreground, deco);
|
||||||
|
|
||||||
const struct particle_info *info = plugin_load_particle(type);
|
const struct particle_info *info = plugin_load_particle(type);
|
||||||
assert(info != NULL);
|
|
||||||
|
|
||||||
|
assert(info != NULL);
|
||||||
return info->from_conf(pair.value, common);
|
return info->from_conf(pair.value, common);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -312,8 +323,25 @@ conf_to_bar(const struct yml_node *bar)
|
||||||
struct yml_dict_iter m = yml_dict_iter(it.node);
|
struct yml_dict_iter m = yml_dict_iter(it.node);
|
||||||
const char *mod_name = yml_value_as_string(m.key);
|
const char *mod_name = yml_value_as_string(m.key);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* These aren't used by the modules, but passed down
|
||||||
|
* to particles. This allows us to specify a default
|
||||||
|
* font and foreground for each module, and having it
|
||||||
|
* applied to all its particles.
|
||||||
|
*/
|
||||||
|
const struct yml_node *mod_font = yml_get_value(m.value, "font");
|
||||||
|
const struct yml_node *mod_foreground = yml_get_value(
|
||||||
|
m.value, "foreground");
|
||||||
|
|
||||||
|
struct conf_inherit mod_inherit = {
|
||||||
|
.font = mod_font != NULL
|
||||||
|
? conf_to_font(mod_font) : inherited.font,
|
||||||
|
.foreground = mod_foreground != NULL
|
||||||
|
? conf_to_color(mod_foreground) : inherited.foreground,
|
||||||
|
};
|
||||||
|
|
||||||
const struct module_info *info = plugin_load_module(mod_name);
|
const struct module_info *info = plugin_load_module(mod_name);
|
||||||
mods[idx] = info->from_conf(m.value, inherited);
|
mods[idx] = info->from_conf(m.value, mod_inherit);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
|
|
5
module.h
5
module.h
|
@ -15,6 +15,11 @@ struct module_info {
|
||||||
bool (*verify_conf)(keychain_t *chain, const struct yml_node *node);
|
bool (*verify_conf)(keychain_t *chain, const struct yml_node *node);
|
||||||
struct module *(*from_conf)(const struct yml_node *node,
|
struct module *(*from_conf)(const struct yml_node *node,
|
||||||
struct conf_inherit inherited);
|
struct conf_inherit inherited);
|
||||||
|
|
||||||
|
#define MODULE_COMMON_ATTRS \
|
||||||
|
{"font", false, &conf_verify_font}, \
|
||||||
|
{"foreground", false, &conf_verify_color}, \
|
||||||
|
{NULL, false, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct module_run_context {
|
struct module_run_context {
|
||||||
|
|
|
@ -288,7 +288,7 @@ verify_conf(keychain_t *chain, const struct yml_node *node)
|
||||||
{"mixer", true, &conf_verify_string},
|
{"mixer", true, &conf_verify_string},
|
||||||
{"content", true, &conf_verify_particle},
|
{"content", true, &conf_verify_particle},
|
||||||
{"anchors", false, NULL},
|
{"anchors", false, NULL},
|
||||||
{NULL, false, NULL}
|
MODULE_COMMON_ATTRS,
|
||||||
};
|
};
|
||||||
|
|
||||||
return conf_verify_dict(chain, node, attrs);
|
return conf_verify_dict(chain, node, attrs);
|
||||||
|
|
|
@ -231,7 +231,7 @@ verify_conf(keychain_t *chain, const struct yml_node *node)
|
||||||
{"name", true, &conf_verify_string},
|
{"name", true, &conf_verify_string},
|
||||||
{"content", true, &conf_verify_particle},
|
{"content", true, &conf_verify_particle},
|
||||||
{"anchors", false, NULL},
|
{"anchors", false, NULL},
|
||||||
{NULL, false, NULL}
|
MODULE_COMMON_ATTRS,
|
||||||
};
|
};
|
||||||
|
|
||||||
return conf_verify_dict(chain, node, attrs);
|
return conf_verify_dict(chain, node, attrs);
|
||||||
|
|
|
@ -364,7 +364,7 @@ verify_conf(keychain_t *chain, const struct yml_node *node)
|
||||||
{"poll-interval", false, &conf_verify_int},
|
{"poll-interval", false, &conf_verify_int},
|
||||||
{"content", true, &conf_verify_particle},
|
{"content", true, &conf_verify_particle},
|
||||||
{"anchors", false, NULL},
|
{"anchors", false, NULL},
|
||||||
{NULL, false, NULL}
|
MODULE_COMMON_ATTRS,
|
||||||
};
|
};
|
||||||
|
|
||||||
return conf_verify_dict(chain, node, attrs);
|
return conf_verify_dict(chain, node, attrs);
|
||||||
|
|
|
@ -115,7 +115,7 @@ verify_conf(keychain_t *chain, const struct yml_node *node)
|
||||||
{"time-format", false, &conf_verify_string},
|
{"time-format", false, &conf_verify_string},
|
||||||
{"content", true, &conf_verify_particle},
|
{"content", true, &conf_verify_particle},
|
||||||
{"anchors", false, NULL},
|
{"anchors", false, NULL},
|
||||||
{NULL, false, NULL}
|
MODULE_COMMON_ATTRS,
|
||||||
};
|
};
|
||||||
|
|
||||||
return conf_verify_dict(chain, node, attrs);
|
return conf_verify_dict(chain, node, attrs);
|
||||||
|
|
|
@ -710,7 +710,7 @@ verify_conf(keychain_t *chain, const struct yml_node *node)
|
||||||
{"right-spacing", false, &conf_verify_int},
|
{"right-spacing", false, &conf_verify_int},
|
||||||
{"content", true, &verify_content},
|
{"content", true, &verify_content},
|
||||||
{"anchors", false, NULL},
|
{"anchors", false, NULL},
|
||||||
{NULL, false, NULL}
|
MODULE_COMMON_ATTRS,
|
||||||
};
|
};
|
||||||
|
|
||||||
return conf_verify_dict(chain, node, attrs);
|
return conf_verify_dict(chain, node, attrs);
|
||||||
|
|
|
@ -60,7 +60,7 @@ verify_conf(keychain_t *chain, const struct yml_node *node)
|
||||||
static const struct attr_info attrs[] = {
|
static const struct attr_info attrs[] = {
|
||||||
{"content", true, &conf_verify_particle},
|
{"content", true, &conf_verify_particle},
|
||||||
{"anchors", false, NULL},
|
{"anchors", false, NULL},
|
||||||
{NULL, false, NULL}
|
MODULE_COMMON_ATTRS,
|
||||||
};
|
};
|
||||||
|
|
||||||
return conf_verify_dict(chain, node, attrs);
|
return conf_verify_dict(chain, node, attrs);
|
||||||
|
|
|
@ -499,7 +499,7 @@ verify_conf(keychain_t *chain, const struct yml_node *node)
|
||||||
{"port", false, &conf_verify_int},
|
{"port", false, &conf_verify_int},
|
||||||
{"content", true, &conf_verify_particle},
|
{"content", true, &conf_verify_particle},
|
||||||
{"anchors", false, NULL},
|
{"anchors", false, NULL},
|
||||||
{NULL, false, NULL}
|
MODULE_COMMON_ATTRS,
|
||||||
};
|
};
|
||||||
|
|
||||||
return conf_verify_dict(chain, node, attrs);
|
return conf_verify_dict(chain, node, attrs);
|
||||||
|
|
|
@ -550,7 +550,7 @@ verify_conf(keychain_t *chain, const struct yml_node *node)
|
||||||
{"name", true, &conf_verify_string},
|
{"name", true, &conf_verify_string},
|
||||||
{"content", true, &conf_verify_particle},
|
{"content", true, &conf_verify_particle},
|
||||||
{"anchors", false, NULL},
|
{"anchors", false, NULL},
|
||||||
{NULL, false, NULL}
|
MODULE_COMMON_ATTRS,
|
||||||
};
|
};
|
||||||
|
|
||||||
return conf_verify_dict(chain, node, attrs);
|
return conf_verify_dict(chain, node, attrs);
|
||||||
|
|
|
@ -585,7 +585,7 @@ verify_conf(keychain_t *chain, const struct yml_node *node)
|
||||||
{"right-spacing", false, &conf_verify_int},
|
{"right-spacing", false, &conf_verify_int},
|
||||||
{"content", true, &conf_verify_particle},
|
{"content", true, &conf_verify_particle},
|
||||||
{"anchors", false, NULL},
|
{"anchors", false, NULL},
|
||||||
{NULL, false, NULL}
|
MODULE_COMMON_ATTRS,
|
||||||
};
|
};
|
||||||
|
|
||||||
return conf_verify_dict(chain, node, attrs);
|
return conf_verify_dict(chain, node, attrs);
|
||||||
|
|
|
@ -465,7 +465,7 @@ verify_conf(keychain_t *chain, const struct yml_node *node)
|
||||||
static const struct attr_info attrs[] = {
|
static const struct attr_info attrs[] = {
|
||||||
{"content", true, &conf_verify_particle},
|
{"content", true, &conf_verify_particle},
|
||||||
{"anchors", false, NULL},
|
{"anchors", false, NULL},
|
||||||
{NULL, false, NULL}
|
MODULE_COMMON_ATTRS,
|
||||||
};
|
};
|
||||||
|
|
||||||
return conf_verify_dict(chain, node, attrs);
|
return conf_verify_dict(chain, node, attrs);
|
||||||
|
|
|
@ -327,7 +327,7 @@ verify_conf(keychain_t *chain, const struct yml_node *node)
|
||||||
static const struct attr_info attrs[] = {
|
static const struct attr_info attrs[] = {
|
||||||
{"content", true, &conf_verify_particle},
|
{"content", true, &conf_verify_particle},
|
||||||
{"anchors", false, NULL},
|
{"anchors", false, NULL},
|
||||||
{NULL, false, NULL}
|
MODULE_COMMON_ATTRS,
|
||||||
};
|
};
|
||||||
|
|
||||||
return conf_verify_dict(chain, node, attrs);
|
return conf_verify_dict(chain, node, attrs);
|
||||||
|
|
Loading…
Add table
Reference in a new issue