diff --git a/apps/gui/list.c b/apps/gui/list.c index d974470a26..6a8d5ef4d3 100644 --- a/apps/gui/list.c +++ b/apps/gui/list.c @@ -18,7 +18,6 @@ * KIND, either express or implied. * ****************************************************************************/ - #include #include #include "config.h" @@ -659,6 +658,26 @@ bool gui_synclist_do_button(struct gui_synclist * lists, int *actionptr) gui_synclist_draw(lists); return true; +#ifdef SIMULATOR /* BUGFIX sim doesn't scroll lists from other threads */ + case ACTION_NONE: + { + extern struct scroll_screen_info lcd_scroll_info; + struct scroll_screen_info *si = &lcd_scroll_info; + + for (int index = 0; index < si->lines; index++) + { + struct scrollinfo *s = &si->scroll[index]; + if (s->vp && (s->vp->flags & VP_FLAG_VP_DIRTY)) + { + s->vp->flags &= ~VP_FLAG_VP_SET_CLEAN; + lcd_update_viewport_rect(s->x, s->y, s->width, s->height); + } + } + + break; + } +#endif + #ifdef HAVE_VOLUME_IN_LIST case ACTION_LIST_VOLUP: adjust_volume(1); diff --git a/firmware/drivers/lcd-scroll.c b/firmware/drivers/lcd-scroll.c index 2a58d6ff21..7c5492e983 100644 --- a/firmware/drivers/lcd-scroll.c +++ b/firmware/drivers/lcd-scroll.c @@ -224,8 +224,11 @@ static void LCDFN(scroll_worker)(void) /* put the line onto the display now */ makedelay = LCDFN(scroll_now(s)); +#ifdef SIMULATOR /* Bugfix sim won't update screen unless called from active thread */ + LCDFN(set_viewport)(oldvp); +#else LCDFN(set_viewport_ex)(oldvp, 0); /* don't mark the last vp as dirty */ - +#endif if (makedelay) s->start_tick += si->delay + si->ticks; }