]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/clipbrd.cpp
corrected wake up code
[wxWidgets.git] / src / mac / carbon / clipbrd.cpp
index 7e48c9ec34ce8ee22e1f15c9e13e21e3985adf40..e36fc505483f8c97be8f9d12eeb5a957bfb213c0 100644 (file)
@@ -9,9 +9,9 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-#pragma implementation "clipbrd.h"
-#endif
+#include "wx/wxprec.h"
+
+#if wxUSE_CLIPBOARD
 
 #include "wx/app.h"
 #include "wx/frame.h"
@@ -92,7 +92,12 @@ void *wxGetClipboardData(wxDataFormat dataFormat, long *len)
                     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
                 {
@@ -188,12 +193,12 @@ void wxClipboard::Clear()
 
 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 ;
 }
@@ -205,9 +210,9 @@ bool wxClipboard::IsOpened() const
 
 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
@@ -217,9 +222,9 @@ bool wxClipboard::SetData( wxDataObject *data )
 
 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();
@@ -239,7 +244,9 @@ bool wxClipboard::AddData( wxDataObject *data )
         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() )
@@ -247,10 +254,12 @@ bool wxClipboard::AddData( wxDataObject *data )
                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
@@ -280,23 +289,23 @@ void wxClipboard::Close()
     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;
@@ -311,11 +320,11 @@ bool wxClipboard::IsSupported( const wxDataFormat &dataFormat )
         {
             if (( err = GetScrapFlavorSize( scrapRef, dataFormat.GetFormatId(), &byteCount )) == noErr)
             {
-                return TRUE ;
+                return true ;
             }
         }
     }
-    return FALSE;
+    return false;
 
 #else
     long offset ;
@@ -331,7 +340,7 @@ bool wxClipboard::IsSupported( const wxDataFormat &dataFormat )
 
 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  ];
@@ -374,6 +383,7 @@ bool wxClipboard::GetData( wxDataObject& data )
           switch ( format.GetType() )
           {
               case wxDF_TEXT :
+              case wxDF_UNICODETEXT:
               case wxDF_OEMTEXT :
               case wxDF_BITMAP :
               case wxDF_METAFILE :
@@ -399,3 +409,5 @@ bool wxClipboard::GetData( wxDataObject& data )
     delete[] array ;
     return transferred ;
 }
+
+#endif