diff --git a/standard_renderer.go b/standard_renderer.go index a929be9df0..4e754033d6 100644 --- a/standard_renderer.go +++ b/standard_renderer.go @@ -230,9 +230,7 @@ func (r *standardRenderer) write(s string) { } func (r *standardRenderer) repaint() { - r.mtx.Lock() r.lastRender = "" - r.mtx.Unlock() } func (r *standardRenderer) altScreen() bool { @@ -350,7 +348,9 @@ func (r *standardRenderer) handleMessages(msg Msg) { case repaintMsg: // Force a repaint by clearing the render cache as we slide into a // render. + r.mtx.Lock() r.repaint() + r.mtx.Unlock() case WindowSizeMsg: r.mtx.Lock() @@ -363,7 +363,9 @@ func (r *standardRenderer) handleMessages(msg Msg) { // Force a repaint on the area where the scrollable stuff was in this // update cycle + r.mtx.Lock() r.repaint() + r.mtx.Unlock() case syncScrollAreaMsg: // Re-render scrolling area @@ -372,7 +374,9 @@ func (r *standardRenderer) handleMessages(msg Msg) { r.insertTop(msg.lines, msg.topBoundary, msg.bottomBoundary) // Force non-scrolling stuff to repaint in this update cycle + r.mtx.Lock() r.repaint() + r.mtx.Unlock() case scrollUpMsg: r.insertTop(msg.lines, msg.topBoundary, msg.bottomBoundary) diff --git a/tea.go b/tea.go index 093e5f80ba..73be9bdc2b 100644 --- a/tea.go +++ b/tea.go @@ -503,7 +503,9 @@ func (p *Program) StartReturningModel() (Model, error) { continue case WindowSizeMsg: + p.mtx.Lock() p.renderer.repaint() + p.mtx.Unlock() case enterAltScreenMsg: p.EnterAltScreen()