Skip to content

Commit

Permalink
Merge branch 'coreteam-0.7b' into 0.7b
Browse files Browse the repository at this point in the history
  • Loading branch information
tbalthazar committed Apr 2, 2009
2 parents 5cd17d7 + 390208d commit 36d493e
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 27 deletions.
22 changes: 16 additions & 6 deletions AppKit/CPDragServer.j
Expand Up @@ -25,6 +25,8 @@
@import <AppKit/CPPasteboard.j>
@import <AppKit/CPImageView.j>

#import "CoreGraphics/CGGeometry.h"


#define DRAGGING_WINDOW(anObject) ([anObject isKindOfClass:[CPWindow class]] ? anObject : [anObject window])

Expand Down Expand Up @@ -289,20 +291,28 @@ 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])
// If none of our views or ourselves has registered for drag events...
if (!_inclusiveRegisteredDraggedTypes)
return nil;

var hitView = [_windowView hitTest:aPoint];


// We don't need to do this because the only place this gets called
// -_dragHitTest: in CPDOMWindowBridge does this already. Perhaps to
// be safe?
// if (![self containsPoint:aPoint])
// return nil;

var adjustedPoint = _CGPointMake(aPoint.x - _CGRectGetMinX(_frame), aPoint.y - _CGRectGetMinY(_frame)),
hitView = [_windowView hitTest:adjustedPoint];

while (hitView && ![aPasteboard availableTypeFromArray:[hitView registeredDraggedTypes]])
hitView = [hitView superview];

if (hitView)
return hitView;

if ([aPasteboard availableTypeFromArray:_registeredDraggedTypes])
if ([aPasteboard availableTypeFromArray:[self registeredDraggedTypes]])
return self;

return nil;
Expand Down
42 changes: 33 additions & 9 deletions AppKit/CPView.j
Expand Up @@ -134,7 +134,8 @@ var DOMElementPrototype = nil,
CGAffineTransform _boundsTransform;
CGAffineTransform _inverseBoundsTransform;

CPArray _registeredDraggedTypes;
CPSet _registeredDraggedTypes;
CPArray _registeredDraggedTypesArray;

BOOL _isHidden;
BOOL _hitTests;
Expand Down Expand Up @@ -222,14 +223,14 @@ var DOMElementPrototype = nil,
height = _CGRectGetHeight(aFrame);

_subviews = [];
_registeredDraggedTypes = [CPSet set];
_registeredDraggedTypesArray = [];

_tag = -1;

_frame = _CGRectMakeCopy(aFrame);
_bounds = _CGRectMake(0.0, 0.0, width, height);

_registeredDraggedTypes = [];

_autoresizingMask = CPViewNotSizable;
_autoresizesSubviews = YES;

Expand Down Expand Up @@ -439,11 +440,19 @@ var DOMElementPrototype = nil,

// Notify the view and its subviews
[self viewWillMoveToWindow:aWindow];


// Unregister the drag events from the current window and register
// them in the new window.
if (_registeredDraggedTypes)
{
[_window _noteUnregisteredDraggedTypes:_registeredDraggedTypes];
[aWindow _noteRegisteredDraggedTypes:_registeredDraggedTypes];
}

_window = aWindow;

var count = [_subviews count];

while (count--)
[_subviews[count] _setWindow:aWindow];

Expand Down Expand Up @@ -1397,7 +1406,16 @@ setBoundsOrigin:
*/
- (void)registerForDraggedTypes:(CPArray)pasteboardTypes
{
_registeredDraggedTypes = [pasteboardTypes copy];
if (!pasteboardTypes)
return;

var theWindow = [self window];

[theWindow _noteUnregisteredDraggedTypes:_registeredDraggedTypes];
[_registeredDraggedTypes addObjectsFromArray:pasteboardTypes]
[theWindow _noteRegisteredDraggedTypes:_registeredDraggedTypes];

_registeredDraggedTypesArray = nil;
}

/*!
Expand All @@ -1406,15 +1424,21 @@ setBoundsOrigin:
*/
- (CPArray)registeredDraggedTypes
{
return _registeredDraggedTypes;
if (!_registeredDraggedTypesArray)
_registeredDraggedTypesArray = [_registeredDraggedTypes allObjects];

return _registeredDraggedTypesArray;
}

