diff options
| -rw-r--r-- | aerc.go | 4 | ||||
| -rw-r--r-- | lib/ui/ui.go | 15 | 
2 files changed, 15 insertions, 4 deletions
@@ -73,7 +73,7 @@ func main() {  					continue  				}  			} else if _, ok := err.(commands.ErrorExit); ok { -				ui.Exit = true +				ui.Exit()  				return nil  			} else if err != nil {  				return err @@ -90,7 +90,7 @@ func main() {  	}  	defer ui.Close() -	for !ui.Exit { +	for !ui.ShouldExit() {  		if !ui.Tick() {  			// ~60 FPS  			time.Sleep(16 * time.Millisecond) diff --git a/lib/ui/ui.go b/lib/ui/ui.go index ced039f..49e4dcd 100644 --- a/lib/ui/ui.go +++ b/lib/ui/ui.go @@ -1,14 +1,16 @@  package ui  import ( +	"sync/atomic" +  	"github.com/gdamore/tcell"  	"git.sr.ht/~sircmpwn/aerc2/config"  )  type UI struct { -	Exit    bool  	Content DrawableInteractive +	exit    atomic.Value  	ctx     *Context  	screen  tcell.Screen @@ -41,8 +43,9 @@ func Initialize(conf *config.AercConfig,  		tcEvents:      make(chan tcell.Event, 10),  		invalidations: make(chan interface{}),  	} +	state.exit.Store(false)  	go (func() { -		for !state.Exit { +		for !state.ShouldExit() {  			state.tcEvents <- screen.PollEvent()  		}  	})() @@ -58,6 +61,14 @@ func Initialize(conf *config.AercConfig,  	return &state, nil  } +func (state *UI) ShouldExit() bool { +	return state.exit.Load().(bool) +} + +func (state *UI) Exit() { +	state.exit.Store(true) +} +  func (state *UI) Close() {  	state.screen.Fini()  }  | 
