summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vcl/qt5/Qt5Clipboard.cxx111
1 files changed, 70 insertions, 41 deletions
diff --git a/vcl/qt5/Qt5Clipboard.cxx b/vcl/qt5/Qt5Clipboard.cxx
index 6ed8b1086e4a..a9134506896f 100644
--- a/vcl/qt5/Qt5Clipboard.cxx
+++ b/vcl/qt5/Qt5Clipboard.cxx
@@ -184,63 +184,92 @@ void VclQt5Clipboard::setContents(
bool bHasHtml = false, bHasImage = false;
lcl_peekFormats(aFormats, bHasHtml, bHasImage);
- css::datatransfer::DataFlavor aFlavor;
- QClipboard* clipboard = QApplication::clipboard();
+ std::unique_ptr<QMimeData> pMimeData(new QMimeData);
- if (bHasImage)
- {
- //FIXME: other image formats?
- aFlavor.MimeType = "image/png";
- aFlavor.DataType = cppu::UnoType<sal_Int8>::get();
- }
- else if (bHasHtml)
+ // Add html data if present
+ if (bHasHtml)
{
+ css::datatransfer::DataFlavor aFlavor;
aFlavor.MimeType = "text/html";
- aFlavor.DataType = cppu::UnoType<sal_Int8>::get();
- }
- else
- {
- aFlavor.MimeType = "text/plain;charset=utf-16";
- aFlavor.DataType = cppu::UnoType<OUString>::get();
- }
+ aFlavor.DataType = cppu::UnoType<Sequence<sal_Int8>>::get();
- Any aValue;
- try
- {
- aValue = xTrans->getTransferData(aFlavor);
- }
- catch (...)
- {
- }
-
- if (aValue.getValueTypeClass() == TypeClass_STRING)
- {
- OUString aString;
- aValue >>= aString;
- clipboard->setText(toQString(aString));
- }
- else if (aValue.getValueType() == cppu::UnoType<Sequence<sal_Int8>>::get())
- {
- Sequence<sal_Int8> aData;
- aValue >>= aData;
+ Any aValue;
+ try
+ {
+ aValue = xTrans->getTransferData(aFlavor);
+ }
+ catch (...)
+ {
+ }
- if (bHasHtml)
+ if (aValue.getValueType() == cppu::UnoType<Sequence<sal_Int8>>::get())
{
+ Sequence<sal_Int8> aData;
+ aValue >>= aData;
+
OUString aHtmlAsString(reinterpret_cast<const char*>(aData.getConstArray()),
aData.getLength(), RTL_TEXTENCODING_UTF8);
- QMimeData* mimeData = new QMimeData;
- mimeData->setHtml(toQString(aHtmlAsString));
- clipboard->setMimeData(mimeData);
+ pMimeData->setHtml(toQString(aHtmlAsString));
}
- else if (bHasImage)
+ }
+
+ // Add image data if present
+ if (bHasImage)
+ {
+ css::datatransfer::DataFlavor aFlavor;
+ //FIXME: other image formats?
+ aFlavor.MimeType = "image/png";
+ aFlavor.DataType = cppu::UnoType<Sequence<sal_Int8>>::get();
+
+ Any aValue;
+ try
{
+ aValue = xTrans->getTransferData(aFlavor);
+ }
+ catch (...)
+ {
+ }
+
+ if (aValue.getValueType() == cppu::UnoType<Sequence<sal_Int8>>::get())
+ {
+ Sequence<sal_Int8> aData;
+ aValue >>= aData;
+
QImage image;
image.loadFromData(reinterpret_cast<const uchar*>(aData.getConstArray()),
aData.getLength());
- clipboard->setImage(image);
+
+ pMimeData->setImageData(image);
+ }
+ }
+
+ // Add text data
+ // TODO: consider checking if text of suitable type is present
+ {
+ css::datatransfer::DataFlavor aFlavor;
+ aFlavor.MimeType = "text/plain;charset=utf-16";
+ aFlavor.DataType = cppu::UnoType<OUString>::get();
+
+ Any aValue;
+ try
+ {
+ aValue = xTrans->getTransferData(aFlavor);
+ }
+ catch (...)
+ {
+ }
+
+ if (aValue.getValueTypeClass() == TypeClass_STRING)
+ {
+ OUString aString;
+ aValue >>= aString;
+ pMimeData->setText(toQString(aString));
}
}
+
+ QClipboard* clipboard = QApplication::clipboard();
+ clipboard->setMimeData(pMimeData.release());
}
aEv.Contents = getContents();