From 1852ad78a20fd8b37f03c97c3dfb006790ce8d45 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Wed, 15 Jun 2022 12:51:13 +0200 Subject: [PATCH] Clean up tracked pointers when the event target has changed --- src/ol/interaction/Pointer.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/ol/interaction/Pointer.js b/src/ol/interaction/Pointer.js index 51d268e144..83ff187f35 100644 --- a/src/ol/interaction/Pointer.js +++ b/src/ol/interaction/Pointer.js @@ -195,6 +195,16 @@ class PointerInteraction extends Interaction { const id = event.pointerId.toString(); if (mapBrowserEvent.type == MapBrowserEventType.POINTERUP) { delete this.trackedPointers_[id]; + for (const pointerId in this.trackedPointers_) { + if (this.trackedPointers_[pointerId].target !== event.target) { + // Some platforms assign a new pointerId when the target changes. + // If this happens, delete one tracked pointer. If there is more + // than one tracked pointer for the old target, it will be cleared + // by subsequent POINTERUP events from other pointers. + delete this.trackedPointers_[pointerId]; + break; + } + } } else if (mapBrowserEvent.type == MapBrowserEventType.POINTERDOWN) { this.trackedPointers_[id] = event; } else if (id in this.trackedPointers_) {