]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/dnd.cpp
Fix client data handling: delete client data for all items when a
[wxWidgets.git] / src / mac / carbon / dnd.cpp
index cfe9297e3c3147f4c57f9c8c92de38d50291b421..09a2f1d373bf30020cfff089809972dccbfac453 100644 (file)
@@ -194,8 +194,12 @@ bool wxDropTarget::GetData()
                   Size dataSize ;
                   Ptr theData ;
                   GetFlavorDataSize((DragReference)m_currentDrag, theItem, theType, &dataSize);
-                                 if ( theType == 'TEXT' )
-                                   dataSize++ ;
+                         if ( theType == 'TEXT' )
+                         {
+                               // this increment is only valid for allocating, on the next GetFlavorData
+                               // call it is reset again to the original value
+                           dataSize++ ;
+                         }
                   theData = new char[dataSize];
                   GetFlavorData((DragReference)m_currentDrag, theItem, theType, (void*) theData, &dataSize, 0L); 
                   if( theType == 'TEXT' )
@@ -203,7 +207,7 @@ bool wxDropTarget::GetData()
                     theData[dataSize]=0 ;       
                     if ( wxApp::s_macDefaultEncodingIsPC )
                     {
-                      wxMacConvertToPC((char*)theData) ;
+                      wxMacConvertToPC((char*)theData,(char*)theData,dataSize) ;
                     }
                     m_dataObject->SetData( format, dataSize, theData );
                   }
@@ -211,7 +215,7 @@ bool wxDropTarget::GetData()
                   {
                     HFSFlavor* theFile = (HFSFlavor*) theData ;
                     wxString name = wxMacFSSpec2MacFilename( &theFile->fileSpec ) ;
-                    m_dataObject->SetData( format , name.Length() + 1, name ) ;
+                    ((wxFileDataObject*)m_dataObject)->AddFile( name ) ;
                   }
                   else
                   {
@@ -259,7 +263,7 @@ wxDropSource::~wxDropSource()
 }
 
 
-wxDragResult wxDropSource::DoDragDrop( bool allowMove )
+wxDragResult wxDropSource::DoDragDrop(int WXUNUSED(flags))
 {
     wxASSERT_MSG( m_data, wxT("Drop source: no data") );
 
@@ -292,7 +296,7 @@ wxDragResult wxDropSource::DoDragDrop( bool allowMove )
           dataSize-- ;
           if ( wxApp::s_macDefaultEncodingIsPC )
           {
-            wxMacConvertFromPC((char*)dataPtr) ;
+            wxMacConvertFromPC((char*)dataPtr,(char*)dataPtr,dataSize) ;
           }
           AddDragItemFlavor(theDrag, theItem, type , dataPtr, dataSize, 0);
         }
@@ -336,7 +340,14 @@ wxDragResult wxDropSource::DoDragDrop( bool allowMove )
     dragRegion = NewRgn();
     RgnHandle tempRgn = NewRgn() ;
     
-    EventRecord* ev = (EventRecord*) wxTheApp->MacGetCurrentEvent() ;
+    EventRecord* ev = NULL ;
+#if !TARGET_CARBON // TODO
+       ev = (EventRecord*) wxTheApp->MacGetCurrentEvent() ;
+#else
+       EventRecord rec ;
+       ev = &rec ;
+       wxMacConvertEventToRecord( (EventRef) wxTheApp->MacGetCurrentEvent() , &rec ) ;
+#endif
     const short dragRegionOuterBoundary = 10 ;
     const short dragRegionInnerBoundary = 9 ;
     
@@ -490,8 +501,9 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
     return(noErr);
 }
 
-pascal OSErr wxMacWindowDragReceiveHandler(WindowPtr theWindow, void *handlerRefCon,
-DragReference theDrag)
+pascal OSErr wxMacWindowDragReceiveHandler(WindowPtr theWindow,
+                                           void *handlerRefCon,
+                                           DragReference theDrag)
 { 
     MacTrackingGlobals* trackingGlobals = (MacTrackingGlobals*) handlerRefCon;
     if ( trackingGlobals->m_currentTarget )