aboutsummaryrefslogtreecommitdiff
path: root/src/block.c
diff options
context:
space:
mode:
authorFederico Angelilli <code@fedang.net>2024-11-28 01:09:40 +0100
committerFederico Angelilli <code@fedang.net>2024-11-28 01:09:40 +0100
commit737167955e8347ce06718e7a8324c9d2ac89dfba (patch)
treed187ac026739c01eb5df22a3954b95eb7bc63a7b /src/block.c
parent6ab3b52fbde3ab2ac11e66e4d664f67e108f6aee (diff)
Refactor actions
Diffstat (limited to 'src/block.c')
-rw-r--r--src/block.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/src/block.c b/src/block.c
index 04ad902..c397b5a 100644
--- a/src/block.c
+++ b/src/block.c
@@ -51,6 +51,22 @@ void block_update(block_t *block)
}
}
+bool block_resolve_action(block_t *block, config_t *config, action_t **action)
+{
+ if (action == NULL || *action == NULL)
+ return true;
+
+ char *label = (char *)*action;
+
+ bool result = config_resolve_action(config, label, action);
+ if (!result) {
+ log_error("Action '%s' not found (referenced by block '%s')", label, block->label);
+ }
+
+ free(label);
+ return result;
+}
+
bool block_resolve(block_t *block, config_t *config)
{
if (block->resolved)
@@ -59,13 +75,8 @@ bool block_resolve(block_t *block, config_t *config)
block->resolved = true;
for (size_t i = 0; i < EVENT_MAX; i++) {
- char *action = (char *)block->actions[i];
- if (action == NULL) continue;
-
- if (!config_resolve_action(config, action, &block->actions[i]))
+ if (!block_resolve_action(block, config, &block->actions[i]))
return false;
-
- free(action);
}
return block->scheme->resolve_fn == NULL
@@ -92,8 +103,8 @@ void block_free(block_t *block)
if (block->scheme->clean_fn != NULL)
block->scheme->clean_fn(block);
- gradient_free(&block->bg_color);
- gradient_free(&block->line_color);
+ gradient_clean(&block->bg_color);
+ gradient_clean(&block->line_color);
free(block->label);
free(block);