aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/block.h9
-rw-r--r--src/blocks/date.c9
-rw-r--r--src/blocks/fs.c6
-rw-r--r--src/blocks/group.c2
-rw-r--r--src/blocks/ram.c6
-rw-r--r--src/blocks/script.c6
-rw-r--r--src/blocks/slider.c4
-rw-r--r--src/blocks/text.c4
-rw-r--r--src/config.c9
-rw-r--r--src/window.c3
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);
}