diff --git a/src/components/image-editor/ImageCanvasAssetRowView.test.tsx b/src/components/image-editor/ImageCanvasAssetRowView.test.tsx index 907f160b5..fe69f5845 100644 --- a/src/components/image-editor/ImageCanvasAssetRowView.test.tsx +++ b/src/components/image-editor/ImageCanvasAssetRowView.test.tsx @@ -227,6 +227,22 @@ describe('ImageCanvasAssetRowView', () => { ); }); + it('uses click detail to recognize keyboard selection after a stale touch gesture', () => { + const toggleAssetSelected = vi.fn(); + renderAssetRow({ isAssetSelectionMode: true, toggleAssetSelected }); + const primaryButton = screen.getByRole('button', { + name: '选择素材账号素材A', + }); + + fireEvent.pointerDown(primaryButton, { pointerType: 'touch' }); + fireEvent.click(primaryButton, { detail: 0 }); + + expect(toggleAssetSelected).toHaveBeenCalledWith( + 'asset-1', + expect.objectContaining({ pointerKind: 'keyboard' }), + ); + }); + it('renders rename input and commits with Enter', () => { const commitAssetRename = vi.fn(); renderAssetRow({ diff --git a/src/components/image-editor/ImageCanvasAssetRowView.tsx b/src/components/image-editor/ImageCanvasAssetRowView.tsx index 6d4350637..ef8a067c0 100644 --- a/src/components/image-editor/ImageCanvasAssetRowView.tsx +++ b/src/components/image-editor/ImageCanvasAssetRowView.tsx @@ -109,6 +109,9 @@ export function ImageCanvasAssetRowView({ const selectAssetFromEvent = useCallback( (event: ReactMouseEvent) => { + const pointerKind = + event.detail === 0 ? 'keyboard' : selectionPointerKindRef.current; + selectionPointerKindRef.current = 'keyboard'; if ( !isAssetSelectionMode || isUploadingAsset || @@ -123,9 +126,8 @@ export function ImageCanvasAssetRowView({ shiftKey: event.shiftKey, ctrlKey: event.ctrlKey, metaKey: event.metaKey, - pointerKind: selectionPointerKindRef.current, + pointerKind, }); - selectionPointerKindRef.current = 'keyboard'; }, [ asset.id,