Fix touches with same id not being removed properly

This commit is contained in:
Rui Reis 2024-07-31 15:45:33 +02:00
parent 8af21c7082
commit b673af9925
1 changed files with 10 additions and 4 deletions

View File

@ -88,14 +88,20 @@ export default class TouchHandlerUltraVNC {
} }
} else if (ev.type === "touchend" || ev.type === "touchcancel") { } else if (ev.type === "touchend" || ev.type === "touchcancel") {
for (let i = 0; i < ev.changedTouches.length; i++) { for (let i = 0; i < ev.changedTouches.length; i++) {
const index = this._currentTouches.findIndex(t => t.event.identifier === ev.changedTouches[i].identifier); const indexes = this._getAllIndexes(this._currentTouches, (t) => t.event.identifier === ev.changedTouches[i].identifier)
if (index !== -1) { indexes.forEach((index) => this._currentTouches[index].status = "POINTER_UP");
this._currentTouches[index].status = "POINTER_UP";
}
} }
} }
} }
_getAllIndexes(arr, func) {
var indexes = [], i;
for (i = 0; i < arr.length; i++)
if (func(arr[i]))
indexes.push(i);
return indexes;
}
_dispatchTouchEvent(ev) { _dispatchTouchEvent(ev) {
let tev = new CustomEvent('ultravnctouch', { event: ev, detail: { currentTouches: this._currentTouches, giiDeviceOrigin: this._giiDeviceOrigin } }); let tev = new CustomEvent('ultravnctouch', { event: ev, detail: { currentTouches: this._currentTouches, giiDeviceOrigin: this._giiDeviceOrigin } });
this._target.dispatchEvent(tev); this._target.dispatchEvent(tev);