Skip to content

Commit e95a7f3

Browse files
authored
Merge pull request #125 from jadh4v/fix-mouse-scrolling-out-of-focus-window
fix(ParentedView): mouse scrolling behavior for out-of-focus windows
2 parents 894aff7 + f6451eb commit e95a7f3

File tree

1 file changed

+21
-10
lines changed

1 file changed

+21
-10
lines changed

src/core/internal/ParentedView.tsx

+21-10
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,9 @@ const ParentedView = forwardRef(function ParentedView(
8787
* 1. Switch to targeted renderer.
8888
* 2. Switch to this View's interactor style.
8989
*/
90-
useEventListener(containerRef, 'pointerenter', (ev: PointerEvent) => {
90+
const switchTarget = (): boolean => {
9191
const rendererAPI = rendererRef.current;
92-
if (!rendererAPI) return;
92+
if (!rendererAPI) return false;
9393

9494
const interactor = getInteractor();
9595

@@ -101,14 +101,25 @@ const ParentedView = forwardRef(function ParentedView(
101101
const oldContainer = interactor.getContainer();
102102
const newContainer = containerRef.current;
103103
if (oldContainer !== newContainer) {
104-
if (oldContainer) {
105-
interactor.unbindEvents();
106-
}
107-
if (newContainer) {
108-
interactor.bindEvents(newContainer);
109-
}
110-
111-
// forward event to interactor
104+
return interactor.setContainer(newContainer);
105+
}
106+
return false;
107+
};
108+
109+
// Use wheel events to cover the posibility of interacting
110+
// with an out-of-focus browser window.
111+
useEventListener(containerRef, 'wheel', (ev: WheelEvent) => {
112+
if (switchTarget()) {
113+
// forward wheel-event to interactor
114+
const interactor = getInteractor();
115+
interactor.handleWheel(ev);
116+
}
117+
});
118+
119+
useEventListener(containerRef, 'pointerenter', (ev: PointerEvent) => {
120+
if (switchTarget()) {
121+
// forward pointer-event to interactor
122+
const interactor = getInteractor();
112123
interactor.handlePointerEnter(ev);
113124
}
114125
});

0 commit comments

Comments
 (0)