X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/facd6764872eede45605ba7c9dfa0e1d0c708fa2..f4e8ff28c5ad0c498ee676a3470e615b6479ba3b:/src/mac/carbon/dnd.cpp diff --git a/src/mac/carbon/dnd.cpp b/src/mac/carbon/dnd.cpp index 9ffa32aafa..53b046c2fb 100644 --- a/src/mac/carbon/dnd.cpp +++ b/src/mac/carbon/dnd.cpp @@ -24,6 +24,10 @@ #include "wx/gdicmn.h" #include "wx/mac/private.h" +#ifndef __DARWIN__ + #include +#endif + // ---------------------------------------------------------------------------- // global // ---------------------------------------------------------------------------- @@ -195,31 +199,45 @@ bool wxDropTarget::GetData() Size dataSize ; Ptr theData ; GetFlavorDataSize((DragReference)m_currentDrag, theItem, theType, &dataSize); - if ( theType == 'TEXT' ) + if ( theType == kScrapFlavorTypeText ) { // this increment is only valid for allocating, on the next GetFlavorData // call it is reset again to the original value dataSize++ ; } + else if ( theType == kScrapFlavorTypeUnicode ) + { + // this increment is only valid for allocating, on the next GetFlavorData + // call it is reset again to the original value + dataSize++ ; + dataSize++ ; + } theData = new char[dataSize]; GetFlavorData((DragReference)m_currentDrag, theItem, theType, (void*) theData, &dataSize, 0L); - if( theType == 'TEXT' ) + if( theType == kScrapFlavorTypeText ) + { + theData[dataSize]=0 ; + m_dataObject->SetData( wxDataFormat(wxDF_TEXT), dataSize , theData ); + } + #if wxUSE_UNICODE + else if ( theType == kScrapFlavorTypeUnicode ) { theData[dataSize]=0 ; - wxString convert( theData , wxConvLocal ) ; - m_dataObject->SetData( format, convert.Length() * sizeof(wxChar), (const wxChar*) convert ); + theData[dataSize+1]=0 ; + m_dataObject->SetData( wxDataFormat(wxDF_UNICODETEXT), dataSize , theData ); } + #endif else if ( theType == kDragFlavorTypeHFS ) { HFSFlavor* theFile = (HFSFlavor*) theData ; wxString name = wxMacFSSpec2MacFilename( &theFile->fileSpec ) ; - if ( firstFileAdded ) - ((wxFileDataObject*)m_dataObject)->AddFile( name ) ; - else + if ( !firstFileAdded ) { - ((wxFileDataObject*)m_dataObject)->SetData( 0 , name.c_str() ) ; + // reset file list + ((wxFileDataObject*)m_dataObject)->SetData( 0 , "" ) ; firstFileAdded = true ; } + ((wxFileDataObject*)m_dataObject)->AddFile( name ) ; } else { @@ -463,6 +481,11 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind { wxPoint point(localMouse.h , localMouse.v) ; wxWindow *win = NULL ; + ControlPartCode controlPart ; + ControlRef control = wxMacFindControlUnderMouse( localMouse , + theWindow , &controlPart ) ; + if ( control ) + win = wxFindControlFromMacControl( control ) ; // TODO toplevel->MacGetWindowFromPointSub( point , &win ) ; int localx , localy ; localx = localMouse.h ; @@ -505,7 +528,8 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind x = y = 0 ; win->MacWindowToRootWindow( &x , &y ) ; RgnHandle hiliteRgn = NewRgn() ; - SetRectRgn( hiliteRgn , x , y , x+win->GetSize().x ,y+win->GetSize().y) ; + Rect r = { y , x , y+win->GetSize().y , x+win->GetSize().x } ; + RectRgn( hiliteRgn , &r ) ; ShowDragHilite(theDrag, hiliteRgn, true); DisposeRgn( hiliteRgn ) ; }