diff options
| -rw-r--r-- | src/block.h | 9 | ||||
| -rw-r--r-- | src/blocks/date.c | 9 | ||||
| -rw-r--r-- | src/blocks/fs.c | 6 | ||||
| -rw-r--r-- | src/blocks/group.c | 2 | ||||
| -rw-r--r-- | src/blocks/ram.c | 6 | ||||
| -rw-r--r-- | src/blocks/script.c | 6 | ||||
| -rw-r--r-- | src/blocks/slider.c | 4 | ||||
| -rw-r--r-- | src/blocks/text.c | 4 | ||||
| -rw-r--r-- | src/config.c | 9 | ||||
| -rw-r--r-- | src/window.c | 3 |
10 files changed, 33 insertions, 25 deletions
diff --git a/src/block.h b/src/block.h index 715c017..6b3b2c5 100644 --- a/src/block.h +++ b/src/block.h @@ -92,7 +92,7 @@ typedef struct { // Called to allocate a block with its default state // -typedef void (*block_init_t)(block_t *block, const block_scheme_t *scheme); +typedef void (*block_init_t)(block_t *block); // Called to cleanup a block and free its memory // NOTE: This should NOT free any other block! @@ -101,7 +101,11 @@ typedef void (*block_clean_t)(block_t *block); // Called to validate the block after parsing the config // -typedef int (*block_validate_t)(block_t *block, const block_scheme_t *scheme); +typedef int (*block_validate_t)(block_t *block); + +// Called to validate changes to a block variable +// +typedef int (*block_change_t)(block_t *block, const char *key, const char *value); struct block_scheme { const char *name; @@ -110,6 +114,7 @@ struct block_scheme { block_init_t init_fn; block_clean_t clean_fn; block_validate_t validate_fn; + block_change_t change_fn; }; extern const block_scheme_t *block_schemes[]; diff --git a/src/blocks/date.c b/src/blocks/date.c index c9ffb55..1cb9da9 100644 --- a/src/blocks/date.c +++ b/src/blocks/date.c @@ -31,10 +31,10 @@ static void block_date_update(block_t *block) assert(date->block.text != NULL); } -static void block_date_init(block_t *block, const block_scheme_t *scheme) +static void block_date_init(block_t *block) { extern const block_scheme_t block_text_scheme; - block_text_scheme.init_fn(block, scheme); + block_text_scheme.init_fn(block); block->update_interval = block_date_interval; block->update_fn = block_date_update; } @@ -46,7 +46,7 @@ static void block_date_clean(block_t *block) free(date->block.text); } -static int block_date_validate(block_t *block, const block_scheme_t *scheme) +static int block_date_validate(block_t *block) { block_date_t *date = (block_date_t *)block; int errors = 0; @@ -56,8 +56,7 @@ static int block_date_validate(block_t *block, const block_scheme_t *scheme) errors++; } - date->format = date->block.text; - date->block.text = strcopy("?"); + date->format = strcopy(date->block.text); return errors; } diff --git a/src/blocks/fs.c b/src/blocks/fs.c index 39b669a..688956d 100644 --- a/src/blocks/fs.c +++ b/src/blocks/fs.c @@ -119,10 +119,10 @@ static void block_fs_update(block_t *block) assert(fs->block.text != NULL); } -static void block_fs_init(block_t *block, const block_scheme_t *scheme) +static void block_fs_init(block_t *block) { extern const block_scheme_t block_text_scheme; - block_text_scheme.init_fn(block, scheme); + block_text_scheme.init_fn(block); block->update_interval = block_fs_interval; block->update_fn = block_fs_update; } @@ -135,7 +135,7 @@ static void block_fs_clean(block_t *block) free(fs->block.text); } -static int block_fs_validate(block_t *block, const block_scheme_t *scheme) +static int block_fs_validate(block_t *block) { block_fs_t *fs = (block_fs_t *)block; int errors = 0; diff --git a/src/blocks/group.c b/src/blocks/group.c index d56ed9a..febefe4 100644 --- a/src/blocks/group.c +++ b/src/blocks/group.c @@ -1,6 +1,6 @@ #include "../block.h" -static void block_group_init(block_t *block, const block_scheme_t *scheme) +static void block_group_init(block_t *block) { block->type = BLOCK_GROUP; } diff --git a/src/blocks/ram.c b/src/blocks/ram.c index ed7465f..2aae5ac 100644 --- a/src/blocks/ram.c +++ b/src/blocks/ram.c @@ -128,10 +128,10 @@ static void block_ram_update(block_t *block) assert(ram->block.text != NULL); } -static void block_ram_init(block_t *block, const block_scheme_t *scheme) +static void block_ram_init(block_t *block) { extern const block_scheme_t block_text_scheme; - block_text_scheme.init_fn(block, scheme); + block_text_scheme.init_fn(block); block->update_interval = block_ram_interval; block->update_fn = block_ram_update; } @@ -143,7 +143,7 @@ static void block_ram_clean(block_t *block) free(ram->block.text); } -static int block_ram_validate(block_t *block, const block_scheme_t *scheme) +static int block_ram_validate(block_t *block) { block_ram_t *ram = (block_ram_t *)block; int errors = 0; diff --git a/src/blocks/script.c b/src/blocks/script.c index 51e5328..bcbb1b2 100644 --- a/src/blocks/script.c +++ b/src/blocks/script.c @@ -43,10 +43,10 @@ static void block_script_update(block_t *block) assert(script->block.text != NULL); } -static void block_script_init(block_t *block, const block_scheme_t *scheme) +static void block_script_init(block_t *block) { extern const block_scheme_t block_text_scheme; - block_text_scheme.init_fn(block, scheme); + block_text_scheme.init_fn(block); block->update_interval = block_script_interval; block->update_fn = block_script_update; } @@ -58,7 +58,7 @@ static void block_script_clean(block_t *block) free(script->block.text); } -static int block_script_validate(block_t *block, const block_scheme_t *scheme) +static int block_script_validate(block_t *block) { block_script_t *script = (block_script_t *)block; int errors = 0; diff --git a/src/blocks/slider.c b/src/blocks/slider.c index 228dec2..7050faf 100644 --- a/src/blocks/slider.c +++ b/src/blocks/slider.c @@ -197,7 +197,7 @@ static void block_slider_event(layout_t *layout, event_t event) "i:new_value", slider->value); } -static void block_slider_init(block_t *block, const block_scheme_t *scheme) +static void block_slider_init(block_t *block) { block->type = BLOCK_SPEC; block_slider_t *slider = (block_slider_t *)block; @@ -216,7 +216,7 @@ static void block_slider_clean(block_t *block) gradient_free(&slider->knob_line_color); } -static int block_slider_validate(block_t *block, const block_scheme_t *scheme) +static int block_slider_validate(block_t *block) { block_slider_t *slider = (block_slider_t *)block; int errors = 0; diff --git a/src/blocks/text.c b/src/blocks/text.c index 3eba8f4..be4c398 100644 --- a/src/blocks/text.c +++ b/src/blocks/text.c @@ -2,7 +2,7 @@ #include "../any_log.h" -static void block_text_init(block_t *block, const block_scheme_t *scheme) +static void block_text_init(block_t *block) { block->type = BLOCK_TEXT; } @@ -13,7 +13,7 @@ static void block_text_clean(block_t *block) free(text->text); } -static int block_text_validate(block_t *block, const block_scheme_t *scheme) +static int block_text_validate(block_t *block) { block_text_t *text = (block_text_t *)block; int errors = 0; diff --git a/src/config.c b/src/config.c index 5855109..ce34e55 100644 --- a/src/config.c +++ b/src/config.c @@ -422,10 +422,11 @@ static block_t *config_alloc_block(config_t *config, const block_scheme_t *schem block_t *block = config->blocks[config->n_blocks - 1] = calloc(1, scheme->size); assert(block != NULL); - scheme->init_fn(block, scheme); block->label = label; block->scheme = scheme; + scheme->init_fn(block); + return block; } @@ -603,9 +604,9 @@ int config_validate(config_t *config) if (scheme->validate_fn == NULL) continue; log_debug("Validating 'block.%s'", block->label); - int t = scheme->validate_fn(block, scheme); - errors += t; - block->validated = t == 0; + int tmp = scheme->validate_fn(block); + errors += tmp; + block->validated = tmp == 0; } return errors; diff --git a/src/window.c b/src/window.c index 52530d9..be922a1 100644 --- a/src/window.c +++ b/src/window.c @@ -205,7 +205,9 @@ static void window_reshape(window_t *window) cairo_show_page(cr); cairo_destroy(cr); + cairo_surface_flush(surface); + cairo_surface_finish(surface); cairo_surface_destroy(surface); xcb_shape_mask(window->display->connection, XCB_SHAPE_SO_SET, XCB_SHAPE_SK_BOUNDING, window->window, 0, 0, bitmap); @@ -265,5 +267,6 @@ void window_present(window_t *window, cairo_surface_t *surface) void window_close(window_t *window) { cairo_destroy(window->cr); + cairo_surface_finish(window->surface); cairo_surface_destroy(window->surface); } |
