diff --git a/src/renderer/src/components/terminal-pane/use-terminal-window-wake-recovery.test.ts b/src/renderer/src/components/terminal-pane/use-terminal-window-wake-recovery.test.ts index f7dce9897d2..81ec30fc916 100644 --- a/src/renderer/src/components/terminal-pane/use-terminal-window-wake-recovery.test.ts +++ b/src/renderer/src/components/terminal-pane/use-terminal-window-wake-recovery.test.ts @@ -229,4 +229,26 @@ describe('useTerminalWindowWakeRecovery', () => { window.dispatchEvent(new Event('resize')) expect(repairPaneWebglCanvasDprMismatchMock).toHaveBeenCalledTimes(1) }) + + it('retains a dpr transition until the visible manager is available', () => { + const pane = { id: 1, terminal: {} } + const managerRef: { current: PaneManager | null } = { current: null } + vi.stubGlobal('devicePixelRatio', 1) + renderHook(() => + useTerminalWindowWakeRecovery({ + isVisible: true, + managerRef, + isActiveRef: { current: true }, + isVisibleRef: { current: true } + }) + ) + + vi.stubGlobal('devicePixelRatio', 2) + window.dispatchEvent(new Event('resize')) + expect(repairPaneWebglCanvasDprMismatchMock).not.toHaveBeenCalled() + + managerRef.current = { getPanes: () => [pane] } as unknown as PaneManager + window.dispatchEvent(new Event('resize')) + expect(repairPaneWebglCanvasDprMismatchMock).toHaveBeenCalledWith(pane) + }) }) 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 064b651326e..c5e578549df 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 @@ -122,11 +122,11 @@ export function useTerminalWindowWakeRecovery({ if (devicePixelRatio === observedDevicePixelRatio) { return } - observedDevicePixelRatio = devicePixelRatio const manager = managerRef.current if (!manager || !isVisibleRef.current) { return } + observedDevicePixelRatio = devicePixelRatio for (const pane of manager.getPanes?.() ?? []) { if (repairPaneWebglCanvasDprMismatch(pane)) { presentPaneViewport(pane)