diff --git a/src/libs/utils/markdownbrowser.cpp b/src/libs/utils/markdownbrowser.cpp index 1bcc8cc5e8d..71481c72a2c 100644 --- a/src/libs/utils/markdownbrowser.cpp +++ b/src/libs/utils/markdownbrowser.cpp @@ -29,6 +29,8 @@ #include #include #include +#include +#include #include namespace Utils { @@ -862,6 +864,31 @@ void MarkdownBrowser::mousePressEvent(QMouseEvent *event) QTextBrowser::mousePressEvent(event); } +QMimeData *MarkdownBrowser::createMimeDataFromSelection() const +{ + // Basically a copy of QTextEditMimeData::setup, just replacing the object markers. + QMimeData *mimeData = new QMimeData; + QTextDocumentFragment fragment(textCursor()); + + static const auto removeObjectChar = [](QString &&text) { + return text.replace(QChar::ObjectReplacementCharacter, ""); + }; + + mimeData->setData("text/html", removeObjectChar(fragment.toHtml()).toUtf8()); + mimeData->setData("text/markdown", removeObjectChar(fragment.toMarkdown()).toUtf8()); + { + QBuffer buffer; + QTextDocumentWriter writer(&buffer, "ODF"); + if (writer.write(fragment)) { + buffer.close(); + mimeData->setData("application/vnd.oasis.opendocument.text", buffer.data()); + } + } + mimeData->setText(removeObjectChar(fragment.toPlainText())); + + return mimeData; +} + } // namespace Utils #include "markdownbrowser.moc" diff --git a/src/libs/utils/markdownbrowser.h b/src/libs/utils/markdownbrowser.h index 20a9df59535..3520566dc0f 100644 --- a/src/libs/utils/markdownbrowser.h +++ b/src/libs/utils/markdownbrowser.h @@ -42,6 +42,8 @@ protected: void changeEvent(QEvent *event) override; void mousePressEvent(QMouseEvent *event) override; + QMimeData *createMimeDataFromSelection() const override; + private: void handleAnchorClicked(const QUrl &link); void postProcessDocument(bool firstTime);