Kaydet (Commit) 7e01a02b authored tarafından Aleksei Nikiforov's avatar Aleksei Nikiforov Kaydeden (comit) Thorsten Behrens

tdf#120836 KDE5: allow adding multiple mime types to clipboard

Also correct processing "text/html" and "image/png" mime types
to fix slow select in Calc:
if both "text/html" and "image/png" mime types were present,
"image/png" data was requested, but it was processed as if it was
"text/html" data.

Change-Id: Ie192fff06cd9de28f466547dac32343620fe2730
Reviewed-on: https://gerrit.libreoffice.org/66576
Tested-by: Jenkins
Reviewed-by: 's avatarThorsten Behrens <Thorsten.Behrens@CIB.de>
üst ae34f471
......@@ -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();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment