summaryrefslogtreecommitdiffstats
path: root/src/core/clipboard_qt.cpp
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2021-06-28 11:06:20 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2021-07-13 11:11:40 +0200
commit734b635cf9a9316ddd05dc9d9abc0a93746fc7f3 (patch)
tree49c6736d1c0c792326dd52b7541bea361c478609 /src/core/clipboard_qt.cpp
parentb848c87dbbc317ad7186418a64670b52777d1393 (diff)
Adaptations for 90-based
Change-Id: I8402b044d8e12d75e144a00984b856f3de10bffd Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu> (cherry picked from commit 1d988d971bc4270ba3d148e8e2c143bf8f625b6e)
Diffstat (limited to 'src/core/clipboard_qt.cpp')
-rw-r--r--src/core/clipboard_qt.cpp46
1 files changed, 43 insertions, 3 deletions
diff --git a/src/core/clipboard_qt.cpp b/src/core/clipboard_qt.cpp
index ca222813d..d5d1abcd5 100644
--- a/src/core/clipboard_qt.cpp
+++ b/src/core/clipboard_qt.cpp
@@ -52,6 +52,7 @@
#include "ui/base/clipboard/clipboard.h"
#include "ui/base/clipboard/clipboard_constants.h"
#include "ui/base/clipboard/clipboard_format_type.h"
+#include "ui/base/ui_base_features.h"
#include <QGuiApplication>
#include <QImage>
@@ -129,6 +130,7 @@ void ClipboardQt::WritePortableRepresentations(ui::ClipboardBuffer type, const O
std::move(data_src));
}
}
+ m_dataSrc[type] = std::move(data_src);
}
void ClipboardQt::WritePlatformRepresentations(ui::ClipboardBuffer buffer,
@@ -138,6 +140,7 @@ void ClipboardQt::WritePlatformRepresentations(ui::ClipboardBuffer buffer,
DCHECK(CalledOnValidThread());
DCHECK(IsSupportedClipboardBuffer(buffer));
DispatchPlatformRepresentations(std::move(platform_representations));
+ m_dataSrc[buffer] = std::move(data_src);
}
void ClipboardQt::WriteText(const char *text_data, size_t text_len)
@@ -203,7 +206,8 @@ bool ClipboardQt::IsFormatAvailable(const ui::ClipboardFormatType &format,
void ClipboardQt::Clear(ui::ClipboardBuffer type)
{
QGuiApplication::clipboard()->clear(type == ui::ClipboardBuffer::kCopyPaste ? QClipboard::Clipboard
- : QClipboard::Selection);
+ : QClipboard::Selection);
+ m_dataSrc[type].reset();
}
void ClipboardQt::ReadAvailableTypes(ui::ClipboardBuffer type,
@@ -362,6 +366,38 @@ uint64_t ClipboardQt::GetSequenceNumber(ui::ClipboardBuffer type) const
: QClipboard::Selection);
}
+const ui::DataTransferEndpoint *ClipboardQt::GetSource(ui::ClipboardBuffer buffer) const
+{
+ auto it = m_dataSrc.find(buffer);
+ return it == m_dataSrc.end() ? nullptr : it->second.get();
+}
+
+void ClipboardQt::ReadFilenames(ui::ClipboardBuffer buffer,
+ const ui::DataTransferEndpoint *data_dst,
+ std::vector<ui::FileInfo> *result) const
+{
+ const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData(
+ buffer == ui::ClipboardBuffer::kCopyPaste ? QClipboard::Clipboard : QClipboard::Selection);
+ if (!mimeData)
+ return;
+ const QList<QUrl> urls = mimeData->urls();
+ for (const QUrl &url : urls) {
+ if (url.isLocalFile()) {
+ base::FilePath filepath = toFilePath(url.toLocalFile());
+ result->push_back(ui::FileInfo(filepath, base::FilePath()));
+ }
+ }
+}
+
+void ClipboardQt::WriteFilenames(std::vector<ui::FileInfo> filenames)
+{
+ QList<QUrl> urls;
+ for (const ui::FileInfo &file : filenames) {
+ QUrl url = QUrl::fromLocalFile(QString::fromStdString(file.path.AsUTF8Unsafe()));
+ urls.append(url);
+ }
+ getUncommittedData()->setUrls(urls);
+}
#if defined(USE_OZONE)
bool ClipboardQt::IsSelectionBufferAvailable() const
@@ -372,7 +408,7 @@ bool ClipboardQt::IsSelectionBufferAvailable() const
std::vector<base::string16> ClipboardQt::ReadAvailablePlatformSpecificFormatNames(ui::ClipboardBuffer buffer, const ui::DataTransferEndpoint *data_dst) const
{
- // based on ClipboardAura
+ // based on ClipboardX11
std::vector<base::string16> types;
if (IsFormatAvailable(ui::ClipboardFormatType::GetPlainTextType(), buffer, data_dst))
types.push_back(base::UTF8ToUTF16(ui::ClipboardFormatType::GetPlainTextType().GetName()));
@@ -384,7 +420,11 @@ std::vector<base::string16> ClipboardQt::ReadAvailablePlatformSpecificFormatName
types.push_back(base::UTF8ToUTF16(ui::kMimeTypePNG));
if (IsFormatAvailable(ui::ClipboardFormatType::GetSvgType(), buffer, data_dst))
types.push_back(base::UTF8ToUTF16(ui::kMimeTypeSvg));
-
+ const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData(
+ buffer == ui::ClipboardBuffer::kCopyPaste ? QClipboard::Clipboard : QClipboard::Selection);
+ if (base::FeatureList::IsEnabled(features::kClipboardFilenames) && mimeData->hasUrls())
+ types.push_back(base::UTF8ToUTF16(ui::kMimeTypeURIList));
+ // ### Should we add non-standard mime-types?
return types;
}