Forgot about the drag source delegate, which is the perfect place to put GiveFeedback related handling.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63414 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		@@ -55,6 +55,7 @@ wxDragResult NSDragOperationToWxDragResult(NSDragOperation code)
 | 
			
		||||
- (void)setImplementation: (wxDropSource *)dropSource;
 | 
			
		||||
- (BOOL)finished;
 | 
			
		||||
- (NSDragOperation)code;
 | 
			
		||||
- (void)draggedImage:(NSImage *)anImage movedTo:(NSPoint)aPoint;
 | 
			
		||||
- (void)draggedImage:(NSImage *)anImage endedAt:(NSPoint)aPoint operation:(NSDragOperation)operation;
 | 
			
		||||
@end
 | 
			
		||||
 | 
			
		||||
@@ -84,6 +85,48 @@ wxDragResult NSDragOperationToWxDragResult(NSDragOperation code)
 | 
			
		||||
    return resultCode;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)draggedImage:(NSImage *)anImage movedTo:(NSPoint)aPoint
 | 
			
		||||
{
 | 
			
		||||
    bool optionDown = GetCurrentKeyModifiers() & optionKey;
 | 
			
		||||
    wxDragResult result = optionDown ? wxDragCopy : wxDragMove;
 | 
			
		||||
    
 | 
			
		||||
    if (wxDropSource* source = impl)
 | 
			
		||||
    {
 | 
			
		||||
        if (!source->GiveFeedback(result))
 | 
			
		||||
        {
 | 
			
		||||
            wxStockCursor cursorID = wxCURSOR_NONE;
 | 
			
		||||
 | 
			
		||||
            switch (result)
 | 
			
		||||
            {
 | 
			
		||||
                case wxDragCopy:
 | 
			
		||||
                    cursorID = wxCURSOR_COPY_ARROW;
 | 
			
		||||
                    break;
 | 
			
		||||
 | 
			
		||||
                case wxDragMove:
 | 
			
		||||
                    cursorID = wxCURSOR_ARROW;
 | 
			
		||||
                    break;
 | 
			
		||||
 | 
			
		||||
                case wxDragNone:
 | 
			
		||||
                    cursorID = wxCURSOR_NO_ENTRY;
 | 
			
		||||
                    break;
 | 
			
		||||
 | 
			
		||||
                case wxDragError:
 | 
			
		||||
                case wxDragLink:
 | 
			
		||||
                case wxDragCancel:
 | 
			
		||||
                default:
 | 
			
		||||
                    // put these here to make gcc happy
 | 
			
		||||
                    ;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (cursorID != wxCURSOR_NONE)
 | 
			
		||||
            {
 | 
			
		||||
                wxCursor cursor( cursorID );
 | 
			
		||||
                cursor.MacInstall();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
- (void)draggedImage:(NSImage *)anImage endedAt:(NSPoint)aPoint operation:(NSDragOperation)operation
 | 
			
		||||
{
 | 
			
		||||
    resultCode = operation;
 | 
			
		||||
 
 | 
			
		||||
@@ -879,45 +879,6 @@ unsigned int wxWidgetCocoaImpl::draggingUpdated(void* s, WXWidget WXUNUSED(slf),
 | 
			
		||||
        result = wxDragCopy;
 | 
			
		||||
    else if ( sourceDragMask & NSDragOperationMove )
 | 
			
		||||
        result = wxDragMove;
 | 
			
		||||
 | 
			
		||||
    // FIXME: This doesn't seem the right place for the code, as GiveFeedback
 | 
			
		||||
    // will only get called when the drop target is inside the app itself
 | 
			
		||||
    // but at least some cases will work now.
 | 
			
		||||
    if (wxDropSource* source = wxDropSource::GetCurrentDropSource())
 | 
			
		||||
    {
 | 
			
		||||
        if (!source->GiveFeedback(result))
 | 
			
		||||
        {
 | 
			
		||||
            wxStockCursor cursorID = wxCURSOR_NONE;
 | 
			
		||||
 | 
			
		||||
            switch (result)
 | 
			
		||||
            {
 | 
			
		||||
                case wxDragCopy:
 | 
			
		||||
                    cursorID = wxCURSOR_COPY_ARROW;
 | 
			
		||||
                    break;
 | 
			
		||||
 | 
			
		||||
                case wxDragMove:
 | 
			
		||||
                    cursorID = wxCURSOR_ARROW;
 | 
			
		||||
                    break;
 | 
			
		||||
 | 
			
		||||
                case wxDragNone:
 | 
			
		||||
                    cursorID = wxCURSOR_NO_ENTRY;
 | 
			
		||||
                    break;
 | 
			
		||||
 | 
			
		||||
                case wxDragError:
 | 
			
		||||
                case wxDragLink:
 | 
			
		||||
                case wxDragCancel:
 | 
			
		||||
                default:
 | 
			
		||||
                    // put these here to make gcc happy
 | 
			
		||||
                    ;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (cursorID != wxCURSOR_NONE)
 | 
			
		||||
            {
 | 
			
		||||
                wxCursor cursor( cursorID );
 | 
			
		||||
                cursor.MacInstall();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    PasteboardRef pboardRef;
 | 
			
		||||
    PasteboardCreate((CFStringRef)[pboard name], &pboardRef);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user