From 671478ee469decd0576e0d27817bf92c6fb3632d Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Mon, 22 Aug 2005 08:46:08 +0000 Subject: [PATCH] adapting text object data handling along the GTK2 lines git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35255 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/dobjcmn.cpp | 60 +++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 36 deletions(-) diff --git a/src/common/dobjcmn.cpp b/src/common/dobjcmn.cpp index ff161cddf3..f6e84ec3fa 100644 --- a/src/common/dobjcmn.cpp +++ b/src/common/dobjcmn.cpp @@ -276,39 +276,30 @@ 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 ? 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 +307,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; } -- 2.45.2