32QMimeData *QHaikuClipboard::mimeData(QClipboard::Mode mode)
34 if (mode != QClipboard::Clipboard)
38 return m_userMimeData;
40 if (!be_clipboard->Lock())
43 if (!m_systemMimeData)
44 m_systemMimeData =
new QMimeData();
46 m_systemMimeData->clear();
48 const BMessage *clipboard = be_clipboard->Data();
54 for (
int i = 0; clipboard->GetInfo(B_MIME_TYPE, i, &name, &type, &count) == B_OK; i++) {
55 const void *data =
nullptr;
58 const status_t status = clipboard->FindData(name, B_MIME_TYPE, &data, &dataLen);
59 if (dataLen && (status == B_OK)) {
60 const QLatin1StringView format(name);
61 if (format ==
"text/plain"_L1) {
62 m_systemMimeData->setText(QString::fromLocal8Bit(
reinterpret_cast<
const char*>(data), dataLen));
63 }
else if (format ==
"text/html"_L1) {
64 m_systemMimeData->setHtml(QString::fromLocal8Bit(
reinterpret_cast<
const char*>(data), dataLen));
66 m_systemMimeData->setData(format, QByteArray(
reinterpret_cast<
const char*>(data), dataLen));
72 be_clipboard->Unlock();
74 return m_systemMimeData;
77void QHaikuClipboard::setMimeData(QMimeData *mimeData, QClipboard::Mode mode)
79 if (mode != QClipboard::Clipboard)
83 if (m_systemMimeData == mimeData)
86 if (m_userMimeData == mimeData)
90 if (!be_clipboard->Lock())
93 be_clipboard->Clear();
95 BMessage *clipboard = be_clipboard->Data();
97 const QStringList formats = mimeData->formats();
98 Q_FOREACH (
const QString &format, formats) {
99 const QByteArray data = mimeData->data(format).data();
100 clipboard->AddData(format.toUtf8(), B_MIME_TYPE, data, data.count());
105 if (be_clipboard->Commit() != B_OK)
106 qWarning(
"Unable to store mime data on clipboard");
108 be_clipboard->Unlock();
110 m_userMimeData = mimeData;
112 emitChanged(QClipboard::Clipboard);