X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/489468feaa08b8f504735eecca522fb8d0f825d2..55410bb4f67febe1ca20654f078ea4fb9a6223ae:/src/osx/carbon/dnd.cpp?ds=sidebyside diff --git a/src/osx/carbon/dnd.cpp b/src/osx/carbon/dnd.cpp index 11709e12ce..bc0f7e5485 100644 --- a/src/osx/carbon/dnd.cpp +++ b/src/osx/carbon/dnd.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: src/mac/carbon/dnd.cpp +// Name: src/osx/carbon/dnd.cpp // Purpose: wxDropTarget, wxDropSource implementations // Author: Stefan Csomor // Modified by: @@ -21,7 +21,7 @@ #include "wx/gdicmn.h" #endif // WX_PRECOMP -#include "wx/mac/private.h" +#include "wx/osx/private.h" // ---------------------------------------------------------------------------- // globals @@ -57,6 +57,12 @@ wxDragResult wxDropTarget::OnDragOver( return CurrentDragHasSupportedFormat() ? def : wxDragNone; } +wxDataFormat wxDropTarget::GetMatchingPair() +{ + wxFAIL_MSG("wxDropTarget::GetMatchingPair() not implemented in src/osx/carbon/dnd.cpp"); + return wxDF_INVALID; +} + bool wxDropTarget::OnDrop( wxCoord WXUNUSED(x), wxCoord WXUNUSED(y) ) { if (m_dataObject == NULL) @@ -109,12 +115,7 @@ bool wxDropTarget::CurrentDragHasSupportedFormat() if ( !supported ) { - PasteboardRef pasteboard; - - if ( GetDragPasteboard( (DragReference)m_currentDrag, &pasteboard ) == noErr ) - { - supported = m_dataObject->HasDataInPasteboard( pasteboard ); - } + supported = m_dataObject->HasDataInPasteboard( m_currentDragPasteboard ); } return supported; @@ -166,12 +167,7 @@ bool wxDropTarget::GetData() if ( !transferred ) { - PasteboardRef pasteboard; - - if ( GetDragPasteboard( (DragReference)m_currentDrag, &pasteboard ) == noErr ) - { - transferred = m_dataObject->GetFromPasteboard( pasteboard ); - } + transferred = m_dataObject->GetFromPasteboard( m_currentDragPasteboard ); } return transferred; @@ -231,6 +227,7 @@ wxDragResult wxDropSource::DoDragDrop(int flags) if ((m_data == NULL) || (m_data->GetFormatCount() == 0)) return (wxDragResult)wxDragNone; +#if wxOSX_USE_CARBON DragReference theDrag; RgnHandle dragRegion; OSStatus err = noErr; @@ -305,6 +302,7 @@ wxDragResult wxDropSource::DoDragDrop(int flags) DisposeDrag( theDrag ); CFRelease( pasteboard ); gTrackingGlobals.m_currentSource = NULL; +#endif return gTrackingGlobals.m_result; } @@ -325,15 +323,18 @@ bool gTrackingGlobalsInstalled = false; // passing the globals via refcon is not needed by the CFM and later architectures anymore // but I'll leave it in there, just in case... +#if wxOSX_USE_CARBON pascal OSErr wxMacWindowDragTrackingHandler( DragTrackingMessage theMessage, WindowPtr theWindow, void *handlerRefCon, DragReference theDrag ); pascal OSErr wxMacWindowDragReceiveHandler( WindowPtr theWindow, void *handlerRefCon, DragReference theDrag ); +#endif void wxMacEnsureTrackingHandlersInstalled() { +#if wxOSX_USE_CARBON if ( !gTrackingGlobalsInstalled ) { OSStatus err; @@ -346,8 +347,10 @@ void wxMacEnsureTrackingHandlersInstalled() gTrackingGlobalsInstalled = true; } +#endif } +#if wxOSX_USE_CARBON pascal OSErr wxMacWindowDragTrackingHandler( DragTrackingMessage theMessage, WindowPtr theWindow, void *handlerRefCon, DragReference theDrag ) @@ -358,8 +361,9 @@ pascal OSErr wxMacWindowDragTrackingHandler( DragAttributes attributes; GetDragAttributes( theDrag, &attributes ); - - wxNonOwnedWindow* toplevel = wxFindWinFromMacWindow( theWindow ); + PasteboardRef pasteboard = 0; + GetDragPasteboard( theDrag, &pasteboard ); + wxNonOwnedWindow* toplevel = wxNonOwnedWindow::GetFromWXWindow( (WXWindow) theWindow ); bool optionDown = GetCurrentKeyModifiers() & optionKey; wxDragResult result = optionDown ? wxDragCopy : wxDragMove; @@ -385,15 +389,18 @@ pascal OSErr wxMacWindowDragTrackingHandler( break; GetDragMouse( theDrag, &mouse, 0L ); - localMouse = mouse; - wxMacGlobalToLocal( theWindow, &localMouse ); + int x = mouse.h ; + int y = mouse.v ; + toplevel->GetNonOwnedPeer()->ScreenToWindow( &x, &y ); + localMouse.h = x; + localMouse.v = y; { wxWindow *win = NULL; ControlPartCode controlPart; ControlRef control = FindControlUnderMouse( localMouse, theWindow, &controlPart ); if ( control ) - win = wxFindControlFromMacControl( control ); + win = wxFindWindowFromWXWidget( (WXWidget) control ); else win = toplevel; @@ -413,7 +420,7 @@ pascal OSErr wxMacWindowDragTrackingHandler( #ifndef __LP64__ HideDragHilite( theDrag ); #endif - trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ); + trackingGlobals->m_currentTarget->SetCurrentDragPasteboard( pasteboard ); trackingGlobals->m_currentTarget->OnLeave(); trackingGlobals->m_currentTarget = NULL; trackingGlobals->m_currentTargetWindow = NULL; @@ -428,7 +435,7 @@ pascal OSErr wxMacWindowDragTrackingHandler( { if ( trackingGlobals->m_currentTarget ) { - trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ); + trackingGlobals->m_currentTarget->SetCurrentDragPasteboard( pasteboard ); result = trackingGlobals->m_currentTarget->OnEnter( localx, localy, result ); } @@ -453,7 +460,7 @@ pascal OSErr wxMacWindowDragTrackingHandler( { if ( trackingGlobals->m_currentTarget ) { - trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ); + trackingGlobals->m_currentTarget->SetCurrentDragPasteboard( pasteboard ); result = trackingGlobals->m_currentTarget->OnDragOver( localx, localy, result ); } } @@ -463,7 +470,7 @@ pascal OSErr wxMacWindowDragTrackingHandler( { if ( !trackingGlobals->m_currentSource->MacInstallDefaultCursor( result ) ) { - int cursorID = wxCURSOR_NONE; + wxStockCursor cursorID = wxCURSOR_NONE; switch (result) { @@ -503,7 +510,7 @@ pascal OSErr wxMacWindowDragTrackingHandler( if (trackingGlobals->m_currentTarget) { - trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ); + trackingGlobals->m_currentTarget->SetCurrentDragPasteboard( pasteboard ); trackingGlobals->m_currentTarget->OnLeave(); #ifndef __LP64__ HideDragHilite( theDrag ); @@ -531,12 +538,16 @@ pascal OSErr wxMacWindowDragReceiveHandler( Point mouse, localMouse; int localx, localy; - trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ); + PasteboardRef pasteboard = 0; + GetDragPasteboard( theDrag, &pasteboard ); + trackingGlobals->m_currentTarget->SetCurrentDragPasteboard( pasteboard ); GetDragMouse( theDrag, &mouse, 0L ); localMouse = mouse; - wxMacGlobalToLocal( theWindow, &localMouse ); localx = localMouse.h; localy = localMouse.v; + wxNonOwnedWindow* tlw = wxNonOwnedWindow::GetFromWXWindow((WXWindow) theWindow); + if ( tlw ) + tlw->GetNonOwnedPeer()->ScreenToWindow( &localx, &localy ); // TODO : should we use client coordinates? if ( trackingGlobals->m_currentTargetWindow ) @@ -557,6 +568,7 @@ pascal OSErr wxMacWindowDragReceiveHandler( return noErr; } +#endif #endif // wxUSE_DRAG_AND_DROP