X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3538f4df99bc96e73fada5e671681033354dbec0..a8f4cabe1ea3d5390f1353c0bf5649fa1476e08b:/src/mac/dnd.cpp diff --git a/src/mac/dnd.cpp b/src/mac/dnd.cpp index 7ab73a19d1..4033d33e01 100644 --- a/src/mac/dnd.cpp +++ b/src/mac/dnd.cpp @@ -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 )