From bb654fca62a32ee95d34bfec628dddd4871d3862 Mon Sep 17 00:00:00 2001 From: ciregenz Date: Tue, 9 Jun 2026 14:48:55 -0700 Subject: [PATCH] [eric] frontend: re-evaluate webview suspension on window resize, a shrunken window never suspended --- .../hooks/interaction/useWebviewSuspend.ts | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/pages/Dashboard/hooks/interaction/useWebviewSuspend.ts b/frontend/src/app/pages/Dashboard/hooks/interaction/useWebviewSuspend.ts index b4bbce97..b169f601 100644 --- a/frontend/src/app/pages/Dashboard/hooks/interaction/useWebviewSuspend.ts +++ b/frontend/src/app/pages/Dashboard/hooks/interaction/useWebviewSuspend.ts @@ -1,4 +1,4 @@ -import { useEffect, useRef } from 'react'; +import { useEffect, useRef, useState } from 'react'; import { useAppDispatch, useAppSelector } from '@/shared/hooks'; import { store } from '@/shared/state/store'; import { @@ -68,6 +68,23 @@ export function useWebviewSuspend( const suspended = useAppSelector((s) => s.dashboardLayout.suspendedBrowserCards); const vpRef = useRef({ panX, panY, zoom, vpW: 1200, vpH: 800 }); + // Window resize changes the viewport without touching pan/zoom/cards; tick so + // the evaluation below reruns, or a shrunken window never suspends anything. + const [resizeTick, setResizeTick] = useState(0); + useEffect(() => { + if (!isElectron) return; + let t: ReturnType | null = null; + const onResize = () => { + if (t) clearTimeout(t); + t = setTimeout(() => setResizeTick((n) => n + 1), 300); + }; + window.addEventListener('resize', onResize); + return () => { + window.removeEventListener('resize', onResize); + if (t) clearTimeout(t); + }; + }, []); + useEffect(() => { if (!isElectron) return; const el = viewportRef.current; @@ -111,5 +128,5 @@ export function useWebviewSuspend( }, SETTLE_MS); return () => clearTimeout(timer); - }, [browserCards, suspended, panX, panY, zoom, viewportRef, dispatch]); + }, [browserCards, suspended, panX, panY, zoom, viewportRef, dispatch, resizeTick]); }