From ddb026217ad0565774fe75b9e4c90d66956e2a00 Mon Sep 17 00:00:00 2001 From: Pim van Pelt Date: Sun, 26 Nov 2017 17:14:11 +0100 Subject: [PATCH] Avoid calling widgets without handlers --- src/main.c | 14 +++++++++----- src/screen.c | 2 +- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main.c b/src/main.c index 848872f..ef58918 100644 --- a/src/main.c +++ b/src/main.c @@ -28,14 +28,12 @@ static void touch_handler(struct mgos_stmpe610_event_data *ed) { } if (ed->direction==TOUCH_DOWN) { -// mgos_ili9341_drawCircle(x, y, ed->length, ILI9341_YELLOW); widget_network_recv(); - if (widget) + if (widget && widget->handler) widget->handler(EV_WIDGET_TOUCH_DOWN, widget, NULL); } else { -// mgos_ili9341_drawCircle(x, y, ed->length, ILI9341_BLUE); widget_network_send(); - if (widget) + if (widget && widget->handler) widget->handler(EV_WIDGET_TOUCH_UP, widget, NULL); } } @@ -52,7 +50,11 @@ void tft_demo(void) mgos_ili9341_jpg_image(CENTER, CENTER, 1, "mongoose-os.jpg", NULL, 0); // mgos_ili9341_jpg_image(200, 150, 2, "flower.jpg", NULL, 0); - screen = screen_create_from_file("fs/screen_main.json"); + screen = screen_create_from_file("/screen_main.json"); + if (!screen) { + LOG(LL_ERROR, ("Could not load screen")); + return; + } w = widget_create("name", 0, 0, 198, 20); widget_set_handler(w, widget_name_ev, NULL); screen_widget_add(screen, w); @@ -74,6 +76,8 @@ void tft_demo(void) w = widget_create("topbar", 0, 21, 320, 2); widget_set_handler(w, widget_topbar_ev, NULL); screen_widget_add(screen, w); + + LOG(LL_INFO, ("Screen '%s' has %d widgets", screen->name, screen_get_num_widgets(screen))); } enum mgos_app_init_result mgos_app_init(void) diff --git a/src/screen.c b/src/screen.c index e40a29b..b3ba58a 100644 --- a/src/screen.c +++ b/src/screen.c @@ -136,7 +136,7 @@ struct widget_t *screen_widget_find_by_xy(struct screen_t *s, uint16_t x, uint16 return NULL; SLIST_FOREACH(wl, &s->widget_entries, entries) { - LOG(LL_INFO, ("Inspecing widget '%s' (x=%d,y=%d,w=%d,h=%d)", wl->widget->name, wl->widget->x, wl->widget->y, wl->widget->w, wl->widget->h)); + LOG(LL_DEBUG, ("Inspecing widget '%s' (x=%d,y=%d,w=%d,h=%d)", wl->widget->name, wl->widget->x, wl->widget->y, wl->widget->w, wl->widget->h)); if (wl->widget->x <= x && x < (wl->widget->x+wl->widget->w) && wl->widget->y <= y &&