diff options
Diffstat (limited to 'Source/WebCore/platform/mac/DragDataMac.mm')
-rw-r--r-- | Source/WebCore/platform/mac/DragDataMac.mm | 76 |
1 files changed, 54 insertions, 22 deletions
diff --git a/Source/WebCore/platform/mac/DragDataMac.mm b/Source/WebCore/platform/mac/DragDataMac.mm index 9cb4836..64376b1 100644 --- a/Source/WebCore/platform/mac/DragDataMac.mm +++ b/Source/WebCore/platform/mac/DragDataMac.mm @@ -33,41 +33,52 @@ #import "DOMDocumentFragmentInternal.h" #import "MIMETypeRegistry.h" #import "Pasteboard.h" -#import "PasteboardHelper.h" +#import "Range.h" namespace WebCore { DragData::DragData(DragDataRef data, const IntPoint& clientPosition, const IntPoint& globalPosition, - DragOperation sourceOperationMask, PasteboardHelper* pasteboardHelper) + DragOperation sourceOperationMask, DragApplicationFlags flags) : m_clientPosition(clientPosition) , m_globalPosition(globalPosition) , m_platformDragData(data) , m_draggingSourceOperationMask(sourceOperationMask) - , m_pasteboardHelper(pasteboardHelper) + , m_applicationFlags(flags) + , m_pasteboard([m_platformDragData draggingPasteboard]) +{ +} + +DragData::DragData(const String& dragStorageName, const IntPoint& clientPosition, const IntPoint& globalPosition, + DragOperation sourceOperationMask, DragApplicationFlags flags) + : m_clientPosition(clientPosition) + , m_globalPosition(globalPosition) + , m_platformDragData(0) + , m_draggingSourceOperationMask(sourceOperationMask) + , m_applicationFlags(flags) + , m_pasteboard([NSPasteboard pasteboardWithName:dragStorageName]) { - ASSERT(pasteboardHelper); } bool DragData::canSmartReplace() const { //Need to call this so that the various Pasteboard type strings are intialised Pasteboard::generalPasteboard(); - return [[[m_platformDragData draggingPasteboard] types] containsObject:WebSmartPastePboardType]; + return [[m_pasteboard.get() types] containsObject:WebSmartPastePboardType]; } bool DragData::containsColor() const { - return [[[m_platformDragData draggingPasteboard] types] containsObject:NSColorPboardType]; + return [[m_pasteboard.get() types] containsObject:NSColorPboardType]; } bool DragData::containsFiles() const { - return [[[m_platformDragData draggingPasteboard] types] containsObject:NSFilenamesPboardType]; + return [[m_pasteboard.get() types] containsObject:NSFilenamesPboardType]; } void DragData::asFilenames(Vector<String>& result) const { - NSArray *filenames = [[m_platformDragData draggingPasteboard] propertyListForType:NSFilenamesPboardType]; + NSArray *filenames = [m_pasteboard.get() propertyListForType:NSFilenamesPboardType]; NSEnumerator *fileEnumerator = [filenames objectEnumerator]; while (NSString *filename = [fileEnumerator nextObject]) @@ -76,19 +87,19 @@ void DragData::asFilenames(Vector<String>& result) const bool DragData::containsPlainText() const { - NSPasteboard *pasteboard = [m_platformDragData draggingPasteboard]; - NSArray *types = [pasteboard types]; + NSArray *types = [m_pasteboard.get() types]; return [types containsObject:NSStringPboardType] || [types containsObject:NSRTFDPboardType] || [types containsObject:NSRTFPboardType] || [types containsObject:NSFilenamesPboardType] - || [NSURL URLFromPasteboard:pasteboard]; + || [NSURL URLFromPasteboard:m_pasteboard.get()]; } -String DragData::asPlainText() const +String DragData::asPlainText(Frame *frame) const { - return m_pasteboardHelper->plainTextFromPasteboard([m_platformDragData draggingPasteboard]); + Pasteboard pasteboard(m_pasteboard.get()); + return pasteboard.plainText(frame); } Color DragData::asColor() const @@ -98,29 +109,50 @@ Color DragData::asColor() const (int)([color blueComponent] * 255.0 + 0.5), (int)([color alphaComponent] * 255.0 + 0.5)); } +static NSArray *insertablePasteboardTypes() +{ + static NSArray *types = nil; + if (!types) { + types = [[NSArray alloc] initWithObjects:WebArchivePboardType, NSHTMLPboardType, NSFilenamesPboardType, NSTIFFPboardType, NSPDFPboardType, +#if defined(BUILDING_ON_TIGER) || defined(BUILDING_ON_LEOPARD) + NSPICTPboardType, +#endif + NSURLPboardType, NSRTFDPboardType, NSRTFPboardType, NSStringPboardType, NSColorPboardType, kUTTypePNG, nil]; + CFRetain(types); + } + return types; +} + bool DragData::containsCompatibleContent() const { - NSPasteboard *pasteboard = [m_platformDragData draggingPasteboard]; - NSMutableSet *types = [NSMutableSet setWithArray:[pasteboard types]]; - [types intersectSet:[NSSet setWithArray:m_pasteboardHelper->insertablePasteboardTypes()]]; + NSMutableSet *types = [NSMutableSet setWithArray:[m_pasteboard.get() types]]; + [types intersectSet:[NSSet setWithArray:insertablePasteboardTypes()]]; return [types count] != 0; } -bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const +bool DragData::containsURL(Frame* frame, FilenameConversionPolicy filenamePolicy) const { - return !asURL(filenamePolicy).isEmpty(); + return !asURL(frame, filenamePolicy).isEmpty(); } -String DragData::asURL(FilenameConversionPolicy filenamePolicy, String* title) const +String DragData::asURL(Frame* frame, FilenameConversionPolicy filenamePolicy, String* title) const { // FIXME: Use filenamePolicy. (void)filenamePolicy; - return m_pasteboardHelper->urlFromPasteboard([m_platformDragData draggingPasteboard], title); + + if (title) { + if (NSString *URLTitleString = [[m_platformDragData draggingPasteboard] stringForType:WebURLNamePboardType]) + *title = URLTitleString; + } + Pasteboard pasteboard(m_pasteboard.get()); + return pasteboard.asURL(frame); } -PassRefPtr<DocumentFragment> DragData::asFragment(Document*) const +PassRefPtr<DocumentFragment> DragData::asFragment(Frame* frame, PassRefPtr<Range> range, bool allowPlainText, bool& chosePlainText) const { - return core(m_pasteboardHelper->fragmentFromPasteboard([m_platformDragData draggingPasteboard])); + Pasteboard pasteboard(m_pasteboard.get()); + + return pasteboard.documentFragment(frame, range, allowPlainText, chosePlainText); } } // namespace WebCore |