Add support for unicode text in wxClipboard when wxUSE_OLE==0 (wxMSW)
wxDF_UNICODETEXT objects are handled using Win clipboard API.
This commit is contained in:
@@ -54,10 +54,6 @@
|
|||||||
#include "wx/msw/dib.h"
|
#include "wx/msw/dib.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// wxDataObject is tied to OLE/drag and drop implementation, therefore so are
|
|
||||||
// the functions using wxDataObject in wxClipboard
|
|
||||||
//#define wxUSE_DATAOBJ wxUSE_DRAG_AND_DROP
|
|
||||||
|
|
||||||
#if wxUSE_OLE
|
#if wxUSE_OLE
|
||||||
// use OLE clipboard
|
// use OLE clipboard
|
||||||
#define wxUSE_OLE_CLIPBOARD 1
|
#define wxUSE_OLE_CLIPBOARD 1
|
||||||
@@ -168,6 +164,7 @@ bool wxIsClipboardFormatAvailable(wxDataFormat dataFormat)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if !wxUSE_OLE_CLIPBOARD
|
||||||
bool wxSetClipboardData(wxDataFormat dataFormat,
|
bool wxSetClipboardData(wxDataFormat dataFormat,
|
||||||
const void *data,
|
const void *data,
|
||||||
int width, int height)
|
int width, int height)
|
||||||
@@ -340,6 +337,22 @@ bool wxSetClipboardData(wxDataFormat dataFormat,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case wxDF_UNICODETEXT:
|
||||||
|
{
|
||||||
|
LPWSTR s = (LPWSTR)data;
|
||||||
|
DWORD size = sizeof(WCHAR) * (lstrlenW(s) + 1);
|
||||||
|
HANDLE hGlobalMemory = ::GlobalAlloc(GHND, size);
|
||||||
|
if ( hGlobalMemory )
|
||||||
|
{
|
||||||
|
LPWSTR lpGlobalMemory = (LPWSTR)::GlobalLock(hGlobalMemory);
|
||||||
|
memcpy(lpGlobalMemory, s, size);
|
||||||
|
::GlobalUnlock(hGlobalMemory);
|
||||||
|
}
|
||||||
|
|
||||||
|
handle = ::SetClipboardData(CF_UNICODETEXT, hGlobalMemory);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case wxDF_HTML:
|
case wxDF_HTML:
|
||||||
{
|
{
|
||||||
char* html = (char *)data;
|
char* html = (char *)data;
|
||||||
@@ -506,6 +519,26 @@ void *wxGetClipboardData(wxDataFormat dataFormat, long *len)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case wxDF_UNICODETEXT:
|
||||||
|
{
|
||||||
|
HANDLE hGlobalMemory = ::GetClipboardData(CF_UNICODETEXT);
|
||||||
|
if ( hGlobalMemory )
|
||||||
|
{
|
||||||
|
DWORD size = ::GlobalSize(hGlobalMemory);
|
||||||
|
if ( len )
|
||||||
|
*len = size;
|
||||||
|
WCHAR* s = new WCHAR[(size + 1) / sizeof(WCHAR)];
|
||||||
|
if ( s )
|
||||||
|
{
|
||||||
|
LPWSTR lpGlobalMemory = (LPWSTR)::GlobalLock(hGlobalMemory);
|
||||||
|
memcpy(s, lpGlobalMemory, size);
|
||||||
|
::GlobalUnlock(hGlobalMemory);
|
||||||
|
retval = s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
HANDLE hGlobalMemory = ::GetClipboardData(dataFormat);
|
HANDLE hGlobalMemory = ::GetClipboardData(dataFormat);
|
||||||
@@ -538,6 +571,7 @@ void *wxGetClipboardData(wxDataFormat dataFormat, long *len)
|
|||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
#endif // !wxUSE_OLE_CLIPBOARD
|
||||||
|
|
||||||
wxDataFormat wxEnumClipboardFormats(wxDataFormat dataFormat)
|
wxDataFormat wxEnumClipboardFormats(wxDataFormat dataFormat)
|
||||||
{
|
{
|
||||||
@@ -739,6 +773,14 @@ bool wxClipboard::AddData( wxDataObject *data )
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case wxDF_UNICODETEXT:
|
||||||
|
{
|
||||||
|
wxTextDataObject* textDataObject = (wxTextDataObject*)data;
|
||||||
|
wxString str(textDataObject->GetText());
|
||||||
|
bRet = wxSetClipboardData(format, str.wc_str());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case wxDF_BITMAP:
|
case wxDF_BITMAP:
|
||||||
case wxDF_DIB:
|
case wxDF_DIB:
|
||||||
{
|
{
|
||||||
@@ -971,6 +1013,19 @@ bool wxClipboard::GetData( wxDataObject& data )
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case wxDF_UNICODETEXT:
|
||||||
|
{
|
||||||
|
wxTextDataObject& textDataObject = (wxTextDataObject &)data;
|
||||||
|
WCHAR* s = (WCHAR*)wxGetClipboardData(format);
|
||||||
|
if ( !s )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
textDataObject.SetText(wxString(s));
|
||||||
|
delete[] s;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
case wxDF_BITMAP:
|
case wxDF_BITMAP:
|
||||||
case wxDF_DIB:
|
case wxDF_DIB:
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user