From cda842da5310ab92f326593343d2ca1ed353804a Mon Sep 17 00:00:00 2001 From: Pim van Pelt Date: Sat, 2 Dec 2017 14:23:14 +0100 Subject: [PATCH] Implement EV_WIDGET_DRAW and call screen_widget_broadcast() on screen loads --- src/main.c | 1 + src/widget_battery.c | 1 + src/widget_default.c | 12 +++++------- src/widget_name.c | 1 + src/widget_network.c | 1 + src/widget_time.c | 1 + src/widget_topbar.c | 1 + src/widget_wifi.c | 1 + 8 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main.c b/src/main.c index f04d36b..ec8920e 100644 --- a/src/main.c +++ b/src/main.c @@ -60,6 +60,7 @@ void tft_demo(void) return; } screen_add_default_widgets(s_screen); + screen_widget_broadcast(s_screen, EV_WIDGET_DRAW, NULL); LOG(LL_INFO, ("Screen '%s' has %d widgets", s_screen->name, screen_get_num_widgets(s_screen))); } diff --git a/src/widget_battery.c b/src/widget_battery.c index bd6298d..cc9bec0 100644 --- a/src/widget_battery.c +++ b/src/widget_battery.c @@ -65,6 +65,7 @@ void widget_battery_ev(int ev, struct widget_t *w, void *ev_data) { LOG(LL_INFO, ("Monitoring LiPo voltage on gpio=%d", WIDGET_BATTERY_ADC_PIN)); mgos_adc_enable(WIDGET_BATTERY_ADC_PIN); mgos_prometheus_metrics_add_handler(prometheus_battery_metrics_fn, NULL); + break; case EV_WIDGET_DRAW: case EV_WIDGET_REDRAW: case EV_WIDGET_TIMER: diff --git a/src/widget_default.c b/src/widget_default.c index 6b66273..c2da05a 100644 --- a/src/widget_default.c +++ b/src/widget_default.c @@ -78,7 +78,6 @@ void screen_add_default_widgets(struct screen_t *screen) { static void widget_default_loadscreen(struct widget_t *w, void *ev_data) { struct screen_t *new_screen; - char *new_screen_filename; if (!w) return; @@ -87,20 +86,18 @@ static void widget_default_loadscreen(struct widget_t *w, void *ev_data) { return; } - // screen_destroy will destroy our widget *w, so take what we need to continue - new_screen_filename=strdup(w->user_data); - screen_destroy(&s_screen); - - new_screen = screen_create_from_file(new_screen_filename, widget_default_ev, NULL); - free(new_screen_filename); + new_screen = screen_create_from_file(w->user_data, widget_default_ev, NULL); if (!new_screen) { LOG(LL_ERROR, ("Could not load screen")); return; } screen_add_default_widgets(new_screen); + LOG(LL_INFO, ("Navigating to new screen '%s' which has %d widgets", new_screen->name, screen_get_num_widgets(new_screen))); + screen_destroy(&s_screen); s_screen = new_screen; + screen_widget_broadcast(s_screen, EV_WIDGET_DRAW, NULL); (void) ev_data; } @@ -116,6 +113,7 @@ void widget_default_ev(int ev, struct widget_t *w, void *ev_data) { switch(ev) { case EV_WIDGET_CREATE: + break; case EV_WIDGET_DRAW: case EV_WIDGET_REDRAW: case EV_WIDGET_TIMER: diff --git a/src/widget_name.c b/src/widget_name.c index beee90b..1cf5954 100644 --- a/src/widget_name.c +++ b/src/widget_name.c @@ -74,6 +74,7 @@ void widget_name_ev(int ev, struct widget_t *w, void *ev_data) { switch(ev) { case EV_WIDGET_CREATE: + break; case EV_WIDGET_DRAW: case EV_WIDGET_REDRAW: case EV_WIDGET_TIMER: diff --git a/src/widget_network.c b/src/widget_network.c index 29a1905..e383e1f 100644 --- a/src/widget_network.c +++ b/src/widget_network.c @@ -58,6 +58,7 @@ void widget_network_ev(int ev, struct widget_t *w, void *ev_data) { switch(ev) { case EV_WIDGET_CREATE: widget_network=w; + break; case EV_WIDGET_DRAW: case EV_WIDGET_REDRAW: widget_network_render(w, ev_data); diff --git a/src/widget_time.c b/src/widget_time.c index db10ef1..33e16f1 100644 --- a/src/widget_time.c +++ b/src/widget_time.c @@ -32,6 +32,7 @@ void widget_time_ev(int ev, struct widget_t *w, void *ev_data) { switch(ev) { case EV_WIDGET_CREATE: + break; case EV_WIDGET_DRAW: case EV_WIDGET_REDRAW: case EV_WIDGET_TIMER: diff --git a/src/widget_topbar.c b/src/widget_topbar.c index bcf29e5..f10f5e1 100644 --- a/src/widget_topbar.c +++ b/src/widget_topbar.c @@ -18,6 +18,7 @@ void widget_topbar_ev(int ev, struct widget_t *w, void *ev_data) { switch(ev) { case EV_WIDGET_CREATE: + break; case EV_WIDGET_DRAW: case EV_WIDGET_REDRAW: case EV_WIDGET_TIMER: diff --git a/src/widget_wifi.c b/src/widget_wifi.c index 150bba3..268c15c 100644 --- a/src/widget_wifi.c +++ b/src/widget_wifi.c @@ -58,6 +58,7 @@ void widget_wifi_ev(int ev, struct widget_t *w, void *ev_data) { switch(ev) { case EV_WIDGET_CREATE: + break; case EV_WIDGET_DRAW: case EV_WIDGET_REDRAW: case EV_WIDGET_TIMER: