X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e0a367202770227acf1d9ba88e3fc7e068547c37..b93328d84228c097e125b0082b486da2aa0d1c22:/src/common/dobjcmn.cpp diff --git a/src/common/dobjcmn.cpp b/src/common/dobjcmn.cpp index ff161cddf3..90affa06e6 100644 --- a/src/common/dobjcmn.cpp +++ b/src/common/dobjcmn.cpp @@ -17,10 +17,6 @@ // headers // ---------------------------------------------------------------------------- -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma implementation "dataobjbase.h" -#endif - #include "wx/wxprec.h" #ifdef __BORLANDC__ @@ -42,7 +38,7 @@ #include "wx/listimpl.cpp" -WX_DEFINE_LIST(wxSimpleDataObjectList); +WX_DEFINE_LIST(wxSimpleDataObjectList) // ---------------------------------------------------------------------------- // globals @@ -276,39 +272,31 @@ bool wxTextDataObject::SetData(const wxDataFormat& format, #elif wxUSE_UNICODE && defined(__WXMAC__) +static wxMBConvUTF16 sUTF16Converter ; + +static inline wxMBConv& GetConv(const wxDataFormat& format) +{ + return format == wxDF_UNICODETEXT ? (wxMBConv&) sUTF16Converter + : (wxMBConv&) wxConvLocal; +} + size_t wxTextDataObject::GetDataSize(const wxDataFormat& format) const { - if (format == wxDF_UNICODETEXT) - { - // host native is UTF16 - wxMBConvUTF16 converter ; - return converter.WC2MB( NULL , GetText().c_str() , 0 ) + 2; // add space for trailing unichar 0 - } - else // == wxDF_TEXT - { - wxCharBuffer buffer = wxConvLibc.cWX2MB( GetText().c_str() ); - // in some cases "buffer" is null (e.g. Mac OS X) - return buffer ? strlen( (const char*) buffer ) + 1 : 0; - } + size_t len = GetConv(format).WC2MB( NULL , GetText().c_str() , 0 ) + + ( format == wxDF_UNICODETEXT ? 2 : 1 ) ; + return len ; } bool wxTextDataObject::GetDataHere(const wxDataFormat& format, void *buf) const { - if (format == wxDF_UNICODETEXT) - { - // host native is UTF16 - wxMBConvUTF16 converter ; - size_t len = converter.WC2MB( NULL , GetText().c_str() , 0 ) ; - wxCharBuffer buffer = converter.cWX2MB( GetText().c_str() ); - memcpy( (char*) buf, (const char*) buffer , len + 2); // trailing unichar 0 - } - else - { - wxCharBuffer buffer = wxConvLibc.cWX2MB( GetText().c_str() ); - // in some cases "buffer" is null (e.g. Mac OS X) - if (buffer) - strcpy( (char*) buf, (const char*) buffer ); - } + wxCharBuffer buffer = GetConv(format).cWX2MB( GetText().c_str() ); + if ( !buffer ) + return false; + + size_t len = GetConv(format).WC2MB( NULL , GetText().c_str() , 0 ) + + ( format == wxDF_UNICODETEXT ? 2 : 1 ) ; + + memcpy( (char*) buf, (const char*) buffer , len ); // trailing (uni)char 0 return true; } @@ -316,15 +304,12 @@ bool wxTextDataObject::GetDataHere(const wxDataFormat& format, void *buf) const bool wxTextDataObject::SetData(const wxDataFormat& format, size_t WXUNUSED(len), const void *buf) { - if (format == wxDF_UNICODETEXT) - { - // host native is UTF16 - wxMBConvUTF16 converter ; - SetText( converter.cMB2WX( (const char*) buf ) ); - } - else - SetText( wxConvLibc.cMB2WX( (const char*) buf ) ); - + wxWCharBuffer buffer = GetConv(format).cMB2WX((const char *)buf); + if ( !buffer ) + return false; + + SetText(buffer); + return true; }