File tree Expand file tree Collapse file tree 5 files changed +21
-29
lines changed
Expand file tree Collapse file tree 5 files changed +21
-29
lines changed Original file line number Diff line number Diff line change 1+ import { read } from "../mutableState" ;
12import { onWindowPointerMove } from "./onWindowPointerMove" ;
23
34export function onGroupPointerLeave ( event : PointerEvent ) {
4- // The "pointerleave" event is not reliably triggered when the pointer exits a window or iframe
5- // To account for this, we listen for "pointerleave" events on the Group element itself
6- // The easiest way to handle these is to reuse the same logic as the Window "pointermove" event
7- onWindowPointerMove ( event ) ;
5+ const { interactionState } = read ( ) ;
6+
7+ switch ( interactionState . state ) {
8+ case "active" : {
9+ interactionState . hitRegions . forEach ( ( hitRegion ) => {
10+ if ( event . currentTarget === hitRegion . group . element ) {
11+ // The "pointerleave" event is not reliably triggered when the pointer exits a window or iframe
12+ // To account for this, we listen for "pointerleave" events on the Group element itself
13+ // The easiest way to handle these is to reuse the same logic as the Window "pointermove" event
14+ onWindowPointerMove ( event ) ;
15+ }
16+ } ) ;
17+ }
18+ }
819}
Original file line number Diff line number Diff line change @@ -3,7 +3,6 @@ import type { RegisteredPanel } from "../../components/panel/types";
33import type { RegisteredSeparator } from "../../components/separator/types" ;
44import { read , update } from "../mutableState" ;
55import { findMatchingHitRegions } from "../utils/findMatchingHitRegions" ;
6- import { onGroupPointerLeave } from "./onGroupPointerLeave" ;
76
87export function onWindowPointerDown ( event : PointerEvent ) {
98 if ( event . defaultPrevented ) {
@@ -28,10 +27,6 @@ export function onWindowPointerDown(event: PointerEvent) {
2827 separators . add ( current . separator ) ;
2928 }
3029
31- // The "pointerleave" event is not reliably triggered when the pointer exits a window or iframe
32- // To account for this, we listen for "pointerleave" events on the Group element itself
33- current . group . element . addEventListener ( "pointerleave" , onGroupPointerLeave ) ;
34-
3530 const match = mountedGroups . get ( current . group ) ;
3631 if ( match ) {
3732 initialLayoutMap . set ( current . group , match . layout ) ;
Original file line number Diff line number Diff line change @@ -9,7 +9,6 @@ import { read, update } from "../mutableState";
99import { adjustLayoutByDelta } from "../utils/adjustLayoutByDelta" ;
1010import { findMatchingHitRegions } from "../utils/findMatchingHitRegions" ;
1111import { layoutsEqual } from "../utils/layoutsEqual" ;
12- import { onGroupPointerLeave } from "./onGroupPointerLeave" ;
1312
1413export function onWindowPointerMove ( event : PointerEvent ) {
1514 if ( event . defaultPrevented ) {
@@ -27,13 +26,6 @@ export function onWindowPointerMove(event: PointerEvent) {
2726 event . type !== "pointerleave" &&
2827 event . buttons === 0
2928 ) {
30- interactionState . hitRegions . forEach ( ( hitRegion ) => {
31- hitRegion . group . element . removeEventListener (
32- "pointerleave" ,
33- onGroupPointerLeave
34- ) ;
35- } ) ;
36-
3729 update ( ( prevState ) =>
3830 prevState . interactionState . state === "inactive"
3931 ? prevState
Original file line number Diff line number Diff line change 11import { updateCursorStyle } from "../cursor/updateCursorStyle" ;
22import { read , update } from "../mutableState" ;
3- import { onGroupPointerLeave } from "./onGroupPointerLeave" ;
43
54export function onWindowPointerUp ( event : PointerEvent ) {
65 if ( event . defaultPrevented ) {
@@ -13,13 +12,6 @@ export function onWindowPointerUp(event: PointerEvent) {
1312
1413 switch ( interactionState . state ) {
1514 case "active" : {
16- interactionState . hitRegions . forEach ( ( hitRegion ) => {
17- hitRegion . group . element . removeEventListener (
18- "pointerleave" ,
19- onGroupPointerLeave
20- ) ;
21- } ) ;
22-
2315 update ( {
2416 cursorFlags : 0 ,
2517 interactionState : {
Original file line number Diff line number Diff line change @@ -102,6 +102,10 @@ export function mountGroup(group: RegisteredGroup) {
102102 } )
103103 } ) ) ;
104104
105+ // The "pointerleave" event is not reliably triggered when the pointer exits a window or iframe
106+ // To account for this, we listen for "pointerleave" events on the Group element itself
107+ group . element . addEventListener ( "pointerleave" , onGroupPointerLeave ) ;
108+
105109 group . separators . forEach ( ( separator ) => {
106110 assert (
107111 ! separatorIds . has ( separator . id ) ,
@@ -130,14 +134,12 @@ export function mountGroup(group: RegisteredGroup) {
130134 return { mountedGroups } ;
131135 } ) ;
132136
137+ group . element . removeEventListener ( "pointerleave" , onGroupPointerLeave ) ;
138+
133139 group . separators . forEach ( ( separator ) => {
134140 separator . element . removeEventListener ( "keydown" , onWindowKeyDown ) ;
135141 } ) ;
136142
137- // Edge case:
138- // In case this group is removed while a drag is in progress, clean up any temporary event listeners
139- group . element . removeEventListener ( "pointerleave" , onGroupPointerLeave ) ;
140-
141143 // If this was the last group to be mounted, tear down event handlers
142144 if ( nextState . mountedGroups . size === 0 ) {
143145 window . removeEventListener ( "pointerdown" , onWindowPointerDown ) ;
You can’t perform that action at this time.
0 commit comments