From f7a62fce4890d9990a5761e6c6667b2c7eb55a92 Mon Sep 17 00:00:00 2001 From: Pim van Pelt Date: Sat, 2 Dec 2017 14:18:54 +0100 Subject: [PATCH] Add screen_widget_broadcast() --- include/screen.h | 4 ++++ src/screen.c | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/include/screen.h b/include/screen.h index 20fcba6..7c47a9e 100644 --- a/include/screen.h +++ b/include/screen.h @@ -27,6 +27,10 @@ struct widget_t *screen_widget_add_from_file(struct screen_t *s, char *fn); bool screen_widget_destroy(struct screen_t *s, struct widget_t **w); uint16_t screen_get_num_widgets(struct screen_t *s); + struct widget_t *screen_widget_find_by_xy(struct screen_t *s, uint16_t x, uint16_t y); +void screen_widget_broadcast(struct screen_t *s, int ev, void *ev_data); + + #endif //__SCREEN_H diff --git a/src/screen.c b/src/screen.c index 62e51ab..45cc7d9 100644 --- a/src/screen.c +++ b/src/screen.c @@ -155,6 +155,19 @@ struct widget_t *screen_widget_find_by_xy(struct screen_t *s, uint16_t x, uint16 return NULL; } +void screen_widget_broadcast(struct screen_t *s, int ev, void *ev_data) { + struct widget_list_t *wl; + + if (!s) + return NULL; + + SLIST_FOREACH(wl, &s->widget_entries, entries) { + if (wl->widget->handler) + wl->widget->handler(ev, wl->widget, ev_data); + } + return NULL; +} + void screen_widget_set_handler(struct screen_t *s, widget_event_fn handler) { if (!s) return;