diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index b5e47fa6be3fce2d1899c32da971c3b3e3d07a7b..0ec24aef20f22b6aee4b67eef21141419ab4b5be 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -4475,7 +4475,38 @@ void BaseTextEditor::insertFromMimeData(const QMimeData *source)
         ensureCursorVisible();
         return;
     }
-    QPlainTextEdit::insertFromMimeData(source);
+
+    QString text = source->text();
+    if (text.isEmpty())
+        return;
+
+    const TabSettings &ts = d->m_document->tabSettings();
+    QTextCursor cursor = textCursor();
+    if (cursor.hasSelection() || !ts.m_autoIndent) {
+        cursor.beginEditBlock();
+        cursor.insertText(text);
+        cursor.endEditBlock();
+        setTextCursor(cursor);
+        return;
+    }
+
+    cursor.beginEditBlock();
+    int bpos = cursor.block().position();
+    int pos = cursor.position() - bpos;
+    int fns = ts.firstNonSpace(cursor.block().text());
+
+    cursor.insertText(text);
+
+    if (pos <= fns) { // cursor was at beginning of line, do reindent
+        pos = cursor.position();
+        cursor.setPosition(bpos);
+        cursor.setPosition(pos, QTextCursor::KeepAnchor);
+        indent(document(), cursor, QChar::Null);
+        cursor.clearSelection();
+    }
+
+    cursor.endEditBlock();
+    setTextCursor(cursor);
 }
 
 BaseTextEditorEditable::BaseTextEditorEditable(BaseTextEditor *editor)