diff options
author | Robin Jarry <robin@jarry.cc> | 2022-09-14 21:09:02 +0200 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2022-09-14 22:11:33 +0200 |
commit | ee7937d0dd9201fdb78f363ddc8af950d0778f1b (patch) | |
tree | 33d827476be133aad84086b3d56b8b5ee0dbefd8 /lib/ui/ui.go | |
parent | d93ad24f5f8f1f9204b5951abcb4691c9fd0b80f (diff) | |
download | aerc-ee7937d0dd9201fdb78f363ddc8af950d0778f1b.tar.gz |
ui: cleanup internals and api
Now that tcell events are handled in a goroutine, no need for a channel
to buffer them.
Rename ui.Tick() to ui.Render() and ui.Run() to ui.ProcessEvents() to
better reflect what these functions do.
Move screen.PollEvent() into ui.ProcessEvents(). Register the panic
handler in ui.ProcessEvents().
Remove aerc.ui.Tick() from DecryptKeys(). What the hell was that?
Signed-off-by: Robin Jarry <robin@jarry.cc>
Tested-by: Tim Culverhouse <tim@timculverhouse.com>
Diffstat (limited to 'lib/ui/ui.go')
-rw-r--r-- | lib/ui/ui.go | 22 |
1 files changed, 7 insertions, 15 deletions
diff --git a/lib/ui/ui.go b/lib/ui/ui.go index 7cff5754..a4128a5c 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() |