Use wxString::FromUTF8() and utf8_str() instead of directly using wxConvUTF8
as this is simpler and also works correctly in non-Unicode build (and more
efficiently in UTF-8 build as no conversion is done there).
Do not allocate -- and leak -- buffer in wxHTMLDataObject::GetDataHere(),
we're supposed to be putting data into the caller-provided buffer instead of
using our own.
Closes #14391.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71712
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
size_t wxHTMLDataObject::GetDataSize() const
{
size_t wxHTMLDataObject::GetDataSize() const
{
- size_t size = 0;
- // Windows and Mac always use UTF-8, and docs suggest GTK does as well.
- wxCharBuffer buffer = wxConvUTF8.cWX2MB( GetHTML().c_str() );
+ const wxScopedCharBuffer buffer(GetHTML().utf8_str());
+
+ size_t size = buffer.length();
- if (buffer)
- {
- size = strlen( buffer );
- // On Windows we need to add some stuff to the string to satisfy
- // its clipboard format requirements.
- size += 400;
+ // On Windows we need to add some stuff to the string to satisfy
+ // its clipboard format requirements.
+ size += 400;
return false;
// Windows and Mac always use UTF-8, and docs suggest GTK does as well.
return false;
// Windows and Mac always use UTF-8, and docs suggest GTK does as well.
- wxCharBuffer html = wxConvUTF8.cWX2MB( GetHTML().c_str() );
+ const wxScopedCharBuffer html(GetHTML().utf8_str());
if ( !html )
return false;
if ( !html )
return false;
- size_t bytes = GetDataSize();
+ char* const buffer = static_cast<char*>(buf);
+
#ifdef __WXMSW__
// add the extra info that the MSW clipboard format requires.
#ifdef __WXMSW__
// add the extra info that the MSW clipboard format requires.
- char* buffer = new char[bytes];
// Create a template string for the HTML header...
strcpy(buffer,
// Create a template string for the HTML header...
strcpy(buffer,
sprintf(ptr+12, "%08u", (unsigned)(strstr(buffer, "<!--EndFrag") - buffer));
*(ptr+12+8) = '\r';
#else
sprintf(ptr+12, "%08u", (unsigned)(strstr(buffer, "<!--EndFrag") - buffer));
*(ptr+12+8) = '\r';
#else
- wxCharBuffer buffer = html;
- memcpy( (char*) buf, buffer, bytes );
-
return false;
// Windows and Mac always use UTF-8, and docs suggest GTK does as well.
return false;
// Windows and Mac always use UTF-8, and docs suggest GTK does as well.
- wxWCharBuffer buffer = wxConvUTF8.cMB2WX( (const char*)buf );
+ const wxString html = wxString::FromUTF8(static_cast<const char*>(buf));
// To be consistent with other platforms, we only add the Fragment part
// of the Windows HTML clipboard format to the data object.
// To be consistent with other platforms, we only add the Fragment part
// of the Windows HTML clipboard format to the data object.
int fragmentStart = html.rfind("StartFragment");
int fragmentEnd = html.rfind("EndFragment");
int fragmentStart = html.rfind("StartFragment");
int fragmentEnd = html.rfind("EndFragment");
- if (fragmentStart != wxNOT_FOUND && fragmentEnd != wxNOT_FOUND)
+ if (fragmentStart != wxNOT_FOUND && fragmentEnd != wxNOT_FOUND)
{
int startCommentEnd = html.find("-->", fragmentStart) + 3;
int endCommentStart = html.rfind("<!--", fragmentEnd);
{
int startCommentEnd = html.find("-->", fragmentStart) + 3;
int endCommentStart = html.rfind("<!--", fragmentEnd);
if (startCommentEnd != wxNOT_FOUND && endCommentStart != wxNOT_FOUND)
html = html.Mid(startCommentEnd, endCommentStart - startCommentEnd);
}
if (startCommentEnd != wxNOT_FOUND && endCommentStart != wxNOT_FOUND)
html = html.Mid(startCommentEnd, endCommentStart - startCommentEnd);
}
SetHTML( html );
return true;
SetHTML( html );
return true;