Implement a CFG_POSITION type and use it
This commit is contained in:
parent
f01a2ad47d
commit
fe8bd0bb5b
|
@ -36,6 +36,10 @@
|
|||
CFG_FUNC((char *) "include", cfg_awesome_include), \
|
||||
CFG_END()
|
||||
|
||||
#define CFG_POSITION(name, value, flags) \
|
||||
CFG_PTR_CB(name, value, flags, \
|
||||
cfg_position_parse, cfg_value_free)
|
||||
|
||||
/** This is a better writing of cfg_include coming from libconfuse.
|
||||
* With this one, we do not treat errors as fatal.
|
||||
*/
|
||||
|
@ -67,9 +71,34 @@ cfg_awesome_include(cfg_t *cfg, cfg_opt_t *opt,
|
|||
return cfg_include(cfg, opt, argc, argv);
|
||||
}
|
||||
|
||||
static int
|
||||
cfg_position_parse(cfg_t *cfg, cfg_opt_t *opt,
|
||||
const char *value, void *result)
|
||||
{
|
||||
Position *p = p_new(Position, 1);
|
||||
|
||||
if((*p = position_get_from_str(value)) == Off
|
||||
&& a_strcmp(value, "off"))
|
||||
{
|
||||
cfg_error(cfg,
|
||||
"position option '%s' must be top, bottom, right, left, auto or off in section '%s'",
|
||||
opt->name, cfg->name);
|
||||
p_delete(&p);
|
||||
return -1;
|
||||
}
|
||||
*(void **) result = p;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
cfg_value_free(void *value)
|
||||
{
|
||||
p_delete(&value);
|
||||
}
|
||||
|
||||
cfg_opt_t titlebar_opts[] =
|
||||
{
|
||||
CFG_STR((char *) "position", (char *) "auto", CFGF_NONE),
|
||||
CFG_POSITION((char *) "position", (char *) "auto", CFGF_NONE),
|
||||
CFG_STR((char *) "text_align", (char *) "center", CFGF_NONE),
|
||||
CFG_STR((char *) "icon", (char *) "left", CFGF_NONE),
|
||||
CFG_AWESOME_END()
|
||||
|
@ -189,7 +218,7 @@ cfg_opt_t widget_graph_opts[] =
|
|||
CFG_SEC((char *) "mouse", mouse_generic_opts, CFGF_MULTI),
|
||||
CFG_SEC((char *) "data", widget_graph_data_opts, CFGF_TITLE | CFGF_MULTI | CFGF_NO_TITLE_DUPES),
|
||||
CFG_INT((char *) "width", 100, CFGF_NONE),
|
||||
CFG_STR((char *) "grow", (char *) "left", CFGF_NONE),
|
||||
CFG_POSITION((char *) "grow", (char *) "left", CFGF_NONE),
|
||||
CFG_INT((char *) "padding_left", 0, CFGF_NONE),
|
||||
CFG_FLOAT((char *) "height", 0.67, CFGF_NONE),
|
||||
CFG_STR((char *) "bg", (char *) NULL, CFGF_NONE),
|
||||
|
@ -222,7 +251,7 @@ cfg_opt_t widget_progressbar_opts[] =
|
|||
};
|
||||
cfg_opt_t statusbar_opts[] =
|
||||
{
|
||||
CFG_STR((char *) "position", (char *) "top", CFGF_NONE),
|
||||
CFG_POSITION((char *) "position", (char *) "top", CFGF_NONE),
|
||||
CFG_INT((char *) "height", 0, CFGF_NONE),
|
||||
CFG_INT((char *) "width", 0, CFGF_NONE),
|
||||
CFG_SEC((char *) "textbox", widget_textbox_opts, CFGF_TITLE | CFGF_MULTI | CFGF_NO_TITLE_DUPES),
|
||||
|
@ -405,22 +434,6 @@ config_validate_zero_one_float(cfg_t *cfg, cfg_opt_t *opt)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
config_validate_position(cfg_t *cfg, cfg_opt_t *opt)
|
||||
{
|
||||
char *value = cfg_opt_getnstr(opt, cfg_opt_size(opt) - 1);
|
||||
|
||||
if(position_get_from_str(value) == Off
|
||||
&& a_strcmp(value, "off"))
|
||||
{
|
||||
cfg_error(cfg,
|
||||
"position option '%s' must be top, bottom, right, left, auto or off in section '%s'",
|
||||
opt->name, cfg->name);
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
config_validate_alignment(cfg_t *cfg, cfg_opt_t *opt)
|
||||
{
|
||||
|
@ -459,11 +472,6 @@ cfg_new(void)
|
|||
cfg_set_validate_func(cfg, "screen|general|mwfact_upper_limit", config_validate_zero_one_float);
|
||||
cfg_set_validate_func(cfg, "screen|tags|tag|mwfact", config_validate_zero_one_float);
|
||||
|
||||
/* Check position values */
|
||||
cfg_set_validate_func(cfg, "screen|titlebar|position", config_validate_position);
|
||||
cfg_set_validate_func(cfg, "rules|rule|titlebar|position", config_validate_position);
|
||||
cfg_set_validate_func(cfg, "screen|statusbar|position", config_validate_position);
|
||||
|
||||
/* Check alignment values */
|
||||
cfg_set_validate_func(cfg, "screen|titlebar|text_align", config_validate_alignment);
|
||||
cfg_set_validate_func(cfg, "rules|rule|titlebar|text_align", config_validate_alignment);
|
||||
|
|
6
config.c
6
config.c
|
@ -275,9 +275,7 @@ create_widgets(cfg_t* cfg_statusbar, Statusbar *statusbar)
|
|||
static void
|
||||
config_section_titlebar_init(cfg_t *cfg_titlebar, Titlebar *tb)
|
||||
{
|
||||
tb->position = tb->dposition =
|
||||
position_get_from_str(cfg_getstr(cfg_titlebar, "position"));
|
||||
tb->icon = position_get_from_str(cfg_getstr(cfg_titlebar, "icon"));
|
||||
tb->position = tb->dposition = *(Position *) cfg_getptr(cfg_titlebar, "position");
|
||||
tb->text_align = draw_get_align(cfg_getstr(cfg_titlebar, "text_align"));
|
||||
}
|
||||
|
||||
|
@ -375,7 +373,7 @@ config_parse_screen(cfg_t *cfg, int screen)
|
|||
statusbar = p_new(Statusbar, 1);
|
||||
cfgsectmp = cfg_getnsec(cfg_screen, "statusbar", i);
|
||||
statusbar->position = statusbar->dposition =
|
||||
position_get_from_str(cfg_getstr(cfgsectmp, "position"));
|
||||
* (Position *) cfg_getptr(cfgsectmp, "position");
|
||||
statusbar->height = cfg_getint(cfgsectmp, "height");
|
||||
statusbar->width = cfg_getint(cfgsectmp, "width");
|
||||
statusbar->name = a_strdup(cfg_title(cfgsectmp));
|
||||
|
|
|
@ -348,18 +348,16 @@ graph_tell(Widget *widget, char *property, char *command)
|
|||
return WIDGET_ERROR_FORMAT_COLOR;
|
||||
}
|
||||
else if(!a_strcmp(property, "grow"))
|
||||
{
|
||||
if(!a_strcmp(command, "left"))
|
||||
d->grow = Left;
|
||||
else if(!a_strcmp(command, "right"))
|
||||
d->grow = Right;
|
||||
else
|
||||
switch((d->grow = position_get_from_str(command)))
|
||||
{
|
||||
case Left:
|
||||
case Right:
|
||||
break;
|
||||
default:
|
||||
warn("error changing property %s of widget %s, must be 'left' or 'right'\n",
|
||||
property, widget->name);
|
||||
return WIDGET_ERROR_CUSTOM;
|
||||
}
|
||||
}
|
||||
else
|
||||
return WIDGET_ERROR;
|
||||
|
||||
|
@ -405,7 +403,7 @@ graph_new(Statusbar *statusbar, cfg_t *config)
|
|||
return w;
|
||||
}
|
||||
|
||||
d->grow = position_get_from_str(cfg_getstr(config, "grow"));
|
||||
d->grow = *(Position *) cfg_getptr(config, "grow");
|
||||
if(d->grow != Left && d->grow != Right)
|
||||
{
|
||||
warn("graph widget: 'grow' argument must be 'left' or 'right'\n");
|
||||
|
|
Loading…
Reference in New Issue