Kaydet (Commit) ff1bd0f1 authored tarafından Katarina Behrens's avatar Katarina Behrens

HTML and image copy into qt5 clipboard

Change-Id: I1c26db35b801694fcc3935baab842027eac1e561
Reviewed-on: https://gerrit.libreoffice.org/61611
Tested-by: Jenkins
Reviewed-by: 's avatarKatarina Behrens <Katarina.Behrens@cib.de>
üst a40880ca
...@@ -20,6 +20,22 @@ ...@@ -20,6 +20,22 @@
#include <Qt5Clipboard.hxx> #include <Qt5Clipboard.hxx>
#include <Qt5Tools.hxx> #include <Qt5Tools.hxx>
namespace
{
void lcl_peekFormats(const css::uno::Sequence<css::datatransfer::DataFlavor>& rFormats,
bool& bHasHtml, bool& bHasImage)
{
for (int i = 0; i < rFormats.getLength(); ++i)
{
const css::datatransfer::DataFlavor& rFlavor = rFormats[i];
if (rFlavor.MimeType == "text/html")
bHasHtml = true;
else if (rFlavor.MimeType.startsWith("image"))
bHasImage = true;
}
}
}
std::vector<css::datatransfer::DataFlavor> Qt5Transferable::getTransferDataFlavorsAsVector() std::vector<css::datatransfer::DataFlavor> Qt5Transferable::getTransferDataFlavorsAsVector()
{ {
...@@ -163,9 +179,30 @@ void VclQt5Clipboard::setContents( ...@@ -163,9 +179,30 @@ void VclQt5Clipboard::setContents(
if (m_aContents.is()) if (m_aContents.is())
{ {
css::uno::Sequence<css::datatransfer::DataFlavor> aFormats
= xTrans->getTransferDataFlavors();
bool bHasHtml = false, bHasImage = false;
lcl_peekFormats(aFormats, bHasHtml, bHasImage);
css::datatransfer::DataFlavor aFlavor; css::datatransfer::DataFlavor aFlavor;
aFlavor.MimeType = "text/plain;charset=utf-16"; QClipboard* clipboard = QApplication::clipboard();
aFlavor.DataType = cppu::UnoType<OUString>::get();
if (bHasImage)
{
//FIXME: other image formats?
aFlavor.MimeType = "image/png";
aFlavor.DataType = cppu::UnoType<sal_Int8>::get();
}
else if (bHasHtml)
{
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();
}
Any aValue; Any aValue;
try try
...@@ -176,11 +213,34 @@ void VclQt5Clipboard::setContents( ...@@ -176,11 +213,34 @@ void VclQt5Clipboard::setContents(
{ {
} }
OUString aString; if (aValue.getValueTypeClass() == TypeClass_STRING)
aValue >>= aString; {
OUString aString;
QClipboard* clipboard = QApplication::clipboard(); aValue >>= aString;
clipboard->setText(toQString(aString)); clipboard->setText(toQString(aString));
}
else if (aValue.getValueType() == cppu::UnoType<Sequence<sal_Int8>>::get())
{
Sequence<sal_Int8> aData;
aValue >>= aData;
if (bHasHtml)
{
OUString aHtmlAsString(reinterpret_cast<const char*>(aData.getConstArray()),
aData.getLength(), RTL_TEXTENCODING_UTF8);
QMimeData* mimeData = new QMimeData;
mimeData->setHtml(toQString(aHtmlAsString));
clipboard->setMimeData(mimeData);
}
else if (bHasImage)
{
QImage image;
image.loadFromData(reinterpret_cast<const uchar*>(aData.getConstArray()),
aData.getLength());
clipboard->setImage(image);
}
}
} }
aEv.Contents = getContents(); 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