]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/dnd.cpp
Applied patch [ 681893 ] Combobox in toolbar
[wxWidgets.git] / src / mac / dnd.cpp
index 7ab73a19d11fa3b70ab19ea54994f5689437b44c..4033d33e014de559f113c363fd8cfa9d8d75925f 100644 (file)
@@ -173,6 +173,7 @@ bool wxDropTarget::GetData()
     {
       UInt16 items ;
       OSErr result;
+      bool firstFileAdded = false ;
       CountDragItems((DragReference)m_currentDrag, &items);
       for (UInt16 index = 1; index <= items; ++index) 
       {
@@ -194,8 +195,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 +208,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 +216,13 @@ bool wxDropTarget::GetData()
                   {
                     HFSFlavor* theFile = (HFSFlavor*) theData ;
                     wxString name = wxMacFSSpec2MacFilename( &theFile->fileSpec ) ;
-                    ((wxFileDataObject*)m_dataObject)->AddFile( name ) ;
+                    if (  firstFileAdded )
+                       ((wxFileDataObject*)m_dataObject)->AddFile( name ) ;
+                    else
+                    {
+                       ((wxFileDataObject*)m_dataObject)->SetData( 0 , name.c_str() ) ;
+                       firstFileAdded = true ; 
+                    }
                   }
                   else
                   {
@@ -259,7 +270,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 +303,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 +347,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 +508,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 )