Skip to content

Commit df08e60

Browse files
fix(code): keep runtime zoom state in memory
Generated-By: PostHog Code Task-Id: ec0186a8-c8b7-4b07-b526-5d58095df15c
1 parent 1d4c928 commit df08e60

2 files changed

Lines changed: 33 additions & 3 deletions

File tree

apps/code/src/main/zoom.test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,27 @@ describe("window zoom", () => {
161161
});
162162
});
163163

164+
it("uses the in-memory zoom level when persistence fails", () => {
165+
const window = createWindow();
166+
setupWindowZoom(window);
167+
store.save.mockImplementation(() => {});
168+
169+
window.webContents.emit("zoom-changed", { preventDefault: vi.fn() }, "in");
170+
vi.runAllTimers();
171+
window.webContents.emit("zoom-changed", { preventDefault: vi.fn() }, "in");
172+
vi.runAllTimers();
173+
174+
expect({
175+
persistedZoomLevel: store.state.zoomLevel,
176+
zoomLevel: window.webContents.zoomLevel,
177+
saved: store.save.mock.calls,
178+
}).toEqual({
179+
persistedZoomLevel: 0.5,
180+
zoomLevel: 1.5,
181+
saved: [[1], [1.5]],
182+
});
183+
});
184+
164185
it("clamps invalid persisted levels before restoring", () => {
165186
store.get.mockReturnValue(10);
166187
const window = createWindow();

apps/code/src/main/zoom.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ interface ZoomWindow {
3131
}
3232

3333
interface ZoomState {
34+
currentZoomLevel: number;
3435
deferredActions: Array<() => void>;
3536
wheelZoomDelta: number;
3637
wheelZoomTimeout: ReturnType<typeof setTimeout> | null;
@@ -46,6 +47,10 @@ function getSavedZoomLevel(): number {
4647
return clampZoomLevel(windowStateStore.get("zoomLevel", 0));
4748
}
4849

50+
function getCurrentZoomLevel(window: ZoomWindow): number {
51+
return zoomStates.get(window)?.currentZoomLevel ?? getSavedZoomLevel();
52+
}
53+
4954
function runAfterWheelZoom(window: ZoomWindow, action: () => void): void {
5055
const state = zoomStates.get(window);
5156
if (!state?.wheelZoomTimeout) {
@@ -58,6 +63,8 @@ function runAfterWheelZoom(window: ZoomWindow, action: () => void): void {
5863

5964
export function setWindowZoom(window: ZoomWindow, level: number): void {
6065
const nextLevel = clampZoomLevel(level);
66+
const state = zoomStates.get(window);
67+
if (state) state.currentZoomLevel = nextLevel;
6168
window.webContents.setZoomLevel(nextLevel);
6269
saveZoomLevel(nextLevel);
6370
}
@@ -67,19 +74,21 @@ export function adjustWindowZoom(
6774
delta: number | "reset",
6875
): void {
6976
runAfterWheelZoom(window, () => {
70-
const nextLevel = delta === "reset" ? 0 : getSavedZoomLevel() + delta;
77+
const nextLevel =
78+
delta === "reset" ? 0 : getCurrentZoomLevel(window) + delta;
7179
setWindowZoom(window, nextLevel);
7280
});
7381
}
7482

7583
export function restoreWindowZoom(window: ZoomWindow): void {
7684
runAfterWheelZoom(window, () => {
77-
window.webContents.setZoomLevel(getSavedZoomLevel());
85+
window.webContents.setZoomLevel(getCurrentZoomLevel(window));
7886
});
7987
}
8088

8189
export function setupWindowZoom(window: ZoomWindow): void {
8290
const state: ZoomState = {
91+
currentZoomLevel: getSavedZoomLevel(),
8392
deferredActions: [],
8493
wheelZoomDelta: 0,
8594
wheelZoomTimeout: null,
@@ -100,7 +109,7 @@ export function setupWindowZoom(window: ZoomWindow): void {
100109
event.preventDefault();
101110
state.wheelZoomDelta += zoomDirection === "in" ? ZOOM_STEP : -ZOOM_STEP;
102111
state.wheelZoomTimeout ??= setTimeout(() => {
103-
const nextLevel = getSavedZoomLevel() + state.wheelZoomDelta;
112+
const nextLevel = state.currentZoomLevel + state.wheelZoomDelta;
104113
state.wheelZoomDelta = 0;
105114
state.wheelZoomTimeout = null;
106115
setWindowZoom(window, nextLevel);

0 commit comments

Comments
 (0)