diff --git a/aerc.go b/aerc.go index 37d9509..e1a1345 100644 --- a/aerc.go +++ b/aerc.go @@ -241,12 +241,12 @@ func main() { setWindowTitle() } - go ui.Run() + go ui.ProcessEvents() for !ui.ShouldExit() { for aerc.Tick() { // Continue updating our internal state } - if !ui.Tick() { + if !ui.Render() { // ~60 FPS time.Sleep(16 * time.Millisecond) } diff --git a/lib/ui/ui.go b/lib/ui/ui.go index 7cff575..a4128a5 100644 --- a/lib/ui/ui.go +++ b/lib/ui/ui.go @@ -13,9 +13,7 @@ type UI struct { ctx *Context screen tcell.Screen popover *Popover - - tcEvents chan tcell.Event - invalid int32 // access via atomic + invalid int32 // access via atomic } func Initialize(content DrawableInteractive) (*UI, error) { @@ -36,19 +34,10 @@ func Initialize(content DrawableInteractive) (*UI, error) { state := UI{ Content: content, screen: screen, - - tcEvents: make(chan tcell.Event, 10), } state.ctx = NewContext(width, height, screen, state.onPopover) state.exit.Store(false) - go func() { - defer logging.PanicHandler() - - for !state.ShouldExit() { - state.tcEvents <- screen.PollEvent() - } - }() state.invalid = 1 content.OnInvalidate(func(_ Drawable) { @@ -82,7 +71,7 @@ func (state *UI) Close() { state.screen.Fini() } -func (state *UI) Tick() bool { +func (state *UI) Render() bool { more := false wasInvalid := atomic.SwapInt32(&state.invalid, 0) @@ -110,8 +99,11 @@ func (state *UI) EnableMouse() { state.screen.EnableMouse() } -func (state *UI) Run() { - for event := range state.tcEvents { +func (state *UI) ProcessEvents() { + defer logging.PanicHandler() + + for !state.ShouldExit() { + event := state.screen.PollEvent() if event, ok := event.(*tcell.EventResize); ok { state.screen.Clear() width, height := event.Size() diff --git a/widgets/aerc.go b/widgets/aerc.go index f0bc1ba..cbc3779 100644 --- a/widgets/aerc.go +++ b/widgets/aerc.go @@ -743,18 +743,13 @@ func (aerc *Aerc) DecryptKeys(keys []openpgp.Key, symmetric bool) (b []byte, err fmt.Sprintf("Enter password for %s (%8X)\nPress to cancel", ident.Name, key.PublicKey.KeyId)) - for { - select { - case err = <-chErr: - if err != nil { - return nil, err - } - pass := <-chPass - err = key.PrivateKey.Decrypt([]byte(pass)) + for err := range chErr { + if err != nil { return nil, err - default: - aerc.ui.Tick() } + pass := <-chPass + err = key.PrivateKey.Decrypt([]byte(pass)) + return nil, err } } return nil, err