// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma implementation "clipbrd.h"
-#endif
-
#include "wx/wxprec.h"
+#if wxUSE_CLIPBOARD
+
#include "wx/app.h"
#include "wx/frame.h"
#include "wx/bitmap.h"
if ( dataFormat.GetType() == wxDF_TEXT )
((char*)data)[byteCount] = 0 ;
if ( dataFormat.GetType() == wxDF_UNICODETEXT )
- ((wxChar*)data)[byteCount/2] = 0 ;
+ {
+ // "data" format is UTF16, so 2 bytes = one character
+ // wxChar size depends on platform, so just clear last 2 bytes
+ ((char*)data)[byteCount] = 0;
+ ((char*)data)[byteCount+1] = 0;
+ }
}
else
{
bool wxClipboard::Flush()
{
- return FALSE;
+ return false;
}
bool wxClipboard::Open()
{
- wxCHECK_MSG( !m_open, FALSE, wxT("clipboard already open") );
+ wxCHECK_MSG( !m_open, false, wxT("clipboard already open") );
m_open = true ;
return true ;
}
bool wxClipboard::SetData( wxDataObject *data )
{
- wxCHECK_MSG( m_open, FALSE, wxT("clipboard not open") );
+ wxCHECK_MSG( m_open, false, wxT("clipboard not open") );
- wxCHECK_MSG( data, FALSE, wxT("data is invalid") );
+ wxCHECK_MSG( data, false, wxT("data is invalid") );
Clear();
// as we can only store one wxDataObject, this is the same in this
bool wxClipboard::AddData( wxDataObject *data )
{
- wxCHECK_MSG( m_open, FALSE, wxT("clipboard not open") );
+ wxCHECK_MSG( m_open, false, wxT("clipboard not open") );
- wxCHECK_MSG( data, FALSE, wxT("data is invalid") );
+ wxCHECK_MSG( data, false, wxT("data is invalid") );
/* we can only store one wxDataObject */
Clear();
size_t sz = data->GetDataSize( array[i] ) ;
void* buf = malloc( sz + 1 ) ;
if ( buf )
- {
+ {
+ // empty the buffer because in some case GetDataHere does not fill buf
+ memset(buf, 0, sz+1);
data->GetDataHere( array[i] , buf ) ;
OSType mactype = 0 ;
switch ( array[i].GetType() )
case wxDF_TEXT:
case wxDF_OEMTEXT:
mactype = kScrapFlavorTypeText ;
+ sz -= 1;
break ;
#if wxUSE_UNICODE
case wxDF_UNICODETEXT :
mactype = kScrapFlavorTypeUnicode ;
+ sz -= 2;
break ;
#endif
#if wxUSE_DRAG_AND_DROP
wxCHECK_RET( m_open, wxT("clipboard not open") );
m_open = false ;
-
- // Get rid of cached object. If this is not done copying from another application will
- // only work once
+
+ // Get rid of cached object. If this is not done copying from another application will
+ // only work once
if (m_data)
{
delete m_data;
m_data = (wxDataObject*) NULL;
- }
-
+ }
+
}
bool wxClipboard::IsSupported( const wxDataFormat &dataFormat )
{
- if ( m_data )
- {
- return m_data->IsSupported( dataFormat ) ;
- }
+ if ( m_data )
+ {
+ return m_data->IsSupported( dataFormat ) ;
+ }
#if TARGET_CARBON
OSStatus err = noErr;
ScrapRef scrapRef;
{
if (( err = GetScrapFlavorSize( scrapRef, dataFormat.GetFormatId(), &byteCount )) == noErr)
{
- return TRUE ;
+ return true ;
}
}
}
- return FALSE;
+ return false;
#else
long offset ;
bool wxClipboard::GetData( wxDataObject& data )
{
- wxCHECK_MSG( m_open, FALSE, wxT("clipboard not open") );
+ wxCHECK_MSG( m_open, false, wxT("clipboard not open") );
size_t formatcount = data.GetFormatCount() + 1 ;
wxDataFormat *array = new wxDataFormat[ formatcount ];
switch ( format.GetType() )
{
case wxDF_TEXT :
+ case wxDF_UNICODETEXT:
case wxDF_OEMTEXT :
case wxDF_BITMAP :
case wxDF_METAFILE :
delete[] array ;
return transferred ;
}
+
+#endif