| Index: chrome/browser/ui/cocoa/bookmarks/bookmark_button.mm
|
| diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_button.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_button.mm
|
| index 6eea93677469813272e9aef36cacb8949859f8bf..43664314dfd8e4a2caf767cbfe49d682188aa875 100644
|
| --- a/chrome/browser/ui/cocoa/bookmarks/bookmark_button.mm
|
| +++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_button.mm
|
| @@ -9,8 +9,10 @@
|
| #include "base/logging.h"
|
| #include "base/mac/foundation_util.h"
|
| #import "base/mac/scoped_nsobject.h"
|
| +#include "base/mac/sdk_forward_declarations.h"
|
| #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_window.h"
|
| #import "chrome/browser/ui/cocoa/bookmarks/bookmark_button_cell.h"
|
| +#import "chrome/browser/ui/cocoa/bookmarks/bookmark_folder_target.h"
|
| #import "chrome/browser/ui/cocoa/browser_window_controller.h"
|
| #import "chrome/browser/ui/cocoa/view_id_util.h"
|
| #include "components/bookmarks/browser/bookmark_model.h"
|
| @@ -33,7 +35,19 @@ namespace {
|
| BookmarkButton* gDraggedButton = nil; // Weak
|
| };
|
|
|
| -@interface BookmarkButton(Private)
|
| +@interface BookmarkButton() <NSPasteboardItemDataProvider>
|
| +
|
| +// NSPasteboardItemDataProvider:
|
| +- (void)pasteboard:(NSPasteboard*)sender
|
| + item:(NSPasteboardItem*)item
|
| + provideDataForType:(NSString*)type;
|
| +
|
| +// NSDraggingSource:
|
| +- (void)draggingSession:(NSDraggingSession*)session
|
| + endedAtPoint:(NSPoint)aPoint
|
| + operation:(NSDragOperation)operation;
|
| +- (NSDragOperation)draggingSession:(NSDraggingSession*)session
|
| + sourceOperationMaskForDraggingContext:(NSDraggingContext)context;
|
|
|
| // Make a drag image for the button.
|
| - (NSImage*)dragImage;
|
| @@ -42,7 +56,6 @@ BookmarkButton* gDraggedButton = nil; // Weak
|
|
|
| @end // @interface BookmarkButton(Private)
|
|
|
| -
|
| @implementation BookmarkButton
|
|
|
| @synthesize delegate = delegate_;
|
| @@ -175,10 +188,6 @@ BookmarkButton* gDraggedButton = nil; // Weak
|
| // the stack.
|
| [self retain];
|
|
|
| - // Ask our delegate to fill the pasteboard for us.
|
| - NSPasteboard* pboard = [NSPasteboard pasteboardWithName:NSDragPboard];
|
| - [[self delegate] fillPasteboard:pboard forDragOfButton:self];
|
| -
|
| // Lock bar visibility, forcing the overlay to stay visible if we are in
|
| // fullscreen mode.
|
| if ([[self delegate] dragShouldLockBarVisibility]) {
|
| @@ -202,12 +211,23 @@ BookmarkButton* gDraggedButton = nil; // Weak
|
| dragPending_ = YES;
|
| gDraggedButton = self;
|
|
|
| - CGFloat yAt = [self bounds].size.height;
|
| - NSSize dragOffset = NSMakeSize(0.0, 0.0);
|
| NSImage* image = [self dragImage];
|
| [self setHidden:YES];
|
| - [self dragImage:image at:NSMakePoint(0, yAt) offset:dragOffset
|
| - event:event pasteboard:pboard source:self slideBack:YES];
|
| +
|
| + NSPasteboardItem* pbItem = [NSPasteboardItem new];
|
| + [pbItem setDataProvider:self forTypes:@[ kBookmarkButtonDragType ]];
|
| +
|
| + base::scoped_nsobject<NSDraggingItem> dragItem(
|
| + [[NSDraggingItem alloc] initWithPasteboardWriter:pbItem]);
|
| + [dragItem setDraggingFrame:[self bounds] contents:image];
|
| +
|
| + [self beginDraggingSessionWithItems:@[ dragItem.get() ]
|
| + event:event
|
| + source:self];
|
| + while (gDraggedButton != nil) {
|
| + [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
|
| + beforeDate:[NSDate distantFuture]];
|
| + }
|
| [self setHidden:NO];
|
|
|
| // And we're done.
|
| @@ -217,6 +237,27 @@ BookmarkButton* gDraggedButton = nil; // Weak
|
| [self autorelease];
|
| }
|
|
|
| +- (void)pasteboard:(NSPasteboard*)sender
|
| + item:(NSPasteboardItem*)item
|
| + provideDataForType:(NSString*)type {
|
| + [sender setData:[NSData dataWithBytes:&gDraggedButton
|
| + length:sizeof(gDraggedButton)]
|
| + forType:kBookmarkButtonDragType];
|
| +}
|
| +
|
| +- (NSDragOperation)draggingSession:(NSDraggingSession*)session
|
| + sourceOperationMaskForDraggingContext:(NSDraggingContext)context {
|
| + NSDragOperation operation = NSDragOperationCopy;
|
| +
|
| + if (context == NSDraggingContextWithinApplication)
|
| + operation |= NSDragOperationMove;
|
| +
|
| + if ([delegate_ canDragBookmarkButtonToTrash:self])
|
| + operation |= NSDragOperationDelete;
|
| +
|
| + return operation;
|
| +}
|
| +
|
| // Overridden to release bar visibility.
|
| - (DraggableButtonResult)endDrag {
|
| gDraggedButton = nil;
|
| @@ -230,20 +271,9 @@ BookmarkButton* gDraggedButton = nil; // Weak
|
| return kDraggableButtonImplUseBase;
|
| }
|
|
|
| -- (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal {
|
| - NSDragOperation operation = NSDragOperationCopy;
|
| - if (isLocal) {
|
| - operation |= NSDragOperationMove;
|
| - }
|
| - if ([delegate_ canDragBookmarkButtonToTrash:self]) {
|
| - operation |= NSDragOperationDelete;
|
| - }
|
| - return operation;
|
| -}
|
| -
|
| -- (void)draggedImage:(NSImage *)anImage
|
| - endedAt:(NSPoint)aPoint
|
| - operation:(NSDragOperation)operation {
|
| +- (void)draggingSession:(NSDraggingSession*)session
|
| + endedAtPoint:(NSPoint)aPoint
|
| + operation:(NSDragOperation)operation {
|
| gDraggedButton = nil;
|
| // Inform delegate of drag source that we're finished dragging,
|
| // so it can close auto-opened bookmark folders etc.
|
| @@ -325,8 +355,6 @@ BookmarkButton* gDraggedButton = nil; // Weak
|
| return kDraggableButtonMixinDidWork;
|
| }
|
|
|
| -
|
| -
|
| // mouseEntered: and mouseExited: are called from our
|
| // BookmarkButtonCell. We redirect this information to our delegate.
|
| // The controller can then perform menu-like actions (e.g. "hover over
|
| @@ -428,11 +456,6 @@ BookmarkButton* gDraggedButton = nil; // Weak
|
| [self setNeedsDisplay:YES];
|
| }
|
|
|
| -@end
|
| -
|
| -@implementation BookmarkButton(Private)
|
| -
|
| -
|
| - (void)installCustomTrackingArea {
|
| const NSTrackingAreaOptions options =
|
| NSTrackingActiveAlways |
|
| @@ -451,7 +474,6 @@ BookmarkButton* gDraggedButton = nil; // Weak
|
| [self addTrackingArea:area_];
|
| }
|
|
|
| -
|
| - (NSImage*)dragImage {
|
| NSRect bounds = [self bounds];
|
| base::scoped_nsobject<NSImage> image(
|
| @@ -474,4 +496,4 @@ BookmarkButton* gDraggedButton = nil; // Weak
|
| return image.autorelease();
|
| }
|
|
|
| -@end // @implementation BookmarkButton(Private)
|
| +@end
|
|
|