diff --git a/src/pointer/pointerPress.ts b/src/pointer/pointerPress.ts index b887bbf1..d51f635d 100644 --- a/src/pointer/pointerPress.ts +++ b/src/pointer/pointerPress.ts @@ -102,39 +102,40 @@ function down( } pointerState.pressed.push(pressObj) - if (!targetIsDisabled) { - if (pointerType !== 'mouse') { - fire('pointerover') - fire('pointerenter') - } - if ( - pointerType !== 'mouse' || - !pointerState.pressed.some( - p => p.keyDef !== keyDef && p.keyDef.pointerType === pointerType, - ) - ) { - fire('pointerdown') - } - if (pointerType === 'mouse') { + if (pointerType !== 'mouse') { + fire('pointerover') + fire('pointerenter') + } + if ( + pointerType !== 'mouse' || + !pointerState.pressed.some( + p => p.keyDef !== keyDef && p.keyDef.pointerType === pointerType, + ) + ) { + fire('pointerdown') + } + + // TODO: touch... + + if (pointerType === 'mouse') { + if (!targetIsDisabled) { pressObj.unpreventedDefault = fire('mousedown') } - // TODO: touch... - } - - if (pointerType === 'mouse' && pressObj.unpreventedDefault) { - mousedownDefaultBehavior({ - target, - targetIsDisabled, - clickCount, - position: pointerState.position[pointerName], - node, - offset, - }) - } + if (pressObj.unpreventedDefault) { + mousedownDefaultBehavior({ + target, + targetIsDisabled, + clickCount, + position: pointerState.position[pointerName], + node, + offset, + }) + } - if (pointerType === 'mouse' && button === 'secondary') { - fire('contextmenu') + if (button === 'secondary') { + fire('contextmenu') + } } return pressObj @@ -179,19 +180,20 @@ function up( // TODO: pointerleave for touch device - if (!targetIsDisabled) { - if ( - pointerType !== 'mouse' || - !pointerState.pressed.filter(p => p.keyDef.pointerType === pointerType) - .length - ) { - fire('pointerup') - } - if (pointerType !== 'mouse') { - fire('pointerout') - fire('pointerleave') - } - if (pointerType !== 'mouse' && !isMultiTouch) { + if ( + pointerType !== 'mouse' || + !pointerState.pressed.filter(p => p.keyDef.pointerType === pointerType) + .length + ) { + fire('pointerup') + } + if (pointerType !== 'mouse') { + fire('pointerout') + fire('pointerleave') + } + + if (pointerType !== 'mouse' && !isMultiTouch) { + if (!targetIsDisabled) { if (clickCount === 1) { fire('mouseover') fire('mouseenter') @@ -199,17 +201,17 @@ function up( fire('mousemove') unpreventedDefault = fire('mousedown') && unpreventedDefault } - } - if (unpreventedDefault && pointerType !== 'mouse' && !isMultiTouch) { - mousedownDefaultBehavior({ - target, - targetIsDisabled, - clickCount, - position: pointerState.position[pointerName], - node, - offset, - }) + if (unpreventedDefault) { + mousedownDefaultBehavior({ + target, + targetIsDisabled, + clickCount, + position: pointerState.position[pointerName], + node, + offset, + }) + } } delete pointerState.position[pointerName].selectionRange diff --git a/tests/pointer/index.ts b/tests/pointer/index.ts index e1f16d28..48ab58e0 100644 --- a/tests/pointer/index.ts +++ b/tests/pointer/index.ts @@ -109,9 +109,15 @@ describe('delay', () => { }) test('only pointer events on disabled elements', async () => { - const {element, getEventSnapshot, getEvents} = setup('