// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma implementation "dnd.h"
-#endif
-
#include "wx/wxprec.h"
#if wxUSE_DRAG_AND_DROP
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);
}
-wxDragResult wxDropSource::DoDragDrop(int WXUNUSED(flags))
+wxDragResult wxDropSource::DoDragDrop(int flags)
{
wxASSERT_MSG( m_data, wxT("Drop source: no data") );
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;
}
-// 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 )
}
}
- }
- // MyTrackItemUnderMouse(localMouse, theWindow);
+ }
break;
case kDragTrackingLeaveWindow:
if (trackingGlobals->m_currentTarget)