switch (m_type)
{
case wxDF_TEXT:
- m_format = (long) CFStringCreateCopy( NULL, CFSTR("public.plain-text") );
+ m_format = (long) CFStringCreateCopy( NULL, kUTTypePlainText );
break;
case wxDF_UNICODETEXT:
- m_format = (long) CFStringCreateCopy( NULL, CFSTR("public.utf16-plain-text") );
+ m_format = (long) CFStringCreateCopy( NULL, kUTTypeUTF16PlainText );
break;
case wxDF_HTML:
- m_format = (long) CFStringCreateCopy( NULL, CFSTR("public.html") );
+ m_format = (long) CFStringCreateCopy( NULL, kUTTypeHTML );
break;
case wxDF_BITMAP:
- m_format = (long) CFStringCreateCopy( NULL, CFSTR("public.tiff") );
+ m_format = (long) CFStringCreateCopy( NULL, kUTTypeTIFF );
break;
case wxDF_METAFILE:
- m_format = (long) CFStringCreateCopy( NULL, CFSTR("com.adobe.pdf") );
+ m_format = (long) CFStringCreateCopy( NULL, kUTTypePDF );
break;
case wxDF_FILENAME:
- m_format = (long) CFStringCreateCopy( NULL, CFSTR("public.file-url") );
+ m_format = (long) CFStringCreateCopy( NULL, kUTTypeFileURL );
break;
default:
m_format = 0;
}
m_format = (NativeFormat) CFStringCreateCopy(NULL, (CFStringRef)format);
- if ( UTTypeConformsTo( (CFStringRef)format, CFSTR("public.html") ) )
+ if ( UTTypeConformsTo( (CFStringRef)format, kUTTypeHTML ) )
{
m_type = wxDF_HTML;
}
- if ( UTTypeConformsTo( (CFStringRef)format, CFSTR("public.utf16-plain-text") ) )
+ if ( UTTypeConformsTo( (CFStringRef)format, kUTTypeUTF16PlainText ) )
{
m_type = wxDF_UNICODETEXT;
}
- else if ( UTTypeConformsTo( (CFStringRef)format, CFSTR("public.utf16-external-plain-text") ) )
+ else if ( UTTypeConformsTo( (CFStringRef)format,kUTTypeUTF16ExternalPlainText ) )
{
m_type = wxDF_UNICODETEXT;
}
- else if ( UTTypeConformsTo( (CFStringRef)format, CFSTR("public.plain-text") ) )
+ else if ( UTTypeConformsTo( (CFStringRef)format,kUTTypeUTF8PlainText ) )
+ {
+ m_type = wxDF_UNICODETEXT;
+ }
+ else if ( UTTypeConformsTo( (CFStringRef)format, kUTTypePlainText ) )
{
m_type = wxDF_TEXT;
}
- else if ( UTTypeConformsTo( (CFStringRef)format, CFSTR("public.tiff") ) )
+ else if ( UTTypeConformsTo( (CFStringRef)format, kUTTypeImage ) )
{
m_type = wxDF_BITMAP;
}
- else if ( UTTypeConformsTo( (CFStringRef)format, CFSTR("com.adobe.pdf") ) )
+ else if ( UTTypeConformsTo( (CFStringRef)format, kUTTypePDF ) )
{
m_type = wxDF_METAFILE;
}
- else if ( UTTypeConformsTo( (CFStringRef)format, CFSTR("public.file-url") ) ||
+ else if ( UTTypeConformsTo( (CFStringRef)format, kUTTypeFileURL ) ||
UTTypeConformsTo( (CFStringRef)format, kPasteboardTypeFileURLPromise))
{
m_type = wxDF_FILENAME;
// string including trailing zero
size_t datasize = GetDataSize( thisFormat );
+ if ( datasize == wxCONV_FAILED && thisFormat.GetType() == wxDF_TEXT)
+ {
+ // conversion to local text failed, so we must use unicode
+ // if wxDF_UNICODETEXT is already on the 'todo' list, skip this iteration
+ // otherwise force it
+ size_t j = 0;
+ for (j = 0; j < GetFormatCount(); j++)
+ {
+ if ( array[j].GetType() == wxDF_UNICODETEXT )
+ break;
+ }
+ if ( j < GetFormatCount() )
+ continue;
+
+ thisFormat.SetType(wxDF_UNICODETEXT);
+ datasize = GetDataSize( thisFormat );
+ }
+
size_t sz = datasize + 4;
void* buf = malloc( sz );
if ( buf != NULL )
{
// empty the buffer because in some case GetDataHere does not fill buf
memset( buf, 0, sz );
- if ( GetDataHere( array[ i ], buf ) )
+ if ( GetDataHere( thisFormat, buf ) )
{
int counter = 1 ;
if ( thisFormat.GetType() == wxDF_FILENAME )
flavorType = (CFStringRef)CFArrayGetValueAtIndex( flavorTypeArray,
flavorIndex );
- // avoid utf8 being treated closer to plain-text than unicode by forcing a conversion
- if ( UTTypeConformsTo(flavorType, CFSTR("public.utf8-plain-text") ) )
- {
- flavorType = CFSTR("public.utf16-plain-text");
- }
wxDataFormat flavorFormat( (wxDataFormat::NativeFormat) flavorType );
if ( dataFormat == flavorFormat )
wxCFRef<CFURLRef> dest(CFURLCreateFromFileSystemRepresentation(NULL,(const UInt8*)result,strlen(result),true));
PasteboardSetPasteLocation(pasteboard, dest);
}
+ else if ( flavorFormat.GetType() != wxDF_PRIVATE )
+ {
+ // indicate the expected format for the type, benefiting from native conversions eg utf8 -> utf16
+ flavorType = (CFStringRef) wxDataFormat( flavorFormat.GetType()).GetFormatId();
+ }
+
err = PasteboardCopyItemFlavorData( pasteboard, itemID, flavorType , &flavorData );
if ( err == noErr )
{