Editor: Fix drop position of drag and drop operation

Change-Id: I6649b0506e06bccb681c66afc91ad85f763206c4
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2021-11-03 12:22:22 +01:00
parent a7c8c97a68
commit e96c664fce

View File

@@ -7378,21 +7378,25 @@ void TextEditorWidget::insertFromMimeData(const QMimeData *source)
void TextEditorWidget::dropEvent(QDropEvent *e) void TextEditorWidget::dropEvent(QDropEvent *e)
{ {
const QMimeData *mime = e->mimeData(); 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())) { if (mime && (mime->hasText() || mime->hasHtml())) {
QMimeData *mimeOverwrite = duplicateMimeData(mime); mimeOverwrite = duplicateMimeData(mime);
mimeOverwrite->setProperty(dropProperty, true); mimeOverwrite->setProperty(dropProperty, true);
auto dropOverwrite = new QDropEvent(e->pos(), mime = mimeOverwrite;
e->possibleActions(),
mimeOverwrite,
e->mouseButtons(),
e->keyboardModifiers());
QPlainTextEdit::dropEvent(dropOverwrite);
e->setAccepted(dropOverwrite->isAccepted());
delete dropOverwrite;
delete mimeOverwrite;
} else {
QPlainTextEdit::dropEvent(e);
} }
insertFromMimeData(mime);
delete mimeOverwrite;
cursor.endEditBlock();
} }
QMimeData *TextEditorWidget::duplicateMimeData(const QMimeData *source) QMimeData *TextEditorWidget::duplicateMimeData(const QMimeData *source)