From 75475313061db8b0a069900ab1f267620944d938 Mon Sep 17 00:00:00 2001 From: peterkogo Date: Wed, 5 Jun 2024 16:27:33 +0200 Subject: [PATCH 1/2] abort drag when multiple touches are detected --- packages/system/src/xydrag/XYDrag.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/system/src/xydrag/XYDrag.ts b/packages/system/src/xydrag/XYDrag.ts index e205ced7..0b8c3d89 100644 --- a/packages/system/src/xydrag/XYDrag.ts +++ b/packages/system/src/xydrag/XYDrag.ts @@ -100,6 +100,7 @@ export function XYDrag voi let containerBounds: DOMRect | null = null; let dragStarted = false; let d3Selection: Selection | null = null; + let abortDrag = false; // needed to block multitouch // public functions function update({ noDragClassName, handleSelector, domNode, isSelectable, nodeId }: DragUpdateParams) { @@ -264,6 +265,8 @@ export function XYDrag voi .on('start', (event: UseDragEvent) => { const { domNode, nodeDragThreshold, transform, snapGrid, snapToGrid } = getStoreItems(); + abortDrag = false; + if (nodeDragThreshold === 0) { startDrag(event); } @@ -277,6 +280,14 @@ export function XYDrag voi const { autoPanOnNodeDrag, transform, snapGrid, snapToGrid, nodeDragThreshold } = getStoreItems(); const pointerPos = getPointerPosition(event.sourceEvent, { transform, snapGrid, snapToGrid }); + if (event.sourceEvent.type === 'touchmove' && event.sourceEvent.touches.length > 1) { + abortDrag = true; + } + + if (abortDrag) { + return; + } + if (!autoPanStarted && autoPanOnNodeDrag && dragStarted) { autoPanStarted = true; autoPan(); @@ -301,7 +312,7 @@ export function XYDrag voi } }) .on('end', (event: UseDragEvent) => { - if (!dragStarted) { + if (!dragStarted || abortDrag) { return; } From fd02d2f245d7727bcbd000d4a44336096a6e3472 Mon Sep 17 00:00:00 2001 From: peterkogo Date: Wed, 5 Jun 2024 16:35:08 +0200 Subject: [PATCH 2/2] made comment more explicit --- packages/system/src/xydrag/XYDrag.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/system/src/xydrag/XYDrag.ts b/packages/system/src/xydrag/XYDrag.ts index 0b8c3d89..365f20ef 100644 --- a/packages/system/src/xydrag/XYDrag.ts +++ b/packages/system/src/xydrag/XYDrag.ts @@ -100,7 +100,7 @@ export function XYDrag voi let containerBounds: DOMRect | null = null; let dragStarted = false; let d3Selection: Selection | null = null; - let abortDrag = false; // needed to block multitouch + let abortDrag = false; // prevents unintentional dragging on multitouch // public functions function update({ noDragClassName, handleSelector, domNode, isSelectable, nodeId }: DragUpdateParams) {