X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/03647350fc7cd141953c72e0284e928847d30f44..3988b3e819a2e336b8fcd90214c949f61069279b:/src/osx/carbon/dnd.cpp diff --git a/src/osx/carbon/dnd.cpp b/src/osx/carbon/dnd.cpp index 5ece3e0d09..29b9965bcc 100644 --- a/src/osx/carbon/dnd.cpp +++ b/src/osx/carbon/dnd.cpp @@ -40,146 +40,29 @@ MacTrackingGlobals gTrackingGlobals; void wxMacEnsureTrackingHandlersInstalled(); -//---------------------------------------------------------------------------- -// wxDropTarget -//---------------------------------------------------------------------------- - -wxDropTarget::wxDropTarget( wxDataObject *data ) - : wxDropTargetBase( data ) -{ - wxMacEnsureTrackingHandlersInstalled(); -} - -wxDragResult wxDropTarget::OnDragOver( - wxCoord WXUNUSED(x), wxCoord WXUNUSED(y), - wxDragResult def ) -{ - 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) - return false; - - return CurrentDragHasSupportedFormat(); -} - -wxDragResult wxDropTarget::OnData( - wxCoord WXUNUSED(x), wxCoord WXUNUSED(y), - wxDragResult def ) +OSStatus wxMacPromiseKeeper(PasteboardRef WXUNUSED(inPasteboard), + PasteboardItemID WXUNUSED(inItem), + CFStringRef WXUNUSED(inFlavorType), + void * WXUNUSED(inContext)) { - if (m_dataObject == NULL) - return wxDragNone; + OSStatus err = noErr; - if (!CurrentDragHasSupportedFormat()) - return wxDragNone; + // we might add promises here later, inContext is the wxDropSource* - return GetData() ? def : wxDragNone; + return err; } -bool wxDropTarget::CurrentDragHasSupportedFormat() +wxDropTarget::wxDropTarget( wxDataObject *data ) + : wxDropTargetBase( data ) { - bool supported = false; - if (m_dataObject == NULL) - return false; - - if ( gTrackingGlobals.m_currentSource != NULL ) - { - wxDataObject* data = gTrackingGlobals.m_currentSource->GetDataObject(); - - if ( data ) - { - size_t formatcount = data->GetFormatCount(); - wxDataFormat *array = new wxDataFormat[formatcount]; - data->GetAllFormats( array ); - for (size_t i = 0; !supported && i < formatcount; i++) - { - wxDataFormat format = array[i]; - if ( m_dataObject->IsSupported( format ) ) - { - supported = true; - break; - } - } - - delete [] array; - } - } - - if ( !supported ) - { - supported = m_dataObject->HasDataInPasteboard( m_currentDragPasteboard ); - } - - return supported; + wxMacEnsureTrackingHandlersInstalled(); } -bool wxDropTarget::GetData() -{ - if (m_dataObject == NULL) - return false; - - if ( !CurrentDragHasSupportedFormat() ) - return false; - - bool transferred = false; - if ( gTrackingGlobals.m_currentSource != NULL ) - { - wxDataObject* data = gTrackingGlobals.m_currentSource->GetDataObject(); - - if (data != NULL) - { - size_t formatcount = data->GetFormatCount(); - wxDataFormat *array = new wxDataFormat[formatcount]; - data->GetAllFormats( array ); - for (size_t i = 0; !transferred && i < formatcount; i++) - { - wxDataFormat format = array[i]; - if ( m_dataObject->IsSupported( format ) ) - { - int size = data->GetDataSize( format ); - transferred = true; - - if (size == 0) - { - m_dataObject->SetData( format, 0, 0 ); - } - else - { - char *d = new char[size]; - data->GetDataHere( format, (void*)d ); - m_dataObject->SetData( format, size, d ); - delete [] d; - } - } - } - - delete [] array; - } - } - - if ( !transferred ) - { - transferred = m_dataObject->GetFromPasteboard( m_currentDragPasteboard ); - } - - return transferred; -} //------------------------------------------------------------------------- // wxDropSource //------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// drag request - wxDropSource::wxDropSource(wxWindow *win, const wxCursor &cursorCopy, const wxCursor &cursorMove, @@ -191,6 +74,11 @@ wxDropSource::wxDropSource(wxWindow *win, m_window = win; } +wxDropSource* wxDropSource::GetCurrentDropSource() +{ + return gTrackingGlobals.m_currentSource; +} + wxDropSource::wxDropSource(wxDataObject& data, wxWindow *win, const wxCursor &cursorCopy, @@ -204,22 +92,6 @@ wxDropSource::wxDropSource(wxDataObject& data, m_window = win; } -wxDropSource::~wxDropSource() -{ -} - -OSStatus wxMacPromiseKeeper(PasteboardRef WXUNUSED(inPasteboard), - PasteboardItemID WXUNUSED(inItem), - CFStringRef WXUNUSED(inFlavorType), - void * WXUNUSED(inContext)) -{ - OSStatus err = noErr; - - // we might add promises here later, inContext is the wxDropSource* - - return err; -} - wxDragResult wxDropSource::DoDragDrop(int flags) { wxASSERT_MSG( m_data, wxT("Drop source: no data") ); @@ -227,7 +99,6 @@ 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; @@ -302,41 +173,24 @@ wxDragResult wxDropSource::DoDragDrop(int flags) DisposeDrag( theDrag ); CFRelease( pasteboard ); gTrackingGlobals.m_currentSource = NULL; -#else - wxUnusedVar(flags); -#endif return gTrackingGlobals.m_result; } -bool wxDropSource::MacInstallDefaultCursor(wxDragResult effect) -{ - const wxCursor& cursor = GetCursor(effect); - bool result = cursor.Ok(); - - if ( result ) - cursor.MacInstall(); - - return result; -} - 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; @@ -349,10 +203,8 @@ void wxMacEnsureTrackingHandlersInstalled() gTrackingGlobalsInstalled = true; } -#endif } -#if wxOSX_USE_CARBON pascal OSErr wxMacWindowDragTrackingHandler( DragTrackingMessage theMessage, WindowPtr theWindow, void *handlerRefCon, DragReference theDrag ) @@ -420,9 +272,7 @@ pascal OSErr wxMacWindowDragTrackingHandler( // this window is left if ( trackingGlobals->m_currentTarget ) { -#ifndef __LP64__ HideDragHilite( theDrag ); -#endif trackingGlobals->m_currentTarget->SetCurrentDragPasteboard( pasteboard ); trackingGlobals->m_currentTarget->OnLeave(); trackingGlobals->m_currentTarget = NULL; @@ -451,9 +301,7 @@ pascal OSErr wxMacWindowDragTrackingHandler( RgnHandle hiliteRgn = NewRgn(); Rect r = { y, x, y + win->GetSize().y, x + win->GetSize().x }; RectRgn( hiliteRgn, &r ); -#ifndef __LP64__ ShowDragHilite( theDrag, hiliteRgn, true ); -#endif DisposeRgn( hiliteRgn ); } } @@ -516,9 +364,7 @@ pascal OSErr wxMacWindowDragTrackingHandler( { trackingGlobals->m_currentTarget->SetCurrentDragPasteboard( pasteboard ); trackingGlobals->m_currentTarget->OnLeave(); -#ifndef __LP64__ HideDragHilite( theDrag ); -#endif trackingGlobals->m_currentTarget = NULL; } trackingGlobals->m_currentTargetWindow = NULL; @@ -572,7 +418,6 @@ pascal OSErr wxMacWindowDragReceiveHandler( return noErr; } -#endif #endif // wxUSE_DRAG_AND_DROP