bool wxDataObject::GetFromPasteboard( void * pb )
{
PasteboardRef pasteboard = (PasteboardRef) pb;
- size_t formatcount = GetFormatCount() + 1;
+
+ size_t formatcount = GetFormatCount(wxDataObject::Set);
wxDataFormat *array = new wxDataFormat[ formatcount ];
- array[0] = GetPreferredFormat();
- GetAllFormats( &array[1] );
+ GetAllFormats(array, wxDataObject::Set);
+
ItemCount itemCount = 0;
wxString filenamesPassed;
bool transferred = false;
+ bool pastelocationset = false;
// we synchronize here once again, so we don't mind which flags get returned
PasteboardSynchronize( pasteboard );
{
if ( UTTypeConformsTo( (CFStringRef)flavorType, kPasteboardTypeFileURLPromise) )
{
- wxString tempdir = wxFileName::GetTempDir() + wxFILE_SEP_PATH + "wxtemp.XXXXXX";
- char* result = mkdtemp((char*)tempdir.fn_str().data());
-
- if (!result)
- continue;
-
- wxCFRef<CFURLRef> dest(CFURLCreateFromFileSystemRepresentation(NULL,(const UInt8*)result,strlen(result),true));
- PasteboardSetPasteLocation(pasteboard, dest);
+ if ( !pastelocationset )
+ {
+ wxString tempdir = wxFileName::GetTempDir() + wxFILE_SEP_PATH + "wxtemp.XXXXXX";
+ char* result = mkdtemp((char*)tempdir.fn_str().data());
+
+ if (!result)
+ continue;
+
+ wxCFRef<CFURLRef> dest(CFURLCreateFromFileSystemRepresentation(NULL,(const UInt8*)result,strlen(result),true));
+ PasteboardSetPasteLocation(pasteboard, dest);
+ pastelocationset = true;
+ }
}
else if ( flavorFormat.GetType() != wxDF_PRIVATE )
{
bool wxDataObject::HasDataInPasteboard( void * pb )
{
PasteboardRef pasteboard = (PasteboardRef) pb;
- size_t formatcount = GetFormatCount() + 1;
+ size_t formatcount = GetFormatCount(wxDataObject::Set);
wxDataFormat *array = new wxDataFormat[ formatcount ];
- array[0] = GetPreferredFormat();
- GetAllFormats( &array[1] );
+ GetAllFormats(array, wxDataObject::Set);
ItemCount itemCount = 0;
bool hasData = false;
return hasData;
}
+#if wxOSX_USE_COCOA
+
+void wxDataObject::AddSupportedTypes( void* cfarray)
+{
+ size_t nFormats = GetFormatCount(wxDataObject::Set);
+ wxDataFormat *array = new wxDataFormat[nFormats];
+ GetAllFormats(array, wxDataObject::Set);
+
+ for (size_t i = 0; i < nFormats; i++)
+ {
+ wxDataFormat dataFormat = array[ i ];
+
+ if ( dataFormat.GetType() == wxDF_UNICODETEXT || dataFormat.GetType() == wxDF_TEXT )
+ {
+ CFArrayAppendValue((CFMutableArrayRef)cfarray, kUTTypeUTF16PlainText);
+ CFArrayAppendValue((CFMutableArrayRef)cfarray, kUTTypePlainText);
+ }
+ else if ( dataFormat.GetType() == wxDF_FILENAME )
+ {
+ CFArrayAppendValue((CFMutableArrayRef)cfarray, kUTTypeFileURL);
+ CFArrayAppendValue((CFMutableArrayRef)cfarray, kPasteboardTypeFileURLPromise);
+ }
+ else if ( dataFormat.GetType() == wxDF_HTML )
+ {
+ CFArrayAppendValue((CFMutableArrayRef)cfarray, kUTTypeHTML);
+ }
+ else if ( dataFormat.GetType() == wxDF_BITMAP )
+ {
+ CFArrayAppendValue((CFMutableArrayRef)cfarray, kUTTypeTIFF);
+ CFArrayAppendValue((CFMutableArrayRef)cfarray, kUTTypePICT);
+ }
+ else if ( dataFormat.GetType() == wxDF_METAFILE )
+ {
+ CFArrayAppendValue((CFMutableArrayRef)cfarray, kUTTypePDF);
+ }
+ else if ( dataFormat.GetType() == wxDF_PRIVATE )
+ {
+ CFArrayAppendValue((CFMutableArrayRef)cfarray, (CFStringRef) dataFormat.GetFormatId());
+ }
+ }
+ delete[] array;
+}
+
+#endif
+
// ----------------------------------------------------------------------------
// wxTextDataObject
// ----------------------------------------------------------------------------
void wxTextDataObject::GetAllFormats(wxDataFormat *formats,
wxDataObjectBase::Direction WXUNUSED(dir)) const
{
- *formats++ = wxDataFormat( wxDF_TEXT );
- *formats = wxDataFormat( wxDF_UNICODETEXT );
+ *formats++ = wxDataFormat(wxDF_UNICODETEXT);
+ *formats = wxDataFormat(wxDF_TEXT);
}
#endif