Skip to content

Commit e56e954

Browse files
Using isPrimary to Filter Pointer Events
Make sure only the first pointer will be handled
1 parent dcad989 commit e56e954

File tree

1 file changed

+19
-16
lines changed

1 file changed

+19
-16
lines changed

ui/widgets/pointer.js

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,6 @@
3131
} )( function( $ ) {
3232
"use strict";
3333

34-
var pointerHandled = false;
35-
$( document ).on( "pointerup pointercancel", function() {
36-
pointerHandled = false;
37-
} );
3834

3935
return $.widget( "ui.pointer", {
4036
version: "@VERSION",
@@ -43,6 +39,7 @@ return $.widget( "ui.pointer", {
4339
distance: 1,
4440
delay: 0
4541
},
42+
4643
_pointerInit: function() {
4744
var that = this;
4845

@@ -76,11 +73,11 @@ return $.widget( "ui.pointer", {
7673
}
7774

7875
this._pointerStarted = false;
79-
pointerHandled = false;
8076
},
8177

8278
_pointerDown: function( event ) {
83-
if ( pointerHandled ) {
79+
// Ignore any pointer that isn't the primary one (e.g. extra fingers).
80+
if ( !event.isPrimary ) {
8481
return;
8582
}
8683

@@ -139,14 +136,17 @@ return $.widget( "ui.pointer", {
139136
.on( "pointercancel." + this.widgetName, this._pointerCancelDelegate );
140137

141138
event.preventDefault();
142-
143-
pointerHandled = true;
144139
return true;
145140
},
146141

147142
_pointerMove: function( event ) {
143+
// Document-level listeners fire for all pointers; ignore non-primary ones.
144+
if ( !event.isPrimary ) {
145+
return;
146+
}
147+
148148
if ( this._pointerMoved && event.buttons === 0 ) {
149-
return this._pointerUp( event );
149+
return this._pointerUp( event );
150150
}
151151

152152
if ( event.buttons || event.button ) {
@@ -173,6 +173,11 @@ return $.widget( "ui.pointer", {
173173
},
174174

175175
_pointerUp: function( event ) {
176+
// Document-level listeners fire for all pointers; ignore non-primary ones.
177+
if ( !event.isPrimary ) {
178+
return;
179+
}
180+
176181
this.document
177182
.off( "pointermove." + this.widgetName, this._pointerMoveDelegate )
178183
.off( "pointerup." + this.widgetName, this._pointerUpDelegate )
@@ -193,15 +198,15 @@ return $.widget( "ui.pointer", {
193198
delete this._pointerDelayTimer;
194199
}
195200

196-
pointerHandled = false;
197201
event.preventDefault();
198202
},
199203

200-
// pointercancel fires when the browser takes over pointer control (e.g. scroll
201-
// gesture, orientation change, stylus palm rejection). Unlike pointerup, it is
202-
// not cancelable, so we skip preventDefault() and click-prevention data, but we
203-
// still need to tear down all listeners and stop any active drag.
204204
_handlePointerCancel: function( event ) {
205+
// Document-level listeners fire for all pointers; ignore non-primary ones.
206+
if ( !event.isPrimary ) {
207+
return;
208+
}
209+
205210
this.document
206211
.off( "pointermove." + this.widgetName, this._pointerMoveDelegate )
207212
.off( "pointerup." + this.widgetName, this._pointerUpDelegate )
@@ -216,8 +221,6 @@ return $.widget( "ui.pointer", {
216221
clearTimeout( this._pointerDelayTimer );
217222
delete this._pointerDelayTimer;
218223
}
219-
220-
pointerHandled = false;
221224
},
222225

223226
_pointerDistanceMet: function( event ) {

0 commit comments

Comments
 (0)