From c8d1f5b397e32a482af846d6ea3a5f2f0b5c04de Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Wed, 29 Jul 2026 11:43:29 +0200 Subject: [PATCH] :bug: Guard finalize-view-interaction! against spurious pointerup events (#10917) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every pointerup unconditionally fires finish-panning and finish-zooming, which call finalize-view-interaction!. This triggered internal-render (and reset_canvas) on plain clicks — causing a visible white flash on large viewports or weak GPUs. Add a guard so finalize-view-interaction! only runs when a view interaction (pan/zoom) is actually active. Fixes #10915 Co-authored-by: Cursor --- frontend/src/app/render_wasm/api.cljs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/render_wasm/api.cljs b/frontend/src/app/render_wasm/api.cljs index 388c3611d7..f64e6118a1 100644 --- a/frontend/src/app/render_wasm/api.cljs +++ b/frontend/src/app/render_wasm/api.cljs @@ -1347,10 +1347,15 @@ (or (:panning local) (:zooming local)))) (defn finalize-view-interaction! - "Ends the view interaction and triggers a full-quality render." + "Ends an in-progress pan/zoom view interaction and triggers a full-quality + render. No-ops when no view interaction is active. + + `finish-panning` runs on every pointerup, so without this guard we would + call `internal-render` (and WASM `reset_canvas`) on plain clicks." [] - (view-interaction-end!) - (internal-render 0 0)) + (when @view-interaction-active? + (view-interaction-end!) + (internal-render 0 0))) (def render-finish (letfn [(do-render []