aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/blocks/date.c15
-rw-r--r--src/blocks/fs.c16
-rw-r--r--src/blocks/ram.c12
-rw-r--r--src/blocks/script.c16
-rw-r--r--src/blocks/slider.c1
-rw-r--r--src/config.c3
6 files changed, 59 insertions, 4 deletions
diff --git a/src/blocks/date.c b/src/blocks/date.c
index cd1adce..cbc6cce 100644
--- a/src/blocks/date.c
+++ b/src/blocks/date.c
@@ -60,6 +60,20 @@ static int block_date_validate(block_t *block, config_t *config)
return errors;
}
+static config_status_t block_date_change(block_t *block, config_t *config, const char *key, const char *value)
+{
+ block_date_t *date = (block_date_t *)block;
+
+ if (!strcmp(key, "text")) {
+ free(date->format);
+ date->format = strcopy(value);
+ return CONFIG_SUCCESS;
+ }
+
+ extern const config_entry_t block_text_entries[];
+ return config_read_entry(block_text_entries, block, NULL, "block", block->label, key, value);
+}
+
const block_scheme_t block_date_scheme = {
.name = "date",
.entries = NULL,
@@ -67,4 +81,5 @@ const block_scheme_t block_date_scheme = {
.init_fn = block_date_init,
.clean_fn = block_date_clean,
.validate_fn = block_date_validate,
+ .change_fn = block_date_change,
};
diff --git a/src/blocks/fs.c b/src/blocks/fs.c
index a52e491..ea51a93 100644
--- a/src/blocks/fs.c
+++ b/src/blocks/fs.c
@@ -179,6 +179,21 @@ static const config_entry_t block_fs_entries[] = {
{ 0 },
};
+static config_status_t block_fs_change(block_t *block, config_t *config, const char *key, const char *value)
+{
+ if (!strcmp(key, "text")) {
+ log_panic("TODO");
+ return CONFIG_SUCCESS;
+ }
+
+ extern const config_entry_t block_text_entries[];
+ config_status_t success = config_read_entry(block_text_entries, block, NULL, "block", block->label, key, value);
+
+ return success == CONFIG_UNKNOWN
+ ? config_read_entry(block_fs_entries, block, NULL, "block", block->label, key, value)
+ : success;
+}
+
const block_scheme_t block_fs_scheme = {
.name = "fs",
.entries = block_fs_entries,
@@ -186,4 +201,5 @@ const block_scheme_t block_fs_scheme = {
.init_fn = block_fs_init,
.clean_fn = block_fs_clean,
.validate_fn = block_fs_validate,
+ .change_fn = block_fs_change,
};
diff --git a/src/blocks/ram.c b/src/blocks/ram.c
index 89cd196..7fd821f 100644
--- a/src/blocks/ram.c
+++ b/src/blocks/ram.c
@@ -175,6 +175,17 @@ static int block_ram_validate(block_t *block, config_t *config)
return errors;
}
+static config_status_t block_ram_change(block_t *block, config_t *config, const char *key, const char *value)
+{
+ if (!strcmp(key, "text")) {
+ log_panic("TODO");
+ return CONFIG_SUCCESS;
+ }
+
+ extern const config_entry_t block_text_entries[];
+ return config_read_entry(block_text_entries, block, NULL, "block", block->label, key, value);
+}
+
const block_scheme_t block_ram_scheme = {
.name = "ram",
.entries = NULL,
@@ -182,4 +193,5 @@ const block_scheme_t block_ram_scheme = {
.init_fn = block_ram_init,
.clean_fn = block_ram_clean,
.validate_fn = block_ram_validate,
+ .change_fn = block_ram_change,
};
diff --git a/src/blocks/script.c b/src/blocks/script.c
index 6fa5f6d..098dc4e 100644
--- a/src/blocks/script.c
+++ b/src/blocks/script.c
@@ -73,15 +73,23 @@ static int block_script_validate(block_t *block, config_t *config)
return errors;
}
-static const config_entry_t block_script_entries[] = {
- { 0 },
-};
+static config_status_t block_script_change(block_t *block, config_t *config, const char *key, const char *value)
+{
+ if (!strcmp(key, "text")) {
+ log_panic("TODO");
+ return CONFIG_SUCCESS;
+ }
+
+ extern const config_entry_t block_text_entries[];
+ return config_read_entry(block_text_entries, block, NULL, "block", block->label, key, value);
+}
const block_scheme_t block_script_scheme = {
.name = "script",
- .entries = block_script_entries,
+ .entries = NULL,
.size = sizeof(block_script_t),
.init_fn = block_script_init,
.clean_fn = block_script_clean,
.validate_fn = block_script_validate,
+ .change_fn = block_script_change,
};
diff --git a/src/blocks/slider.c b/src/blocks/slider.c
index 6ad5211..34d6c35 100644
--- a/src/blocks/slider.c
+++ b/src/blocks/slider.c
@@ -281,6 +281,7 @@ const block_scheme_t block_slider_scheme = {
.name = "slider",
.entries = block_slider_entries,
.size = sizeof(block_slider_t),
+ .validate_change = true,
.init_fn = block_slider_init,
.clean_fn = block_slider_clean,
.validate_fn = block_slider_validate,
diff --git a/src/config.c b/src/config.c
index 6d671b9..ffceba9 100644
--- a/src/config.c
+++ b/src/config.c
@@ -193,6 +193,9 @@ static bool config_read_color(const char *value, color_t *result)
static bool config_read_gradient(const char *value, gradient_t *result)
{
+ // TODO: Ensure that this is correct
+ gradient_free(result);
+
size_t count = 0;
for (size_t i = 0; value[i] != '\0'; ++i)
count += value[i] == ',';