X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4913272f9cdead94a6d1470e51d6fb14946b50e0..a3fd36e7c3ec8f9ee727e203a68286f4b763593f:/src/mac/carbon/dnd.cpp diff --git a/src/mac/carbon/dnd.cpp b/src/mac/carbon/dnd.cpp index 29c7ff768b..6f5a325730 100644 --- a/src/mac/carbon/dnd.cpp +++ b/src/mac/carbon/dnd.cpp @@ -37,6 +37,8 @@ typedef struct wxWindow *m_currentTargetWindow; wxDropTarget *m_currentTarget; wxDropSource *m_currentSource; + wxDragResult m_result; + int m_flags; } MacTrackingGlobals; MacTrackingGlobals gTrackingGlobals; @@ -455,18 +457,15 @@ wxDragResult wxDropSource::DoDragDrop(int flags) // only when drag was successfully completed gTrackingGlobals.m_currentSource = this; + gTrackingGlobals.m_result = wxDragNone; + gTrackingGlobals.m_flags = flags; + TrackDrag( theDrag, ev, dragRegion ); DisposeRgn( dragRegion ); DisposeDrag( theDrag ); gTrackingGlobals.m_currentSource = NULL; - bool optionDown = GetCurrentKeyModifiers() & optionKey; - wxDragResult dndresult = wxDragCopy; - if ( flags != wxDrag_CopyOnly ) - // on mac the option key is always the indication for copy - dndresult = optionDown ? wxDragCopy : wxDragMove; - - return dndresult; + return gTrackingGlobals.m_result; } bool wxDropSource::MacInstallDefaultCursor(wxDragResult effect) @@ -704,13 +703,20 @@ pascal OSErr wxMacWindowDragReceiveHandler( trackingGlobals->m_currentTargetWindow->MacRootWindowToWindow( &localx, &localy ); if ( trackingGlobals->m_currentTarget->OnDrop( localx, localy ) ) { - bool optionDown = GetCurrentKeyModifiers() & optionKey; - wxDragResult result = optionDown ? wxDragCopy : wxDragMove; - trackingGlobals->m_currentTarget->OnData( localx, localy, result ); + // the option key indicates copy in Mac UI, if it's not pressed do + // move by default if it's allowed at all + wxDragResult + result = !(trackingGlobals->m_flags & wxDrag_AllowMove) || + (GetCurrentKeyModifiers() & optionKey) + ? wxDragCopy + : wxDragMove; + trackingGlobals->m_result = + trackingGlobals->m_currentTarget->OnData( localx, localy, result ); } } return noErr; } -#endif +#endif // wxUSE_DRAG_AND_DROP +