Skip to content

Commit a9c668f

Browse files
fix(code): avoid redundant zoom restoration
Generated-By: PostHog Code Task-Id: 33078092-6d41-45e8-8375-157f66bcea43
1 parent fd5ca1b commit a9c668f

2 files changed

Lines changed: 25 additions & 6 deletions

File tree

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

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ class FakeWebContents extends EventEmitter {
2828
return this.destroyed;
2929
}
3030

31+
public getZoomLevel(): number {
32+
return this.zoomLevel;
33+
}
34+
3135
public setZoomLevel(level: number): void {
3236
this.setZoomLevelCalls.push(level);
3337
this.zoomLevel = level;
@@ -98,7 +102,6 @@ describe("window zoom", () => {
98102

99103
window.webContents.emit("zoom-changed", { preventDefault: vi.fn() }, "in");
100104
vi.runAllTimers();
101-
vi.advanceTimersByTime(5 * 60 * 1000);
102105
window.webContents.zoomLevel = 0;
103106

104107
window.emit("resize");
@@ -166,17 +169,29 @@ describe("window zoom", () => {
166169
},
167170
);
168171

169-
it("debounces repeated resize restorations", () => {
172+
it("skips redundant restoration during a resize storm", () => {
170173
const window = createWindow();
171174
setupWindowZoom(window);
172-
window.webContents.zoomLevel = 0;
175+
window.webContents.zoomLevel = 0.5;
173176

174177
window.emit("resize");
178+
vi.runAllTimers();
179+
vi.advanceTimersByTime(16);
175180
window.emit("resize");
176-
window.emit("resized");
177181
vi.runAllTimers();
182+
const callsBeforeReset = [...window.webContents.setZoomLevelCalls];
178183

179-
expect(window.webContents.setZoomLevelCalls).toEqual([0.5]);
184+
window.webContents.zoomLevel = 0;
185+
window.emit("resize");
186+
vi.runAllTimers();
187+
188+
expect({
189+
callsBeforeReset,
190+
callsAfterReset: window.webContents.setZoomLevelCalls,
191+
}).toEqual({
192+
callsBeforeReset: [],
193+
callsAfterReset: [0.5],
194+
});
180195
});
181196

182197
it("ignores queued zoom work after the window is destroyed", () => {

apps/code/src/main/zoom.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const ZOOM_MIN = -3;
66
const ZOOM_MAX = 3;
77

88
interface ZoomWebContents {
9+
getZoomLevel(): number;
910
isDestroyed(): boolean;
1011
on(event: "did-finish-load", listener: () => void): void;
1112
on(
@@ -86,7 +87,10 @@ export function adjustWindowZoom(
8687
export function restoreWindowZoom(window: ZoomWindow): void {
8788
runAfterWheelZoom(window, () => {
8889
if (window.webContents.isDestroyed()) return;
89-
window.webContents.setZoomLevel(getCurrentZoomLevel(window));
90+
const zoomLevel = getCurrentZoomLevel(window);
91+
if (window.webContents.getZoomLevel() !== zoomLevel) {
92+
window.webContents.setZoomLevel(zoomLevel);
93+
}
9094
});
9195
}
9296

0 commit comments

Comments
 (0)