summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZeno Albisser <zeno.albisser@digia.com>2014-11-18 12:15:44 +0100
committerZeno Albisser <zeno.albisser@digia.com>2015-01-20 08:34:11 +0100
commit6fd32826caee5ec9c9845a3dabf2519bcceb99b6 (patch)
tree3aa7f35d080a9dad30ada91dccee211ff0315e32
parent390a6fda73369e447569efb1e8a7622460307d22 (diff)
Clipboard must now be subclassed.
Change-Id: I4c7a31746e0973c4ffb9c5e4cf2576b7ba03c37d Reviewed-by: Pierre Rossi <pierre.rossi@theqtcompany.com>
-rw-r--r--src/core/clipboard_qt.cpp226
-rw-r--r--src/core/clipboard_qt.h32
2 files changed, 145 insertions, 113 deletions
diff --git a/src/core/clipboard_qt.cpp b/src/core/clipboard_qt.cpp
index 870c6ae2d..15d8e18dd 100644
--- a/src/core/clipboard_qt.cpp
+++ b/src/core/clipboard_qt.cpp
@@ -63,8 +63,6 @@ void ClipboardChangeObserver::trackChange(QClipboard::Mode mode)
++sequenceNumber[mode];
}
-namespace ui {
-
namespace {
const char kMimeTypeBitmap[] = "image/bmp";
@@ -83,6 +81,76 @@ QMimeData *getUncommittedData()
} // namespace
+namespace ui {
+
+// Factory function
+Clipboard* Clipboard::Create() {
+ return new ClipboardQt;
+}
+
+Clipboard::FormatType Clipboard::GetFormatType(const std::string& format_string)
+{
+ return FormatType::Deserialize(format_string);
+}
+
+const Clipboard::FormatType& Clipboard::GetPlainTextFormatType()
+{
+ CR_DEFINE_STATIC_LOCAL(FormatType, type, (kMimeTypeText));
+ return type;
+}
+
+const Clipboard::FormatType& Clipboard::GetPlainTextWFormatType()
+{
+ return GetPlainTextFormatType();
+}
+
+const Clipboard::FormatType& Clipboard::GetUrlFormatType()
+{
+ return GetPlainTextFormatType();
+}
+
+const Clipboard::FormatType& Clipboard::GetUrlWFormatType()
+{
+ return GetPlainTextWFormatType();
+}
+
+const Clipboard::FormatType& Clipboard::GetHtmlFormatType()
+{
+ CR_DEFINE_STATIC_LOCAL(FormatType, type, (kMimeTypeHTML));
+ return type;
+}
+
+const Clipboard::FormatType& Clipboard::GetRtfFormatType()
+{
+ CR_DEFINE_STATIC_LOCAL(FormatType, type, (kMimeTypeRTF));
+ return type;
+}
+
+const Clipboard::FormatType& Clipboard::GetBitmapFormatType()
+{
+ CR_DEFINE_STATIC_LOCAL(FormatType, type, (kMimeTypeBitmap));
+ return type;
+}
+
+const Clipboard::FormatType& Clipboard::GetWebKitSmartPasteFormatType()
+{
+ CR_DEFINE_STATIC_LOCAL(FormatType, type, (kMimeTypeWebkitSmartPaste));
+ return type;
+}
+
+const Clipboard::FormatType& Clipboard::GetWebCustomDataFormatType()
+{
+ CR_DEFINE_STATIC_LOCAL(FormatType, type, (kMimeTypeWebCustomDataCopy));
+ return type;
+}
+
+const Clipboard::FormatType& Clipboard::GetPepperCustomDataFormatType()
+{
+ CR_DEFINE_STATIC_LOCAL(FormatType, type, (kMimeTypePepperCustomData));
+ return type;
+}
+
+
Clipboard::FormatType::FormatType()
{
}
@@ -111,15 +179,16 @@ bool Clipboard::FormatType::Equals(const FormatType& other) const
return data_ == other.data_;
}
-Clipboard::Clipboard()
+#if defined(OS_WIN) || defined(USE_AURA)
+bool Clipboard::FormatType::operator<(const FormatType& other) const
{
+ return data_.compare(other.data_) < 0;
}
+#endif
-Clipboard::~Clipboard()
-{
-}
+} // namespace ui
-void Clipboard::WriteObjects(ClipboardType type, const ObjectMap& objects)
+void ClipboardQt::WriteObjects(ui::ClipboardType type, const ObjectMap& objects)
{
DCHECK(CalledOnValidThread());
DCHECK(IsSupportedClipboardType(type));
@@ -129,45 +198,45 @@ void Clipboard::WriteObjects(ClipboardType type, const ObjectMap& objects)
// Commit the accumulated data.
if (uncommittedData)
- QGuiApplication::clipboard()->setMimeData(uncommittedData.take(), type == CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
+ QGuiApplication::clipboard()->setMimeData(uncommittedData.take(), type == ui::CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
- if (type == CLIPBOARD_TYPE_COPY_PASTE) {
+ if (type == ui::CLIPBOARD_TYPE_COPY_PASTE) {
ObjectMap::const_iterator text_iter = objects.find(CBF_TEXT);
if (text_iter != objects.end()) {
// Copy text and SourceTag to the selection clipboard.
ObjectMap::const_iterator next_iter = text_iter;
- WriteObjects(CLIPBOARD_TYPE_SELECTION, ObjectMap(text_iter, ++next_iter));
+ WriteObjects(ui::CLIPBOARD_TYPE_SELECTION, ObjectMap(text_iter, ++next_iter));
}
}
}
-void Clipboard::WriteText(const char* text_data, size_t text_len)
+void ClipboardQt::WriteText(const char* text_data, size_t text_len)
{
getUncommittedData()->setText(QString::fromUtf8(text_data, text_len));
}
-void Clipboard::WriteHTML(const char* markup_data, size_t markup_len, const char* url_data, size_t url_len)
+void ClipboardQt::WriteHTML(const char* markup_data, size_t markup_len, const char* url_data, size_t url_len)
{
getUncommittedData()->setHtml(QString::fromUtf8(markup_data, markup_len));
}
-void Clipboard::WriteRTF(const char* rtf_data, size_t data_len)
+void ClipboardQt::WriteRTF(const char* rtf_data, size_t data_len)
{
getUncommittedData()->setData(QString::fromLatin1(kMimeTypeRTF), QByteArray(rtf_data, data_len));
}
-void Clipboard::WriteWebSmartPaste()
+void ClipboardQt::WriteWebSmartPaste()
{
getUncommittedData()->setData(QString::fromLatin1(kMimeTypeWebkitSmartPaste), QByteArray());
}
-void Clipboard::WriteBitmap(const SkBitmap& bitmap)
+void ClipboardQt::WriteBitmap(const SkBitmap& bitmap)
{
QImage image(reinterpret_cast<const uchar *>(bitmap.getPixels()), bitmap.width(), bitmap.height(), QImage::Format_ARGB32);
getUncommittedData()->setImageData(image.copy());
}
-void Clipboard::WriteBookmark(const char* title_data, size_t title_len, const char* url_data, size_t url_len)
+void ClipboardQt::WriteBookmark(const char* title_data, size_t title_len, const char* url_data, size_t url_len)
{
// FIXME: Untested, seems to be used only for drag-n-drop.
// Write as a mozilla url (UTF16: URL, newline, title).
@@ -181,23 +250,23 @@ void Clipboard::WriteBookmark(const char* title_data, size_t title_len, const ch
getUncommittedData()->setData(QString::fromLatin1(kMimeTypeMozillaURL), data);
}
-void Clipboard::WriteData(const FormatType& format, const char* data_data, size_t data_len)
+void ClipboardQt::WriteData(const FormatType& format, const char* data_data, size_t data_len)
{
- getUncommittedData()->setData(QString::fromStdString(format.data_), QByteArray(data_data, data_len));
+ getUncommittedData()->setData(QString::fromStdString(format.ToString()), QByteArray(data_data, data_len));
}
-bool Clipboard::IsFormatAvailable(const Clipboard::FormatType& format, ClipboardType type) const
+bool ClipboardQt::IsFormatAvailable(const ui::Clipboard::FormatType& format, ui::ClipboardType type) const
{
- const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData(type == CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
- return mimeData->hasFormat(QString::fromStdString(format.data_));
+ const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData(type == ui::CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
+ return mimeData->hasFormat(QString::fromStdString(format.ToString()));
}
-void Clipboard::Clear(ClipboardType type)
+void ClipboardQt::Clear(ui::ClipboardType type)
{
- QGuiApplication::clipboard()->clear(type == CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
+ QGuiApplication::clipboard()->clear(type == ui::CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
}
-void Clipboard::ReadAvailableTypes(ui::ClipboardType type, std::vector<base::string16>* types, bool* contains_filenames) const
+void ClipboardQt::ReadAvailableTypes(ui::ClipboardType type, std::vector<base::string16>* types, bool* contains_filenames) const
{
if (!types || !contains_filenames) {
NOTREACHED();
@@ -205,29 +274,29 @@ void Clipboard::ReadAvailableTypes(ui::ClipboardType type, std::vector<base::str
}
types->clear();
- const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData(type == CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
+ const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData(type == ui::CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
Q_FOREACH (const QString &mimeType, mimeData->formats())
types->push_back(toString16(mimeType));
*contains_filenames = false;
const QByteArray customData = mimeData->data(QString::fromLatin1(kMimeTypeWebCustomDataCopy));
- ReadCustomDataTypes(customData.constData(), customData.size(), types);
+ ui::ReadCustomDataTypes(customData.constData(), customData.size(), types);
}
-void Clipboard::ReadText(ClipboardType type, base::string16* result) const
+void ClipboardQt::ReadText(ui::ClipboardType type, base::string16* result) const
{
- const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData(type == CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
+ const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData(type == ui::CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
*result = toString16(mimeData->text());
}
-void Clipboard::ReadAsciiText(ClipboardType type, std::string* result) const
+void ClipboardQt::ReadAsciiText(ui::ClipboardType type, std::string* result) const
{
- const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData(type == CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
+ const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData(type == ui::CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
*result = mimeData->text().toStdString();
}
-void Clipboard::ReadHTML(ClipboardType type, base::string16* markup, std::string* src_url, uint32* fragment_start, uint32* fragment_end) const
+void ClipboardQt::ReadHTML(ui::ClipboardType type, base::string16* markup, std::string* src_url, uint32* fragment_start, uint32* fragment_end) const
{
markup->clear();
if (src_url)
@@ -235,23 +304,23 @@ void Clipboard::ReadHTML(ClipboardType type, base::string16* markup, std::string
*fragment_start = 0;
*fragment_end = 0;
- const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData(type == CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
+ const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData(type == ui::CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
*markup = toString16(mimeData->html());
*fragment_end = static_cast<uint32>(markup->length());
}
-void Clipboard::ReadRTF(ClipboardType type, std::string* result) const
+void ClipboardQt::ReadRTF(ui::ClipboardType type, std::string* result) const
{
- const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData(type == CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
+ const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData(type == ui::CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
const QByteArray byteArray = mimeData->data(QString::fromLatin1(kMimeTypeRTF));
*result = std::string(byteArray.constData(), byteArray.length());
}
-SkBitmap Clipboard::ReadImage(ClipboardType type) const
+SkBitmap ClipboardQt::ReadImage(ui::ClipboardType type) const
{
// FIXME: Untested, pasting image data seems to only be supported through
// FileReader.readAsDataURL in JavaScript and this isn't working down the pipe for some reason.
- const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData(type == CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
+ const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData(type == ui::CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
QImage image = qvariant_cast<QImage>(mimeData->imageData());
Q_ASSERT(image.format() == QImage::Format_ARGB32);
@@ -265,97 +334,28 @@ SkBitmap Clipboard::ReadImage(ClipboardType type) const
return copy;
}
-void Clipboard::ReadCustomData(ClipboardType clipboard_type, const base::string16& type, base::string16* result) const
+void ClipboardQt::ReadCustomData(ui::ClipboardType clipboard_type, const base::string16& type, base::string16* result) const
{
- const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData(clipboard_type == CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
+ const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData(clipboard_type == ui::CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
const QByteArray customData = mimeData->data(QString::fromLatin1(kMimeTypeWebCustomDataCopy));
- ReadCustomDataForType(customData.constData(), customData.size(), type, result);
+ ui::ReadCustomDataForType(customData.constData(), customData.size(), type, result);
}
-void Clipboard::ReadBookmark(base::string16* title, std::string* url) const
+void ClipboardQt::ReadBookmark(base::string16* title, std::string* url) const
{
NOTIMPLEMENTED();
}
-void Clipboard::ReadData(const FormatType& format, std::string* result) const
+void ClipboardQt::ReadData(const FormatType& format, std::string* result) const
{
const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData();
- const QByteArray byteArray = mimeData->data(QString::fromStdString(format.data_));
+ const QByteArray byteArray = mimeData->data(QString::fromStdString(format.ToString()));
*result = std::string(byteArray.constData(), byteArray.length());
}
-uint64 Clipboard::GetSequenceNumber(ClipboardType type)
-{
- return clipboardChangeObserver()->getSequenceNumber(type == CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
-}
-
-Clipboard::FormatType Clipboard::GetFormatType(const std::string& format_string)
-{
- return FormatType::Deserialize(format_string);
-}
-
-const Clipboard::FormatType& Clipboard::GetPlainTextFormatType()
-{
- CR_DEFINE_STATIC_LOCAL(FormatType, type, (kMimeTypeText));
- return type;
-}
-
-const Clipboard::FormatType& Clipboard::GetPlainTextWFormatType()
-{
- return GetPlainTextFormatType();
-}
-
-const Clipboard::FormatType& Clipboard::GetUrlFormatType()
-{
- return GetPlainTextFormatType();
-}
-
-const Clipboard::FormatType& Clipboard::GetUrlWFormatType()
+uint64 ClipboardQt::GetSequenceNumber(ui::ClipboardType type)
{
- return GetPlainTextWFormatType();
+ return clipboardChangeObserver()->getSequenceNumber(type == ui::CLIPBOARD_TYPE_COPY_PASTE ? QClipboard::Clipboard : QClipboard::Selection);
}
-const Clipboard::FormatType& Clipboard::GetHtmlFormatType()
-{
- CR_DEFINE_STATIC_LOCAL(FormatType, type, (kMimeTypeHTML));
- return type;
-}
-
-const Clipboard::FormatType& Clipboard::GetRtfFormatType()
-{
- CR_DEFINE_STATIC_LOCAL(FormatType, type, (kMimeTypeRTF));
- return type;
-}
-
-const Clipboard::FormatType& Clipboard::GetBitmapFormatType()
-{
- CR_DEFINE_STATIC_LOCAL(FormatType, type, (kMimeTypeBitmap));
- return type;
-}
-
-const Clipboard::FormatType& Clipboard::GetWebKitSmartPasteFormatType()
-{
- CR_DEFINE_STATIC_LOCAL(FormatType, type, (kMimeTypeWebkitSmartPaste));
- return type;
-}
-
-const Clipboard::FormatType& Clipboard::GetWebCustomDataFormatType()
-{
- CR_DEFINE_STATIC_LOCAL(FormatType, type, (kMimeTypeWebCustomDataCopy));
- return type;
-}
-
-const Clipboard::FormatType& Clipboard::GetPepperCustomDataFormatType()
-{
- CR_DEFINE_STATIC_LOCAL(FormatType, type, (kMimeTypePepperCustomData));
- return type;
-}
-
-#if defined(OS_WIN) || defined(USE_AURA)
-bool Clipboard::FormatType::operator<(const FormatType& other) const
-{
- return data_.compare(other.data_) < 0;
-}
-#endif
-} // namespace ui
diff --git a/src/core/clipboard_qt.h b/src/core/clipboard_qt.h
index 87f2c2c2a..02db41c25 100644
--- a/src/core/clipboard_qt.h
+++ b/src/core/clipboard_qt.h
@@ -37,6 +37,8 @@
#ifndef CLIPBOARD_QT_H
#define CLIPBOARD_QT_H
+#include "ui/base/clipboard/clipboard.h"
+
#include <QClipboard>
#include <QMap>
#include <QObject>
@@ -56,4 +58,34 @@ private:
QMap<QClipboard::Mode, quint64> sequenceNumber;
};
+class ClipboardQt : public ui::Clipboard {
+public:
+ virtual uint64 GetSequenceNumber(ui::ClipboardType type) Q_DECL_OVERRIDE;
+ virtual bool IsFormatAvailable(const FormatType& format, ui::ClipboardType type) const Q_DECL_OVERRIDE;
+ virtual void Clear(ui::ClipboardType type) Q_DECL_OVERRIDE;
+ virtual void ReadAvailableTypes(ui::ClipboardType type, std::vector<base::string16>* types, bool* contains_filenames) const Q_DECL_OVERRIDE;
+ virtual void ReadText(ui::ClipboardType type, base::string16* result) const Q_DECL_OVERRIDE;
+ virtual void ReadAsciiText(ui::ClipboardType type, std::string* result) const Q_DECL_OVERRIDE;
+ virtual void ReadHTML(ui::ClipboardType type,
+ base::string16* markup,
+ std::string* src_url,
+ uint32* fragment_start,
+ uint32* fragment_end) const Q_DECL_OVERRIDE;
+ virtual void ReadRTF(ui::ClipboardType type, std::string* result) const Q_DECL_OVERRIDE;
+ virtual SkBitmap ReadImage(ui::ClipboardType type) const Q_DECL_OVERRIDE;
+ virtual void ReadCustomData(ui::ClipboardType clipboard_type, const base::string16& type, base::string16* result) const Q_DECL_OVERRIDE;
+ virtual void ReadBookmark(base::string16* title, std::string* url) const Q_DECL_OVERRIDE;
+ virtual void ReadData(const FormatType& format, std::string* result) const Q_DECL_OVERRIDE;
+
+protected:
+ virtual void WriteObjects(ui::ClipboardType type, const ObjectMap& objects) Q_DECL_OVERRIDE;
+ virtual void WriteText(const char* text_data, size_t text_len) Q_DECL_OVERRIDE;
+ virtual void WriteHTML(const char* markup_data, size_t markup_len, const char* url_data, size_t url_len) Q_DECL_OVERRIDE;
+ virtual void WriteRTF(const char* rtf_data, size_t data_len) Q_DECL_OVERRIDE;
+ virtual void WriteBookmark(const char* title_data, size_t title_len, const char* url_data, size_t url_len) Q_DECL_OVERRIDE;
+ virtual void WriteWebSmartPaste() Q_DECL_OVERRIDE;
+ virtual void WriteBitmap(const SkBitmap& bitmap) Q_DECL_OVERRIDE;
+ virtual void WriteData(const FormatType& format, const char* data_data, size_t data_len) Q_DECL_OVERRIDE;
+};
+
#endif