+#if !TARGET_CARBON
+ OSErr err = noErr ;
+#else
+ OSStatus err = noErr ;
+#endif
+
+ switch (dataFormat.GetType())
+ {
+ case wxDF_BITMAP:
+ {
+ /*
+ wxBitmap *bitmap = (wxBitmap *)data;
+
+ HDC hdcMem = CreateCompatibleDC((HDC) NULL);
+ HDC hdcSrc = CreateCompatibleDC((HDC) NULL);
+ HBITMAP old = (HBITMAP)
+ ::SelectObject(hdcSrc, (HBITMAP)bitmap->GetHBITMAP());
+ HBITMAP hBitmap = CreateCompatibleBitmap(hdcSrc,
+ bitmap->GetWidth(),
+ bitmap->GetHeight());
+ if (!hBitmap)
+ {
+ SelectObject(hdcSrc, old);
+ DeleteDC(hdcMem);
+ DeleteDC(hdcSrc);
+ return FALSE;
+ }
+
+ HBITMAP old1 = (HBITMAP) SelectObject(hdcMem, hBitmap);
+ BitBlt(hdcMem, 0, 0, bitmap->GetWidth(), bitmap->GetHeight(),
+ hdcSrc, 0, 0, SRCCOPY);
+
+ // Select new bitmap out of memory DC
+ SelectObject(hdcMem, old1);
+
+ // Set the data
+ handle = ::SetClipboardData(CF_BITMAP, hBitmap);
+
+ // Clean up
+ SelectObject(hdcSrc, old);
+ DeleteDC(hdcSrc);
+ DeleteDC(hdcMem);
+ */
+ break;
+ }
+
+ case wxDF_DIB:
+ {
+ /*
+#if wxUSE_IMAGE_LOADING_IN_MSW
+ wxBitmap *bitmap = (wxBitmap *)data;
+ HBITMAP hBitmap = (HBITMAP)bitmap->GetHBITMAP();
+ // NULL palette means to use the system one
+ HANDLE hDIB = wxBitmapToDIB(hBitmap, (HPALETTE)NULL);
+ handle = SetClipboardData(CF_DIB, hDIB);
+#endif // wxUSE_IMAGE_LOADING_IN_MSW
+*/
+ break;
+ }
+
+#if wxUSE_METAFILE
+ case wxDF_METAFILE:
+ {
+ wxMetafile *wxMF = (wxMetafile *)data;
+ PicHandle pict = wxMF->GetHMETAFILE() ;
+ HLock( (Handle) pict ) ;
+#if !TARGET_CARBON
+ err = PutScrap( GetHandleSize( (Handle) pict ) , 'PICT' , *pict ) ;
+#else
+ ScrapRef scrap;
+ err = GetCurrentScrap (&scrap);
+ if ( !err )
+ {
+ err = PutScrapFlavor (scrap, 'PICT', 0, GetHandleSize((Handle) pict), *pict);
+ }
+#endif
+ HUnlock( (Handle) pict ) ;
+ break;
+ }
+#endif
+ case wxDF_SYLK:
+ case wxDF_DIF:
+ case wxDF_TIFF:
+ case wxDF_PALETTE:
+ default:
+ {
+ wxLogError(_("Unsupported clipboard format."));
+ return FALSE;
+ }
+
+ case wxDF_OEMTEXT:
+ dataFormat = wxDF_TEXT;
+ // fall through
+
+ case wxDF_TEXT:
+ {
+ wxString mac ;
+ if ( wxApp::s_macDefaultEncodingIsPC )
+ {
+ mac = wxMacMakeMacStringFromPC((char *)data) ;
+ }
+ else
+ {
+ mac = (char *)data ;
+ }
+#if !TARGET_CARBON
+ err = PutScrap( mac.Length() , 'TEXT' , mac.c_str() ) ;
+#else
+ ScrapRef scrap;
+ err = GetCurrentScrap (&scrap);
+ if ( !err )
+ {
+ err = PutScrapFlavor (scrap, 'TEXT', 0, mac.Length(), mac.c_str());
+ }
+#endif
+ break;
+ }
+ }
+
+ if ( err )
+ {
+ wxLogSysError(_("Failed to set clipboard data."));
+
+ return FALSE;
+ }
+
+ return TRUE;