From 64dd35ecf4e0b65bdf4927732778f69407afcf06 Mon Sep 17 00:00:00 2001 From: Neil <4138956+nwparker@users.noreply.github.com> Date: Fri, 29 May 2026 21:48:08 -0700 Subject: [PATCH] fix: cancel worktree palette focus frames (#3459) --- .../src/components/WorktreeJumpPalette.tsx | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/renderer/src/components/WorktreeJumpPalette.tsx b/src/renderer/src/components/WorktreeJumpPalette.tsx index 0a1de13d701..e2c1a143791 100644 --- a/src/renderer/src/components/WorktreeJumpPalette.tsx +++ b/src/renderer/src/components/WorktreeJumpPalette.tsx @@ -257,6 +257,8 @@ export default function WorktreeJumpPalette(): React.JSX.Element | null { const wasVisibleRef = useRef(false) const skipRestoreFocusRef = useRef(false) const listRef = useRef(null) + const fallbackFocusOuterFrameRef = useRef(null) + const fallbackFocusInnerFrameRef = useRef(null) const createLookupGuard = useMemo(() => createWorktreePaletteRequestGuard(), []) const preserveCreateLookupOnCloseRef = useRef(false) @@ -727,9 +729,25 @@ export default function WorktreeJumpPalette(): React.JSX.Element | null { listRef.current?.scrollTo(0, 0) }, []) + const cancelFallbackFocusFrames = useCallback((): void => { + if (fallbackFocusOuterFrameRef.current !== null) { + cancelAnimationFrame(fallbackFocusOuterFrameRef.current) + fallbackFocusOuterFrameRef.current = null + } + if (fallbackFocusInnerFrameRef.current !== null) { + cancelAnimationFrame(fallbackFocusInnerFrameRef.current) + fallbackFocusInnerFrameRef.current = null + } + }, []) + + useEffect(() => cancelFallbackFocusFrames, [cancelFallbackFocusFrames]) + const focusFallbackSurface = useCallback(() => { - requestAnimationFrame(() => { - requestAnimationFrame(() => { + cancelFallbackFocusFrames() + fallbackFocusOuterFrameRef.current = requestAnimationFrame(() => { + fallbackFocusOuterFrameRef.current = null + fallbackFocusInnerFrameRef.current = requestAnimationFrame(() => { + fallbackFocusInnerFrameRef.current = null const xterm = document.querySelector('.xterm-helper-textarea') as HTMLElement | null if (xterm) { xterm.focus() @@ -741,7 +759,7 @@ export default function WorktreeJumpPalette(): React.JSX.Element | null { } }) }) - }, []) + }, [cancelFallbackFocusFrames]) const requestBrowserFocus = useCallback( (detail: { pageId: string; target: 'webview' | 'address-bar' }) => {