From 68b51aba226050ddf7acad16eb66e6c8000f1087 Mon Sep 17 00:00:00 2001 From: Yunine Date: Mon, 20 Jul 2026 13:38:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=8F=B3=E9=94=AE=E5=9B=BE?= =?UTF-8?q?=E5=B1=82=E6=97=B6=20pointerdown=20=E8=A2=AB=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E5=8F=B3=E9=94=AE=E8=8F=9C=E5=8D=95=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E6=89=93=E5=BC=80=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../useImageCanvasStageInteractions.ts | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/components/image-editor/useImageCanvasStageInteractions.ts b/src/components/image-editor/useImageCanvasStageInteractions.ts index 44145b9fd..63ad4c603 100644 --- a/src/components/image-editor/useImageCanvasStageInteractions.ts +++ b/src/components/image-editor/useImageCanvasStageInteractions.ts @@ -214,14 +214,10 @@ export function useImageCanvasStageInteractions({ } }, [finishViewportInteraction, flushMinimapViewportDrag]); - const rejectRightButtonInteraction = useCallback( - (event: ReactPointerEvent) => { - event.preventDefault(); - event.stopPropagation(); - clearActiveInteraction(); - }, - [clearActiveInteraction], - ); + const rejectRightButtonInteraction = useCallback(() => { + // Preserve the pointer event so the matching contextmenu event can still open. + clearActiveInteraction(); + }, [clearActiveInteraction]); const setShiftPressed = useCallback((pressed: boolean) => { isShiftPressedRef.current = pressed; @@ -247,7 +243,7 @@ export function useImageCanvasStageInteractions({ (event: ReactPointerEvent) => { const button = getPointerButton(event); if (button === 2) { - rejectRightButtonInteraction(event); + rejectRightButtonInteraction(); return; } if (button === 1 || (button === 0 && effectiveTool === 'hand')) { @@ -281,14 +277,20 @@ export function useImageCanvasStageInteractions({ } clearCanvasFocus(); }, - [canvasViewportRef, clearCanvasFocus, effectiveTool, startPan], + [ + canvasViewportRef, + clearCanvasFocus, + effectiveTool, + rejectRightButtonInteraction, + startPan, + ], ); const handleLayerPointerDown = useCallback( (event: ReactPointerEvent, layer: CanvasLayer) => { const button = getPointerButton(event); if (button === 2) { - rejectRightButtonInteraction(event); + rejectRightButtonInteraction(); return; } if (button === 1 || (button === 0 && effectiveTool === 'hand')) { @@ -426,6 +428,7 @@ export function useImageCanvasStageInteractions({ pickIconSpecFromLayer, pickPublicationReferenceFromLayer, pickUiDesignSpecFromLayer, + rejectRightButtonInteraction, selectedLayerIds, setGenerateDialog, setSelectedLayerId, @@ -499,7 +502,7 @@ export function useImageCanvasStageInteractions({ } const button = getPointerButton(event); if (button === 2) { - rejectRightButtonInteraction(event); + rejectRightButtonInteraction(); return; } if (button === 1 || (button === 0 && effectiveTool === 'hand')) { @@ -550,6 +553,7 @@ export function useImageCanvasStageInteractions({ canvasGenerationDialogs, effectiveTool, layers, + rejectRightButtonInteraction, selectedLayerIds, setSelectedLayerId, setSelectedLayerIds,