apps,ui/app: delete ui/app.Window.Ack

Replace it with a dummy event send on the synchronous event channel;
a bit of cleverness for a simpler API.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2019-04-02 18:51:43 +02:00
parent abb9d291e9
commit e7725a4fa1
3 changed files with 18 additions and 29 deletions
-1
View File
@@ -200,7 +200,6 @@ func (a *App) run() error {
a.pqueue.Frame(root) a.pqueue.Frame(root)
a.faces.Frame() a.faces.Frame()
} }
a.w.Ack()
} }
} }
return a.w.Err() return a.w.Err()
-1
View File
@@ -52,7 +52,6 @@ func init() {
w.Draw(root) w.Draw(root)
faces.Frame() faces.Frame()
} }
w.Ack()
} }
if w.Err() != nil { if w.Err() != nil {
log.Fatal(err) log.Fatal(err)
+18 -27
View File
@@ -32,7 +32,6 @@ type Window struct {
err error err error
events chan Event events chan Event
acks chan struct{}
mu sync.Mutex mu sync.Mutex
stage Stage stage Stage
@@ -55,11 +54,12 @@ var _ interface {
setTextInput(s key.TextInputState) setTextInput(s key.TextInputState)
} = (*window)(nil) } = (*window)(nil)
var ackEvent Event
func newWindow(nw *window) *Window { func newWindow(nw *window) *Window {
w := &Window{ w := &Window{
driver: nw, driver: nw,
events: make(chan Event), events: make(chan Event),
acks: make(chan struct{}),
stage: StageInvisible, stage: StageInvisible,
} }
return w return w
@@ -69,30 +69,6 @@ func (w *Window) Events() <-chan Event {
return w.events return w.events
} }
func (w *Window) Ack() {
w.mu.Lock()
st := w.stage
needAck := w.skipAcks == 0
if !needAck {
w.skipAcks--
}
sync := w.syncGPU
w.syncGPU = false
w.mu.Unlock()
if w.gpu != nil {
switch {
case st < StageVisible:
w.gpu.Release()
w.gpu = nil
case sync:
w.gpu.Refresh()
}
}
if needAck {
w.acks <- struct{}{}
}
}
func (w *Window) Timings() string { func (w *Window) Timings() string {
return w.timings return w.timings
} }
@@ -258,7 +234,22 @@ func (w *Window) event(e Event) {
w.updateAnimation() w.updateAnimation()
w.events <- e w.events <- e
if needAck { if needAck {
<-w.acks // Send a dummy event; when it gets through we
// know the application has processed the actual event.
w.events <- ackEvent
}
if w.gpu != nil {
w.mu.Lock()
sync := w.syncGPU
w.syncGPU = false
w.mu.Unlock()
switch {
case stage < StageVisible:
w.gpu.Release()
w.gpu = nil
case sync:
w.gpu.Refresh()
}
} }
if stage == StageDead { if stage == StageDead {
close(w.events) close(w.events)