diff options
author | Tim Culverhouse <tim@timculverhouse.com> | 2022-10-17 15:16:10 -0500 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2022-10-18 22:20:44 +0200 |
commit | 7016c6f86ae09b3e49eab665aa013628db4ee102 (patch) | |
tree | 3ffe1eebd8fea0e043ffcdbf3376a24aa51a2acc /lib/ui | |
parent | 556f346f96946a54223798685c445ec413a4031e (diff) | |
download | aerc-7016c6f86ae09b3e49eab665aa013628db4ee102.tar.gz |
aercmsg: add AercFuncMsg and QueueFunc
Introduce AercFuncMsg and QueueFunc. These are used in combination to
queue a function to be run in the main goroutine. This can be used to
prevent data races in delayed function calls (ie from debounce
functions).
Signed-off-by: Tim Culverhouse <tim@timculverhouse.com>
Acked-by: Robin Jarry <robin@jarry.cc>
Diffstat (limited to 'lib/ui')
-rw-r--r-- | lib/ui/ui.go | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/lib/ui/ui.go b/lib/ui/ui.go index 313f90d8..ea181d33 100644 --- a/lib/ui/ui.go +++ b/lib/ui/ui.go @@ -13,12 +13,22 @@ const ( var MsgChannel = make(chan AercMsg, 50) +type AercFuncMsg struct { + Func func() +} + // QueueRedraw sends a nil message into the MsgChannel. Nothing will handle this // message, but a redraw will occur if the UI is marked as invalid func QueueRedraw() { MsgChannel <- nil } +// QueueFunc queues a function to be called in the main goroutine. This can be +// used to prevent race conditions from delayed functions +func QueueFunc(fn func()) { + MsgChannel <- &AercFuncMsg{Func: fn} +} + // dirty is the dirty state of the UI. Any value other than 0 means the UI is in // a dirty state. Dirty should only be accessed via atomic operations to // maintain thread safety |