From 1d8910e9be1811996794cedb71996a9d2dc25fbc Mon Sep 17 00:00:00 2001 From: Federico Angelilli Date: Sat, 16 Nov 2024 00:38:18 +0100 Subject: Change event_fn --- src/block.c | 6 +++--- src/block.h | 12 +++++++----- src/event.c | 5 ++++- 3 files changed, 14 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/block.c b/src/block.c index c844e9b..11b725e 100644 --- a/src/block.c +++ b/src/block.c @@ -48,9 +48,9 @@ void block_update(block_t *block) void block_free(block_t *block) { + if (block->scheme->clean_fn != NULL) + block->scheme->clean_fn(block); + free(block->label); - assert(block->scheme != NULL); - assert(block->scheme->clean_fn != NULL); - block->scheme->clean_fn(block); free(block); } diff --git a/src/block.h b/src/block.h index 71db95e..09ef3fc 100644 --- a/src/block.h +++ b/src/block.h @@ -30,6 +30,10 @@ typedef struct block block_t; typedef struct block_scheme block_scheme_t; +// Regularly called depending on the inverval passed from the last update +// +typedef void (*block_update_t)(block_t *block); + // Called in layout_init // typedef void (*block_layout_t)(block_t *block, layout_t *layout, layout_info_t info); @@ -42,10 +46,6 @@ typedef void (*block_render_t)(layout_t *layout, cairo_t *cr); // typedef void (*block_event_t)(block_t *block, event_t event); -// Regularly called depending on the inverval passed from the last update -// -typedef void (*block_update_t)(block_t *block); - // The block struct // struct block { @@ -58,7 +58,6 @@ struct block { struct timespec update_interval; struct timespec update_last; block_update_t update_fn; - block_event_t event_fn; // TODO //gradient_t bg_color; //gradient_t line_color; @@ -85,10 +84,13 @@ typedef struct { bool collapse; } block_group_t; +// NOTE: I am not sure this is required anymore since we can just put +// special function in the scheme typedef struct { block_t block; block_layout_t layout_fn; block_render_t render_fn; + block_event_t event_fn; } block_spec_t; // Called to allocate a block with its default state diff --git a/src/event.c b/src/event.c index 39e408a..3783029 100644 --- a/src/event.c +++ b/src/event.c @@ -32,7 +32,10 @@ static bool event_click(layout_t *layout, event_t event) return true; } - block_event_t event_fn = layout->block->event_fn; + block_event_t event_fn = layout->block->type == BLOCK_SPEC + ? ((block_spec_t *)layout->block)->event_fn + : NULL; + log_value_debug("Block was clicked", "s:type", even_type_to_string(event.type), "i:x", event.x, -- cgit v1.2.3