diff options
| -rw-r--r-- | comet.conf | 16 | ||||
| -rw-r--r-- | src/block.c | 5 | ||||
| -rw-r--r-- | src/block.h | 1 | ||||
| -rw-r--r-- | src/blocks/group.c | 1 | ||||
| -rw-r--r-- | src/config.c | 10 | ||||
| -rw-r--r-- | src/layout.c | 7 |
6 files changed, 32 insertions, 8 deletions
@@ -6,11 +6,25 @@ height = 40 background = #abc - blocks = date, perf + blocks = date, perf, try2 [jib] sus = false +[block.try2] + type=group + blocks = try + collapse = true + color = #000 + +[block.try] + type = text + text-color = #a123fc + text = "" + color = #fff + ;x-padding = 10 + y-padding = 10 + [block.perf] type = group color = #DC143C diff --git a/src/block.c b/src/block.c index 9a65d84..d0b66c9 100644 --- a/src/block.c +++ b/src/block.c @@ -12,8 +12,9 @@ void block_update(block_t *block) diff = timespec_diff(block->update_last, now); if (timespec_greater(diff, block->update_interval)) { - log_value_debug("Updating block", - "s:label", block->label); + log_value_trace("Updating block", + "s:label", block->label, + "g:ts", ANY_LOG_FORMATTER(timespec_print), &now); block->update_cb(block); block->update_last = now; diff --git a/src/block.h b/src/block.h index 7d37c3d..4254355 100644 --- a/src/block.h +++ b/src/block.h @@ -68,6 +68,7 @@ struct block { unsigned int spacing; size_t n_children; struct block **children; + bool collapse; } group; }; }; diff --git a/src/blocks/group.c b/src/blocks/group.c index 4fcb420..9843afa 100644 --- a/src/blocks/group.c +++ b/src/blocks/group.c @@ -4,6 +4,7 @@ const block_scheme_t block_group_scheme = { .name = "group", .block = { .type = BLOCK_GROUP, + .group.collapse = false, }, .size = 0, .entries = NULL, diff --git a/src/config.c b/src/config.c index 99888da..84804bc 100644 --- a/src/config.c +++ b/src/config.c @@ -44,8 +44,9 @@ static const config_entry_t block_entries[] = { }; static const config_entry_t block_group_entries[] = { - { "spacing", CONFIG_UINT, NULL, offsetof(block_t, group.spacing) }, - { "blocks", CONFIG_LIST, NULL, offsetof(block_t, group.children) }, + { "spacing", CONFIG_UINT, NULL, offsetof(block_t, group.spacing) }, + { "blocks", CONFIG_LIST, NULL, offsetof(block_t, group.children) }, + { "collapse", CONFIG_BOOL, NULL, offsetof(block_t, group.collapse) }, { 0 }, }; @@ -363,7 +364,7 @@ void config_init(config_t *config) config->font = strcopy(config_default.font); config->n_blocks = 1; - config->blocks = malloc(sizeof(block_t)); + config->blocks = calloc(1, sizeof(block_t)); config->blocks->label = strcopy("bar"); config->blocks->type = BLOCK_GROUP; config->blocks->group.spacing = 10; @@ -560,7 +561,7 @@ static bool config_resolve_children(config_t *config, block_t *block) return false; } - log_debug("Block '%s' is parent to '%s'", block->label, config->blocks[j].label); + log_debug("Block '%s' is parent of '%s'", block->label, config->blocks[j].label); block->group.children[i] = &config->blocks[j]; if (!config_resolve_children(config, &config->blocks[j])) @@ -584,6 +585,7 @@ block_t *config_resolve(config_t *config) errors++; log_error("Section '%s' requires at least one child", "bar"); } else { + // NOTE: The first item is the main block config->blocks->min_width = config->blocks->max_width = config->width; errors += !config_resolve_children(config, config->blocks); } diff --git a/src/layout.c b/src/layout.c index 6b6590e..92e6469 100644 --- a/src/layout.c +++ b/src/layout.c @@ -32,7 +32,12 @@ void layout_init(layout_t *layout, block_t *block, layout_info_t info) layout->n_children++; } - if (layout->n_children > 0) { + if (block->group.collapse && layout->n_children == 1) { + layout_t *children = layout->children; + memcpy(layout, children, sizeof(layout_t)); + free(children); + + } else if (layout->n_children > 0) { layout_t *last = &layout->children[layout->n_children - 1]; layout->width = last->x + last->width - x_offset; |
