From 454e75dd142d7f0bc15087ccf24977c3a1f3e6d9 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Sat, 8 Jan 2022 16:24:08 +0100 Subject: [PATCH] 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 --- app/window.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/window.go b/app/window.go index 2863bce8..f32b4619 100644 --- a/app/window.go +++ b/app/window.go @@ -202,7 +202,7 @@ func (w *Window) validateAndProcess(d driver, frameStart time.Time, size image.P return err } } - w.processFrame(d, frameStart, frame) + w.queue.q.Frame(frame) return nil } } @@ -229,8 +229,7 @@ func (w *Window) render(frame *op.Ops, viewport image.Point) error { return w.ctx.Present() } -func (w *Window) processFrame(d driver, frameStart time.Time, frame *op.Ops) { - w.queue.q.Frame(frame) +func (w *Window) processFrame(d driver, frameStart time.Time) { for k := range w.semantic.ids { delete(w.semantic.ids, k) } @@ -612,6 +611,7 @@ func (w *Window) processEvent(d driver, e event.Event) { close(w.out) break } + w.processFrame(d, frameStart) w.updateCursor() case *system.CommandEvent: w.out <- e