diff --git a/packages/ckeditor5-clipboard/src/dragdrop.js b/packages/ckeditor5-clipboard/src/dragdrop.js
index 881aa8ce216..0ad7892b42a 100644
--- a/packages/ckeditor5-clipboard/src/dragdrop.js
+++ b/packages/ckeditor5-clipboard/src/dragdrop.js
@@ -242,7 +242,7 @@ export default class DragDrop extends Plugin {
const selection = modelDocument.selection;
// Don't drag the editable element itself.
- if ( data.target && data.target.is( 'rootElement' ) ) {
+ if ( data.target && data.target.is( 'editableElement' ) ) {
data.preventDefault();
return;
@@ -470,7 +470,9 @@ export default class DragDrop extends Plugin {
// If this was not a widget then we should check if we need to drag some text content.
// In Chrome set a 'draggable' attribute on closest editable to allow immediate dragging of the selected text range.
// In Firefox this is not needed. In Safari it makes the whole editable draggable (not just textual content).
- if ( env.isBlink && !draggableElement && !viewDocument.selection.isCollapsed ) {
+ // Disabled in read-only mode because draggable="true" + contenteditable="false" results
+ // in not firing selectionchange event ever, which makes the selection stuck in read-only mode.
+ if ( env.isBlink && !editor.isReadOnly && !draggableElement && !viewDocument.selection.isCollapsed ) {
const selectedElement = viewDocument.selection.getSelectedElement();
if ( !selectedElement || !isWidget( selectedElement ) ) {
diff --git a/packages/ckeditor5-clipboard/tests/dragdrop.js b/packages/ckeditor5-clipboard/tests/dragdrop.js
index 5c87fe682c8..c94383f3fc9 100644
--- a/packages/ckeditor5-clipboard/tests/dragdrop.js
+++ b/packages/ckeditor5-clipboard/tests/dragdrop.js
@@ -769,6 +769,38 @@ describe( 'Drag and Drop', () => {
expect( spyClipboardOutput.notCalled ).to.be.true;
} );
+ it( 'should not start dragging if the editable would be dragged itself', () => {
+ setModelData( model, '