From 7accb31ebcde1d6572ea95d5a35cd380d4717e2d Mon Sep 17 00:00:00 2001 From: Brennan Benson <79079362+brennanb2025@users.noreply.github.com> Date: Mon, 24 Aug 2026 16:34:02 -0700 Subject: [PATCH] fix(popover): bridge descendant wheel cancellation --- .../src/components/ui/popover-wheel-scroll.test.tsx | 9 +++++++-- src/renderer/src/components/ui/popover.tsx | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/renderer/src/components/ui/popover-wheel-scroll.test.tsx b/src/renderer/src/components/ui/popover-wheel-scroll.test.tsx index 833b631f883..dcf1a804df5 100644 --- a/src/renderer/src/components/ui/popover-wheel-scroll.test.tsx +++ b/src/renderer/src/components/ui/popover-wheel-scroll.test.tsx @@ -218,7 +218,12 @@ describe('PopoverContent wheel shim', () => { }) it('respects descendant cancellation', () => { - const innerOnWheel = vi.fn((event: ReactWheelEvent) => event.preventDefault()) + const innerOnWheel = vi.fn((event: ReactWheelEvent) => { + // Model React's passive delegated wheel event: synthetic cancellation does not + // update the native event observed by the shim. + Object.defineProperty(event.nativeEvent, 'preventDefault', { value: vi.fn() }) + event.preventDefault() + }) renderPopover('popover-wheel-scroll', true, { innerOnWheel }) const viewport = document.querySelector('[data-testid="viewport"]')! viewport.style.overflowY = 'auto' @@ -227,7 +232,7 @@ describe('PopoverContent wheel shim', () => { const event = wheel(document.querySelector('[data-testid="inner"]')!, 120) expect(innerOnWheel).toHaveBeenCalledOnce() - expect(event.defaultPrevented).toBe(true) + expect(event.defaultPrevented).toBe(false) expect(viewport.scrollTop).toBe(0) }) diff --git a/src/renderer/src/components/ui/popover.tsx b/src/renderer/src/components/ui/popover.tsx index c25d2555cc4..01365ba665b 100644 --- a/src/renderer/src/components/ui/popover.tsx +++ b/src/renderer/src/components/ui/popover.tsx @@ -181,8 +181,8 @@ function PopoverContent({ WebkitAppRegion: 'no-drag' } as React.CSSProperties } - onWheel={onWheel ? handleConsumerWheel : undefined} - onWheelCapture={onWheelCapture ? handleConsumerWheelCapture : undefined} + onWheel={handleConsumerWheel} + onWheelCapture={handleConsumerWheelCapture} {...props} />