From 09bf08aa2af58c5627c7e3eea4442dbcac06d377 Mon Sep 17 00:00:00 2001 From: Jinjing <6427696+AmethystLiang@users.noreply.github.com> Date: Sun, 28 Jun 2026 14:55:41 -0700 Subject: [PATCH] Prevent duplicate terminal wake recovery on overlapping window events When window focus and visibility events fire concurrently, they can trigger multiple redundant wake recovery passes. - Return early if a wake recovery frame is already scheduled. - Keep the scheduled animation frame instead of canceling it to ensure we get a settled recovery pass. --- .../terminal-pane/use-terminal-window-wake-recovery.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/renderer/src/components/terminal-pane/use-terminal-window-wake-recovery.ts b/src/renderer/src/components/terminal-pane/use-terminal-window-wake-recovery.ts index 46b0099369c..8d07259f7ae 100644 --- a/src/renderer/src/components/terminal-pane/use-terminal-window-wake-recovery.ts +++ b/src/renderer/src/components/terminal-pane/use-terminal-window-wake-recovery.ts @@ -29,6 +29,10 @@ export function useTerminalWindowWakeRecovery({ wakeRecoveryFrameId = null } const recoverVisibleWake = (): void => { + // Focus and visibility often fire together; keep one immediate recovery and one settled RAF pass. + if (wakeRecoveryFrameId !== null) { + return + } const manager = managerRef.current if (!manager) { return @@ -37,7 +41,6 @@ export function useTerminalWindowWakeRecovery({ manager, isActive: isActiveRef.current }) - cancelScheduledWakeRecovery() if (typeof requestAnimationFrame !== 'function') { return }