]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/dnd.cpp
try to create smaller executables
[wxWidgets.git] / src / mac / dnd.cpp
index e81ad045d29757e8b92c9b029d286972643bbaf8..09a2f1d373bf30020cfff089809972dccbfac453 100644 (file)
@@ -86,7 +86,7 @@ bool wxDropTarget::CurrentDragHasSupportedFormat()
       
       if ( data )
       {
-        int formatcount = data->GetFormatCount() ;
+        size_t formatcount = data->GetFormatCount() ;
         wxDataFormat *array = new wxDataFormat[ formatcount  ];
         data->GetAllFormats( array );
         for (size_t i = 0; !supported && i < formatcount ; i++)
@@ -142,7 +142,7 @@ bool wxDropTarget::GetData()
       
       if ( data )
       {
-        int formatcount = data->GetFormatCount() ;
+        size_t formatcount = data->GetFormatCount() ;
         wxDataFormat *array = new wxDataFormat[ formatcount  ];
         data->GetAllFormats( array );
         for (size_t i = 0; !transferred && i < formatcount ; i++)
@@ -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") );
 
@@ -272,7 +276,7 @@ wxDragResult wxDropSource::DoDragDrop( bool allowMove )
     OSErr result;
     DragReference theDrag;
     RgnHandle dragRegion;
-    if (result = NewDrag(&theDrag)) 
+    if ((result = NewDrag(&theDrag)))
     {
         return wxDragNone ;
     }
@@ -281,7 +285,7 @@ wxDragResult wxDropSource::DoDragDrop( bool allowMove )
     wxDataFormat *formats = new wxDataFormat[formatCount] ;
     m_data->GetAllFormats( formats ) ;
     ItemReference theItem = 1 ;
-    for ( int i = 0 ; i < formatCount ; ++i )
+    for ( size_t i = 0 ; i < formatCount ; ++i )
     {
         size_t dataSize = m_data->GetDataSize( formats[i] ) ;
         Ptr dataPtr = new char[dataSize] ;
@@ -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 ;
     
@@ -396,7 +407,6 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
     MacTrackingGlobals* trackingGlobals = (MacTrackingGlobals*) handlerRefCon;
     Point mouse, localMouse;
     DragAttributes attributes;
-    RgnHandle hiliteRgn;
     GetDragAttributes(theDrag, &attributes);
     wxTopLevelWindowMac* toplevel = wxFindWinFromMacWindow( theWindow ) ; 
     switch(theMessage) 
@@ -491,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 )