]> git.saurik.com Git - wxWidgets.git/commitdiff
Translate wxTextDataObject to/from native EOL format.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 29 Jul 2012 22:08:50 +0000 (22:08 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 29 Jul 2012 22:08:50 +0000 (22:08 +0000)
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

src/common/dobjcmn.cpp

index 4c1acaa8378b2fdc36bce1e45d732d901d05741c..0eeea52fb20d2cb31d39c5d4f6360cd452d784f4 100644 (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());