From e96c664fcefc45a0c9d19b80c38dfd4975625325 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Wed, 3 Nov 2021 12:22:22 +0100 Subject: [PATCH] Editor: Fix drop position of drag and drop operation Change-Id: I6649b0506e06bccb681c66afc91ad85f763206c4 Reviewed-by: Christian Stenger --- src/plugins/texteditor/texteditor.cpp | 28 +++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 59ac0bba32c..12f6c04c5a7 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -7378,21 +7378,25 @@ void TextEditorWidget::insertFromMimeData(const QMimeData *source) void TextEditorWidget::dropEvent(QDropEvent *e) { const QMimeData *mime = e->mimeData(); + if (!canInsertFromMimeData(mime)) + return; + // Update multi text cursor before inserting data + MultiTextCursor cursor = multiTextCursor(); + cursor.beginEditBlock(); + const QTextCursor eventCursor = cursorForPosition(e->pos()); + if (e->dropAction() == Qt::MoveAction) + cursor.removeSelectedText(); + cursor.setCursors({eventCursor}); + setMultiTextCursor(cursor); + QMimeData *mimeOverwrite = nullptr; if (mime && (mime->hasText() || mime->hasHtml())) { - QMimeData *mimeOverwrite = duplicateMimeData(mime); + mimeOverwrite = duplicateMimeData(mime); mimeOverwrite->setProperty(dropProperty, true); - auto dropOverwrite = new QDropEvent(e->pos(), - e->possibleActions(), - mimeOverwrite, - e->mouseButtons(), - e->keyboardModifiers()); - QPlainTextEdit::dropEvent(dropOverwrite); - e->setAccepted(dropOverwrite->isAccepted()); - delete dropOverwrite; - delete mimeOverwrite; - } else { - QPlainTextEdit::dropEvent(e); + mime = mimeOverwrite; } + insertFromMimeData(mime); + delete mimeOverwrite; + cursor.endEditBlock(); } QMimeData *TextEditorWidget::duplicateMimeData(const QMimeData *source)