aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--comet.conf16
-rw-r--r--src/block.c5
-rw-r--r--src/block.h1
-rw-r--r--src/blocks/group.c1
-rw-r--r--src/config.c10
-rw-r--r--src/layout.c7
6 files changed, 32 insertions, 8 deletions
diff --git a/comet.conf b/comet.conf
index 5d06cb9..af45850 100644
--- a/comet.conf
+++ b/comet.conf
@@ -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;