Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(290)

Side by Side Diff: ui/base/dragdrop/os_exchange_data_provider_mac.mm

Issue 1964283002: MacViews: Implemented Drag & Drop (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/base/dragdrop/os_exchange_data_provider_mac.h" 5 #include "ui/base/dragdrop/os_exchange_data_provider_mac.h"
6 6
7 #import <Cocoa/Cocoa.h> 7 #import <Cocoa/Cocoa.h>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/pickle.h" 10 #include "base/pickle.h"
11 #include "base/strings/sys_string_conversions.h" 11 #include "base/strings/sys_string_conversions.h"
12 #include "base/strings/utf_string_conversions.h" 12 #include "base/strings/utf_string_conversions.h"
13 #import "third_party/mozilla/NSPasteboard+Utils.h" 13 #import "third_party/mozilla/NSPasteboard+Utils.h"
14 #import "ui/base/clipboard/clipboard_util_mac.h" 14 #import "ui/base/clipboard/clipboard_util_mac.h"
15 #import "ui/base/dragdrop/cocoa_dnd_util.h"
15 #include "url/gurl.h" 16 #include "url/gurl.h"
16 17
17 namespace ui { 18 namespace ui {
18 19
19 OSExchangeDataProviderMac::OSExchangeDataProviderMac() 20 OSExchangeDataProviderMac::OSExchangeDataProviderMac()
20 : pasteboard_(new ui::UniquePasteboard) {} 21 : pasteboard_(new ui::UniquePasteboard) {}
21 22
22 OSExchangeDataProviderMac::OSExchangeDataProviderMac( 23 OSExchangeDataProviderMac::OSExchangeDataProviderMac(
23 scoped_refptr<ui::UniquePasteboard> pb) 24 scoped_refptr<ui::UniquePasteboard> pb)
24 : pasteboard_(pb) {} 25 : pasteboard_(pb) {}
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 NOTIMPLEMENTED(); 63 NOTIMPLEMENTED();
63 } 64 }
64 65
65 void OSExchangeDataProviderMac::SetPickledData( 66 void OSExchangeDataProviderMac::SetPickledData(
66 const Clipboard::FormatType& format, 67 const Clipboard::FormatType& format,
67 const base::Pickle& data) { 68 const base::Pickle& data) {
68 NSData* ns_data = [NSData dataWithBytes:data.data() length:data.size()]; 69 NSData* ns_data = [NSData dataWithBytes:data.data() length:data.size()];
69 [pasteboard_->get() setData:ns_data forType:format.ToNSString()]; 70 [pasteboard_->get() setData:ns_data forType:format.ToNSString()];
70 } 71 }
71 72
73 void OSExchangeDataProviderMac::SetDragImage(const gfx::ImageSkia& image) {
74 drag_image_ = image;
75 }
76
77 void OSExchangeDataProviderMac::SetNativeEvent(const base::NativeEvent& event) {
78 event_ = event;
79 }
80
72 bool OSExchangeDataProviderMac::GetString(base::string16* data) const { 81 bool OSExchangeDataProviderMac::GetString(base::string16* data) const {
73 DCHECK(data); 82 DCHECK(data);
74 NSString* item = [pasteboard_->get() stringForType:NSPasteboardTypeString]; 83 NSString* item = [pasteboard_->get() stringForType:NSPasteboardTypeString];
75 if (item) { 84 if (item) {
76 *data = base::SysNSStringToUTF16(item); 85 *data = base::SysNSStringToUTF16(item);
77 return true; 86 return true;
78 } 87 }
79
80 // There was no NSString, check for an NSURL. 88 // There was no NSString, check for an NSURL.
81 GURL url; 89 GURL url;
82 base::string16 title; 90 base::string16 title;
83 bool result = 91 bool result =
84 GetURLAndTitle(OSExchangeData::DO_NOT_CONVERT_FILENAMES, &url, &title); 92 GetURLAndTitle(OSExchangeData::DO_NOT_CONVERT_FILENAMES, &url, &title);
85 if (result) 93 if (result)
86 *data = base::UTF8ToUTF16(url.spec()); 94 *data = base::UTF8ToUTF16(url.spec());
87 95
88 return result; 96 return result;
89 } 97 }
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 DCHECK(data); 149 DCHECK(data);
142 NSData* ns_data = [pasteboard_->get() dataForType:format.ToNSString()]; 150 NSData* ns_data = [pasteboard_->get() dataForType:format.ToNSString()];
143 if (!ns_data) 151 if (!ns_data)
144 return false; 152 return false;
145 153
146 *data = 154 *data =
147 base::Pickle(static_cast<const char*>([ns_data bytes]), [ns_data length]); 155 base::Pickle(static_cast<const char*>([ns_data bytes]), [ns_data length]);
148 return true; 156 return true;
149 } 157 }
150 158
159 const gfx::ImageSkia& OSExchangeDataProviderMac::GetDragImage() const {
160 return drag_image_;
161 }
162
163 const base::NativeEvent& OSExchangeDataProviderMac::GetNativeEvent() const {
164 return event_;
165 }
166
167 NSData* OSExchangeDataProviderMac::GetNSDataForType(NSString* type) const {
168 return [pasteboard_->get() dataForType:type];
169 }
170
151 bool OSExchangeDataProviderMac::HasString() const { 171 bool OSExchangeDataProviderMac::HasString() const {
152 base::string16 string; 172 base::string16 string;
153 return GetString(&string); 173 return GetString(&string);
154 } 174 }
155 175
156 bool OSExchangeDataProviderMac::HasURL( 176 bool OSExchangeDataProviderMac::HasURL(
157 OSExchangeData::FilenameToURLPolicy policy) const { 177 OSExchangeData::FilenameToURLPolicy policy) const {
158 GURL url; 178 GURL url;
159 base::string16 title; 179 base::string16 title;
160 return GetURLAndTitle(policy, &url, &title); 180 return GetURLAndTitle(policy, &url, &title);
161 } 181 }
162 182
163 bool OSExchangeDataProviderMac::HasFile() const { 183 bool OSExchangeDataProviderMac::HasFile() const {
164 return [[pasteboard_->get() types] containsObject:NSFilenamesPboardType]; 184 return [[pasteboard_->get() types] containsObject:NSFilenamesPboardType];
165 } 185 }
166 186
167 bool OSExchangeDataProviderMac::HasCustomFormat( 187 bool OSExchangeDataProviderMac::HasCustomFormat(
168 const Clipboard::FormatType& format) const { 188 const Clipboard::FormatType& format) const {
169 return [[pasteboard_->get() types] containsObject:format.ToNSString()]; 189 return [[pasteboard_->get() types] containsObject:format.ToNSString()];
170 } 190 }
171 191
192 NSArray* OSExchangeDataProviderMac::GetPasteboardTypes() const {
193 return [pasteboard_->get() types];
194 }
195
196 OSExchangeData::Provider*
197 OSExchangeDataProviderMac::CreateProviderFromPasteboard(
198 NSPasteboard* pasteboard) {
199 OSExchangeDataProviderMac* provider = new OSExchangeDataProviderMac();
200
201 for (NSPasteboardItem* item in [pasteboard pasteboardItems]) {
202 ClipboardUtil::AddDataToPasteboard(provider->pasteboard_->get(), item);
203 }
204
205 return provider;
206 }
207
208 NSArray* OSExchangeDataProviderMac::SupportedPasteboardTypes() {
209 return @[
210 ui::ClipboardUtil::UTIForWebURLsAndTitles(), NSURLPboardType,
211 NSPasteboardTypeString, NSFilenamesPboardType
212 ];
213 }
214
172 /////////////////////////////////////////////////////////////////////////////// 215 ///////////////////////////////////////////////////////////////////////////////
173 // OSExchangeData, public: 216 // OSExchangeData, public:
174 217
175 // static 218 // static
176 OSExchangeData::Provider* OSExchangeData::CreateProvider() { 219 OSExchangeData::Provider* OSExchangeData::CreateProvider() {
177 return new OSExchangeDataProviderMac; 220 return new OSExchangeDataProviderMac;
178 } 221 }
179 222
180 } // namespace ui 223 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698