X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6ac23e25b85468c7885f6ab43ca0a45f6458af2e..ea8ca011a351c6aaa4009bedbf0cec19a7c57d98:/src/mac/carbon/dnd.cpp diff --git a/src/mac/carbon/dnd.cpp b/src/mac/carbon/dnd.cpp index 52b0cbbf90..49e61ac109 100644 --- a/src/mac/carbon/dnd.cpp +++ b/src/mac/carbon/dnd.cpp @@ -9,10 +9,6 @@ // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "dnd.h" -#endif - #include "wx/wxprec.h" #if wxUSE_DRAG_AND_DROP @@ -186,11 +182,25 @@ bool wxDropTarget::GetData() UInt16 flavors = 0 ; GetDragItemReferenceNumber((DragReference)m_currentDrag, index, &theItem); CountDragItemFlavors( (DragReference)m_currentDrag, theItem , &flavors ) ; + bool hasPreferredFormat = false ; + wxDataFormat preferredFormat = m_dataObject->GetPreferredFormat( wxDataObject::Set ) ; + + for ( UInt16 flavor = 1 ; flavor <= flavors ; ++flavor ) + { + result = GetFlavorType((DragReference)m_currentDrag, theItem, flavor , &theType); + wxDataFormat format(theType) ; + if ( preferredFormat == format ) + { + hasPreferredFormat = true ; + break ; + } + } + for ( UInt16 flavor = 1 ; flavor <= flavors ; ++flavor ) { result = GetFlavorType((DragReference)m_currentDrag, theItem, flavor , &theType); wxDataFormat format(theType) ; - if ( m_dataObject->IsSupportedFormat( format ) ) + if ( (hasPreferredFormat && format==preferredFormat) || (!hasPreferredFormat && m_dataObject->IsSupportedFormat( format ))) { FlavorFlags theFlags; result = GetFlavorFlags((DragReference)m_currentDrag, theItem, theType, &theFlags); @@ -287,7 +297,7 @@ wxDropSource::~wxDropSource() } -wxDragResult wxDropSource::DoDragDrop(int WXUNUSED(flags)) +wxDragResult wxDropSource::DoDragDrop(int flags) { wxASSERT_MSG( m_data, wxT("Drop source: no data") ); @@ -402,7 +412,12 @@ wxDragResult wxDropSource::DoDragDrop(int WXUNUSED(flags)) gTrackingGlobals.m_currentSource = NULL ; bool optionDown = GetCurrentKeyModifiers() & optionKey ; - wxDragResult dndresult = optionDown ? wxDragCopy : wxDragMove; + wxDragResult dndresult = wxDragCopy ; + if ( flags != wxDrag_CopyOnly ) + { + // on mac the option key is always the indication for copy + dndresult = optionDown ? wxDragCopy : wxDragMove; + } return dndresult; } @@ -478,20 +493,20 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind -// if (attributes & kDragHasLeftSenderWindow) { -// wxPoint point(localMouse.h , localMouse.v) ; wxWindow *win = NULL ; ControlPartCode controlPart ; ControlRef control = wxMacFindControlUnderMouse( toplevel , localMouse , theWindow , &controlPart ) ; if ( control ) win = wxFindControlFromMacControl( control ) ; - // TODO toplevel->MacGetWindowFromPointSub( point , &win ) ; + else + win = toplevel ; + int localx , localy ; localx = localMouse.h ; localy = localMouse.v ; - //TODO : should we use client coordinates + if ( win ) win->MacRootWindowToWindow( &localx , &localy ) ; if ( win != trackingGlobals->m_currentTargetWindow ) @@ -582,8 +597,7 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind } } - } - // MyTrackItemUnderMouse(localMouse, theWindow); + } break; case kDragTrackingLeaveWindow: if (trackingGlobals->m_currentTarget)