app: [Android] don't block the main thread in Window.Do

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2020-07-24 19:17:29 +02:00
parent e381ff40d6
commit 4a9d97784f
2 changed files with 26 additions and 17 deletions
+12 -12
View File
@@ -193,17 +193,17 @@ func (w *Window) Invalidate() {
}
// ReadClipboard initiates a read of the clipboard in the form
// of a system.ClipboardEvent. Multiple reads may be coalescedd
// of a system.ClipboardEvent. Multiple reads may be coalesced
// to a single event.
func (w *Window) ReadClipboard() {
w.driverDo(func() {
go w.driverDo(func() {
w.driver.ReadClipboard()
})
}
// WriteClipboard writes a string to the clipboard.
func (w *Window) WriteClipboard(s string) {
w.driverDo(func() {
go w.driverDo(func() {
w.driver.WriteClipboard(s)
})
}
@@ -214,20 +214,20 @@ func (w *Window) WriteClipboard(s string) {
// Currently, only macOS, Windows and X11 drivers implement this functionality,
// all others are stubbed.
func (w *Window) Close() {
w.driverDo(func() {
go w.driverDo(func() {
w.driver.Close()
})
}
// driverDo calls f as soon as the window has a valid driver attached,
// or does nothing if the window is destroyed while waiting.
func (w *Window) driverDo(f func()) {
go func() {
select {
case w.driverFuncs <- f:
case <-w.dead:
}
}()
// or return false if the window was destroyed while waiting.
func (w *Window) driverDo(f func()) bool {
select {
case w.driverFuncs <- f:
return true
case <-w.dead:
return false
}
}
func (w *Window) updateAnimation() {