diff options
Diffstat (limited to 'src/saffron_widget.c')
| -rw-r--r-- | src/saffron_widget.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/saffron_widget.c b/src/saffron_widget.c index b673e48..955e265 100644 --- a/src/saffron_widget.c +++ b/src/saffron_widget.c @@ -22,6 +22,7 @@ void saffron_widget_init(SaffronWidget* widget) { widget->pixel_perfect = false; widget->type = SAFFRON_WIDGET_UNKNOWN; + widget->free = NULL; } SaffronWidget* saffron_widget_new(void) { @@ -45,6 +46,10 @@ void saffron_widget_free(SaffronWidget *widget) { saffron_widget_free(widget->children[i]); } + if (widget->free) { + widget->free(widget); + } + free(widget->children); free(widget); } @@ -90,7 +95,7 @@ SaffronWidget* saffron_widget_hit_test(SaffronWidget* widget, int x, int y) { for (int i = widget->child_count - 1; i >= 0; i--) { printf("[Saffron] recursing to child (%i)\n", i); SaffronWidget* hit = saffron_widget_hit_test(widget->children[i], x, y); - if (hit) return hit; + if (hit && hit->on_click) return hit; } return widget; |
