From 811e0951199c6eab32ba638edffdfa67b36783c9 Mon Sep 17 00:00:00 2001 From: Allan Greco Date: Tue, 19 May 2026 11:03:20 +0200 Subject: [PATCH] Keep external drop effect as copy --- .changelog/20260519225000_i_20161.md | 9 +++++++++ packages/ckeditor5-clipboard/src/dragdrop.ts | 6 ++---- packages/ckeditor5-clipboard/tests/dragdrop.js | 1 + 3 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 .changelog/20260519225000_i_20161.md diff --git a/.changelog/20260519225000_i_20161.md b/.changelog/20260519225000_i_20161.md new file mode 100644 index 00000000000..b3e7835ffc7 --- /dev/null +++ b/.changelog/20260519225000_i_20161.md @@ -0,0 +1,9 @@ +--- +type: Fix +scope: + - ckeditor5-clipboard +closes: + - https://github.com/ckeditor/ckeditor5/issues/20161 +--- + +External content dragged into the editor now keeps the copy drop effect instead of being treated as a move operation. diff --git a/packages/ckeditor5-clipboard/src/dragdrop.ts b/packages/ckeditor5-clipboard/src/dragdrop.ts index 732e4119547..62acf2c93fd 100644 --- a/packages/ckeditor5-clipboard/src/dragdrop.ts +++ b/packages/ckeditor5-clipboard/src/dragdrop.ts @@ -376,10 +376,8 @@ export class DragDrop extends Plugin { // is not possible until 'dragend' event case will be fixed. if ( !this._draggedRange ) { data.dataTransfer.dropEffect = 'copy'; - } - - // In Firefox it is already set and effect allowed remains the same as originally set. - if ( !env.isGecko ) { + } else if ( !env.isGecko ) { + // In Firefox it is already set and effect allowed remains the same as originally set. if ( data.dataTransfer.effectAllowed == 'copy' ) { data.dataTransfer.dropEffect = 'copy'; } else if ( [ 'all', 'copyMove' ].includes( data.dataTransfer.effectAllowed ) ) { diff --git a/packages/ckeditor5-clipboard/tests/dragdrop.js b/packages/ckeditor5-clipboard/tests/dragdrop.js index 1944d69f677..e764c245cfa 100644 --- a/packages/ckeditor5-clipboard/tests/dragdrop.js +++ b/packages/ckeditor5-clipboard/tests/dragdrop.js @@ -200,6 +200,7 @@ describe( 'Drag and Drop', () => { // Dragging. targetPosition = model.createPositionAt( root.getChild( 0 ), 5 ); + dataTransferMock.effectAllowed = 'copyMove'; fireDragging( dataTransferMock, targetPosition ); clock.tick( 100 );