diff --git a/AppKit/CPDragServer.j b/AppKit/CPDragServer.j index bf3970f23..7fbf3c7d6 100644 --- a/AppKit/CPDragServer.j +++ b/AppKit/CPDragServer.j @@ -25,6 +25,8 @@ @import @import +#import "CoreGraphics/CGGeometry.h" + #define DRAGGING_WINDOW(anObject) ([anObject isKindOfClass:[CPWindow class]] ? anObject : [anObject window]) @@ -289,13 +291,14 @@ var CPDragServerUpdateDragging = function(anEvent) @implementation CPWindow (CPDraggingAdditions) /* @ignore */ -- (id)_dragHitTest:(CPPoint)aPoint pasteboard:(CPPasteboard)aPasteboard +- (id)_dragHitTest:(CGPoint)aPoint pasteboard:(CPPasteboard)aPasteboard { if (![self containsPoint:aPoint]) return nil; - - var hitView = [_windowView hitTest:aPoint]; - + + var adjustedPoint = _CGPointMake(aPoint.x - _CGRectGetMinX(_frame), aPoint.y - _CGRectGetMinY(_frame)), + hitView = [_windowView hitTest:adjustedPoint]; + while (hitView && ![aPasteboard availableTypeFromArray:[hitView registeredDraggedTypes]]) hitView = [hitView superview]; diff --git a/AppKit/Platform/DOM/CPDOMWindowBridge.j b/AppKit/Platform/DOM/CPDOMWindowBridge.j index e8be62fd5..4bbaeee3d 100644 --- a/AppKit/Platform/DOM/CPDOMWindowBridge.j +++ b/AppKit/Platform/DOM/CPDOMWindowBridge.j @@ -316,14 +316,7 @@ var CPDOMWindowGetFrame, var theWindow = windows[windowCount]; if ([theWindow containsPoint:aPoint]) - { - var object = [theWindow _dragHitTest:aPoint pasteboard:aPasteboard]; - - if (object) - return object; - else - return nil; - } + return [theWindow _dragHitTest:aPoint pasteboard:aPasteboard]; } }