/*!
Resets the array of acceptable data types for a dragging operation.
*/
- (void)unregisterDraggedTypes
{
_registeredDraggedTypes = nil;
[[self window] _noteUnregisteredDraggedTypes:_registeredDraggedTypes];

_registeredDraggedTypes = [CPSet set];
_registeredDraggedTypesArray = [];
}

/*!
Expand Down
48 changes: 44 additions & 4 deletions AppKit/CPWindow/CPWindow.j
Expand Up @@ -20,6 +20,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/

@import <Foundation/CPCountedSet.j>
@import <Foundation/CPNotificationCenter.j>
@import <Foundation/CPUndoManager.j>

Expand Down Expand Up @@ -271,7 +272,9 @@ var CPWindowSaveImage = nil,
CPUndoManager _undoManager;
CPURL _representedURL;

CPArray _registeredDraggedTypes;
CPSet _registeredDraggedTypes;
CPArray _registeredDraggedTypesArray;
CPCountedSet _inclusiveRegisteredDraggedTypes;

// Bridge Support
#if PLATFORM(DOM)
Expand Down Expand Up @@ -348,6 +351,8 @@ CPTexturedBackgroundWindowMask
if (self)
{
_isFullBridge = NO;
_registeredDraggedTypes = [CPSet set];
_registeredDraggedTypesArray = [];

// Set up our window number.
_windowNumber = [CPApp._windows count];
Expand Down Expand Up @@ -1296,6 +1301,28 @@ CPTexturedBackgroundWindowMask
[[CPDragServer sharedDragServer] dragImage:anImage fromWindow:self at:[self convertBaseToBridge:imageLocation] offset:mouseOffset event:anEvent pasteboard:aPasteboard source:aSourceObject slideBack:slideBack];
}

- (void)_noteRegisteredDraggedTypes:(CPSet)pasteboardTypes
{
if (!pasteboardTypes)
return;

if (!_inclusiveRegisteredDraggedTypes)
_inclusiveRegisteredDraggedTypes = [CPCountedSet set];

[_inclusiveRegisteredDraggedTypes unionSet:pasteboardTypes];
}

- (void)_noteUnregisteredDraggedTypes:(CPArray)pasteboardTypes
{
if (!pasteboardTypes)
return;

[_inclusiveRegisteredDraggedTypes minusSet:pasteboardTypes]

if ([_inclusiveRegisteredDraggedTypes count] === 0)
_inclusiveRegisteredDraggedTypes = nil;
}

/*!
Initiates a drag operation from the receiver to another view that accepts dragged data.
@param aView the view to be dragged
Expand All @@ -1317,7 +1344,14 @@ CPTexturedBackgroundWindowMask
*/
- (void)registerForDraggedTypes:(CPArray)pasteboardTypes
{
_registeredDraggedTypes = [pasteboardTypes copy];
if (!pasteboardTypes)
return;

[self _noteUnregisteredDraggedTypes:_registeredDraggedTypes];
[_registeredDraggedTypes addObjectsFromArray:pasteboardTypes]
[self _noteRegisteredDraggedTypes:_registeredDraggedTypes];

_registeredDraggedTypesArray = nil;
}

/*!
Expand All @@ -1326,15 +1360,21 @@ CPTexturedBackgroundWindowMask
*/
- (CPArray)registeredDraggedTypes
{
return _registeredDraggedTypes;
if (!_registeredDraggedTypesArray)
_registeredDraggedTypesArray = [_registeredDraggedTypes allObjects]

return _registeredDraggedTypesArray;
}

/*!
Resets the array of acceptable data types for a dragging operation.
*/
- (void)unregisterDraggedTypes
{
_registeredDraggedTypes = nil;
[self _noteUnregisteredDraggedTypes:_registeredDraggedTypes];

_registeredDraggedTypes = [CPSet set];
_registeredDraggedTypesArray = [];
}

// Accessing Editing Status
Expand Down
9 changes: 1 addition & 8 deletions AppKit/Platform/DOM/CPDOMWindowBridge.j
Expand Up @@ -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];
}
}

Expand Down

0 comments on commit 36d493e

Please sign in to comment.