diff --git a/apps/web/src/terminal/ghostty/surface.test.ts b/apps/web/src/terminal/ghostty/surface.test.ts index d0b1e67de2678..2ef8dbff45923 100644 --- a/apps/web/src/terminal/ghostty/surface.test.ts +++ b/apps/web/src/terminal/ghostty/surface.test.ts @@ -522,6 +522,22 @@ describe("GhosttyTerminalSurface visibility", () => { expect(surface.getSelection()).toBe("row 6\nrow 7\nrow 8"); }); + it("leaves mostly sideways wheel events to the scroller around it", async () => { + const harness = createHarness(); + await harness.create(); + const wheel = (deltaX: number, deltaY: number) => { + const event = Object.assign(new Event("wheel", { cancelable: true }), { + deltaX, + deltaY, + deltaMode: 0, + }); + harness.canvas.dispatchEvent(event); + return event.defaultPrevented; + }; + expect(wheel(-20, 1)).toBe(false); + expect(wheel(2, -60)).toBe(true); + }); + it("does not activate a link replaced before pointer release", async () => { const harness = createHarness(); const onLinkActivate = vi.fn(); diff --git a/apps/web/src/terminal/ghostty/surface.ts b/apps/web/src/terminal/ghostty/surface.ts index a62158592da3b..298a0d9372be2 100644 --- a/apps/web/src/terminal/ghostty/surface.ts +++ b/apps/web/src/terminal/ghostty/surface.ts @@ -1674,7 +1674,7 @@ export class GhosttyTerminalSurface { }; private readonly onWheel = (event: WheelEvent) => { - if (event.deltaY === 0) return; + if (event.deltaY === 0 || Math.abs(event.deltaY) < Math.abs(event.deltaX)) return; event.preventDefault(); const delta = terminalWheelDeltaRows( event,