From d0b0d0470beac14a472519705071784185d170c8 Mon Sep 17 00:00:00 2001 From: Olivier Terral Date: Fri, 1 Nov 2013 16:22:09 +0100 Subject: [PATCH 1/3] Fix singleclick and doubleclick on windows Surface --- src/ol/mapbrowserevent.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/ol/mapbrowserevent.js b/src/ol/mapbrowserevent.js index bbcd79cb54..086b1c4ba8 100644 --- a/src/ol/mapbrowserevent.js +++ b/src/ol/mapbrowserevent.js @@ -322,10 +322,18 @@ ol.MapBrowserEventHandler.prototype.handlePointerDown_ = */ ol.MapBrowserEventHandler.prototype.handlePointerMove_ = function(browserEvent) { - this.dragged_ = true; - var newEvent = new ol.MapBrowserEvent( - ol.MapBrowserEvent.EventType.TOUCHMOVE, this.map_, browserEvent); - this.dispatchEvent(newEvent); + // Fix IE10 on windows Surface : When you tap the tablet, it triggers + // multiple pointermove events between pointerdown and pointerup with + // the exact same coordinates of the pointerdown event. To avoid a + // 'false' touchmove event to be dispatched , we test if the pointermove + // event has different coordinates. + if (browserEvent.clientX != this.down_.clientX || + browserEvent.clientY != this.down_.clientY) { + this.dragged_ = true; + var newEvent = new ol.MapBrowserEvent( + ol.MapBrowserEvent.EventType.TOUCHMOVE, this.map_, browserEvent); + this.dispatchEvent(newEvent); + } }; From 726a04ce3ebf39415c5a67ec25119e29921754b1 Mon Sep 17 00:00:00 2001 From: Olivier Terral Date: Fri, 1 Nov 2013 16:27:48 +0100 Subject: [PATCH 2/3] Forbid right click to trigger singleclick events on IE10 --- src/ol/mapbrowserevent.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ol/mapbrowserevent.js b/src/ol/mapbrowserevent.js index 086b1c4ba8..0e6117ba91 100644 --- a/src/ol/mapbrowserevent.js +++ b/src/ol/mapbrowserevent.js @@ -346,7 +346,10 @@ ol.MapBrowserEventHandler.prototype.handlePointerUp_ = function(browserEvent) { ol.MapBrowserEvent.EventType.TOUCHEND, this.map_, browserEvent); this.dispatchEvent(newEvent); goog.array.forEach(this.dragListenerKeys_, goog.events.unlistenByKey); - if (!this.dragged_) { + + // We emulate click event only on mouse left button action, + // on touch devices isMouseActionButton always returns true. + if (!this.dragged_ && browserEvent.isMouseActionButton()) { goog.asserts.assert(!goog.isNull(this.down_)); this.emulateClick_(this.down_); } From 67d3b4527a5a0bae5b5ae4b4cb3f2595bc0db407 Mon Sep 17 00:00:00 2001 From: Olivier Terral Date: Fri, 8 Nov 2013 15:33:49 +0100 Subject: [PATCH 3/3] Modify comments --- src/ol/mapbrowserevent.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/ol/mapbrowserevent.js b/src/ol/mapbrowserevent.js index 0e6117ba91..b34c025a8c 100644 --- a/src/ol/mapbrowserevent.js +++ b/src/ol/mapbrowserevent.js @@ -325,8 +325,8 @@ ol.MapBrowserEventHandler.prototype.handlePointerMove_ = // Fix IE10 on windows Surface : When you tap the tablet, it triggers // multiple pointermove events between pointerdown and pointerup with // the exact same coordinates of the pointerdown event. To avoid a - // 'false' touchmove event to be dispatched , we test if the pointermove - // event has different coordinates. + // 'false' touchmove event to be dispatched , we test if the pointer + // effectively moved. if (browserEvent.clientX != this.down_.clientX || browserEvent.clientY != this.down_.clientY) { this.dragged_ = true; @@ -347,8 +347,10 @@ ol.MapBrowserEventHandler.prototype.handlePointerUp_ = function(browserEvent) { this.dispatchEvent(newEvent); goog.array.forEach(this.dragListenerKeys_, goog.events.unlistenByKey); - // We emulate click event only on mouse left button action, - // on touch devices isMouseActionButton always returns true. + // We emulate click event on left mouse button click, touch contact, and pen + // contact. isMouseActionButton returns true in these cases (evt.button is set + // to 0). + // See http://www.w3.org/TR/pointerevents/#button-states . if (!this.dragged_ && browserEvent.isMouseActionButton()) { goog.asserts.assert(!goog.isNull(this.down_)); this.emulateClick_(this.down_);