app: don't process Window state updates before client is ready for events

On Android, a call to update soft keyboard state may result in focus events.
Before this change, the client would still be blocked in FrameEvent.Frame,
resulting in a deadlock.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2022-01-08 16:24:08 +01:00
parent 86330faca6
commit 454e75dd14
+3 -3
View File
@@ -202,7 +202,7 @@ func (w *Window) validateAndProcess(d driver, frameStart time.Time, size image.P
return err return err
} }
} }
w.processFrame(d, frameStart, frame) w.queue.q.Frame(frame)
return nil return nil
} }
} }
@@ -229,8 +229,7 @@ func (w *Window) render(frame *op.Ops, viewport image.Point) error {
return w.ctx.Present() return w.ctx.Present()
} }
func (w *Window) processFrame(d driver, frameStart time.Time, frame *op.Ops) { func (w *Window) processFrame(d driver, frameStart time.Time) {
w.queue.q.Frame(frame)
for k := range w.semantic.ids { for k := range w.semantic.ids {
delete(w.semantic.ids, k) delete(w.semantic.ids, k)
} }
@@ -612,6 +611,7 @@ func (w *Window) processEvent(d driver, e event.Event) {
close(w.out) close(w.out)
break break
} }
w.processFrame(d, frameStart)
w.updateCursor() w.updateCursor()
case *system.CommandEvent: case *system.CommandEvent:
w.out <- e w.out <- e