| Index: ui/base/clipboard/clipboard_gtk.cc
|
| diff --git a/ui/base/clipboard/clipboard_gtk.cc b/ui/base/clipboard/clipboard_gtk.cc
|
| index 7473f31097289eb0b7bc716711c256392a2fd88f..1f705907b83f595120dc5e83e704a616186b85be 100644
|
| --- a/ui/base/clipboard/clipboard_gtk.cc
|
| +++ b/ui/base/clipboard/clipboard_gtk.cc
|
| @@ -106,6 +106,7 @@ GdkFilterReturn SelectionChangeObserver::OnXEvent(GdkXEvent* xevent,
|
| return GDK_FILTER_CONTINUE;
|
| }
|
|
|
| +const char kSourceTagType[] = "org.chromium.source-tag";
|
| const char kMimeTypeBitmap[] = "image/bmp";
|
| const char kMimeTypeMozillaURL[] = "text/x-moz-url";
|
| const char kMimeTypePepperCustomData[] = "chromium/x-pepper-custom-data";
|
| @@ -217,7 +218,9 @@ Clipboard::~Clipboard() {
|
| gtk_clipboard_store(clipboard_);
|
| }
|
|
|
| -void Clipboard::WriteObjects(Buffer buffer, const ObjectMap& objects) {
|
| +void Clipboard::WriteObjectsImpl(Buffer buffer,
|
| + const ObjectMap& objects,
|
| + SourceTag tag) {
|
| DCHECK(CalledOnValidThread());
|
| clipboard_data_ = new TargetMap();
|
|
|
| @@ -225,6 +228,7 @@ void Clipboard::WriteObjects(Buffer buffer, const ObjectMap& objects) {
|
| iter != objects.end(); ++iter) {
|
| DispatchObject(static_cast<ObjectType>(iter->first), iter->second);
|
| }
|
| + WriteSourceTag(tag);
|
|
|
| SetGtkClipboard(buffer);
|
| }
|
| @@ -350,6 +354,13 @@ void Clipboard::WriteData(const FormatType& format,
|
| InsertMapping(GdkAtomToString(format.ToGdkAtom()).c_str(), data, data_len);
|
| }
|
|
|
| +void Clipboard::WriteSourceTag(SourceTag tag) {
|
| + if (tag != SourceTag()) {
|
| + ObjectMapParam binary = SourceTag2Binary(tag);
|
| + WriteData(GetSourceTagFormatType(), &binary[0], binary.size());
|
| + }
|
| +}
|
| +
|
| // We do not use gtk_clipboard_wait_is_target_available because of
|
| // a bug with the gtk clipboard. It caches the available targets
|
| // and does not always refresh the cache when it is appropriate.
|
| @@ -587,6 +598,12 @@ void Clipboard::ReadData(const FormatType& format, std::string* result) const {
|
| gtk_selection_data_free(data);
|
| }
|
|
|
| +Clipboard::SourceTag Clipboard::ReadSourceTag() const {
|
| + std::string result;
|
| + ReadData(GetSourceTagFormatType(), &result);
|
| + return Binary2SourceTag(result);
|
| +}
|
| +
|
| uint64 Clipboard::GetSequenceNumber(Buffer buffer) {
|
| DCHECK(CalledOnValidThread());
|
| if (buffer == BUFFER_STANDARD)
|
| @@ -659,6 +676,12 @@ const Clipboard::FormatType& Clipboard::GetPepperCustomDataFormatType() {
|
| return type;
|
| }
|
|
|
| +// static
|
| +const Clipboard::FormatType& Clipboard::GetSourceTagFormatType() {
|
| + CR_DEFINE_STATIC_LOCAL(FormatType, type, (kSourceTagType));
|
| + return type;
|
| +}
|
| +
|
| void Clipboard::InsertMapping(const char* key,
|
| char* data,
|
| size_t data_len) {
|
|
|