Translate wxTextDataObject to/from native EOL format.

The text data should use CR LF EOLs under Windows but the data inside the
program typically has only LF EOLs, so translate between them automatically in
wxTextDataObject.

Closes #14444.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72259 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2012-07-29 22:08:50 +00:00
parent 46a0544e6f
commit 229f00eb69

View File

@@ -24,6 +24,8 @@
#include "wx/app.h"
#endif
#include "wx/textbuf.h"
// ----------------------------------------------------------------------------
// lists
// ----------------------------------------------------------------------------
@@ -406,29 +408,44 @@ bool wxTextDataObject::SetData(const wxDataFormat& format,
#else // !wxNEEDS_UTF{8,16}_FOR_TEXT_DATAOBJ
// NB: This branch, using native wxChar for the clipboard, is only used under
// Windows currently. It's just a coincidence, but Windows is also the only
// platform where we need to convert the text to the native EOL format, so
// wxTextBuffer::Translate() is only used here and not in the code above.
size_t wxTextDataObject::GetDataSize() const
{
return GetTextLength() * sizeof(wxChar);
return (wxTextBuffer::Translate(GetText()).length() + 1)*sizeof(wxChar);
}
bool wxTextDataObject::GetDataHere(void *buf) const
{
const wxString textNative = wxTextBuffer::Translate(GetText());
// NOTE: use wxTmemcpy() instead of wxStrncpy() to allow
// retrieval of strings with embedded NULLs
wxTmemcpy( (wxChar*)buf, GetText().c_str(), GetTextLength() );
wxTmemcpy(static_cast<wxChar*>(buf),
textNative.c_str(),
(textNative.length() + 1)*sizeof(wxChar));
return true;
}
bool wxTextDataObject::SetData(size_t len, const void *buf)
{
SetText( wxString((const wxChar*)buf, len/sizeof(wxChar)) );
const wxString
text = wxString(static_cast<const wxChar*>(buf), len/sizeof(wxChar));
SetText(wxTextBuffer::Translate(text, wxTextFileType_Unix));
return true;
}
#endif // different wxTextDataObject implementations
// ----------------------------------------------------------------------------
// wxHTMLDataObject
// ----------------------------------------------------------------------------
size_t wxHTMLDataObject::GetDataSize() const
{
const wxScopedCharBuffer buffer(GetHTML().utf8_str());