diff options
author | jrg@chromium.org <jrg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-18 17:59:10 +0000 |
---|---|---|
committer | jrg@chromium.org <jrg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-18 17:59:10 +0000 |
commit | 52c71ed5a093463acb72598dc8b07a35fbb49842 (patch) | |
tree | 7e1705718bed27cdd1068dacb06176da3fb5b531 /chrome/browser/cocoa/bookmark_bar_view.mm | |
parent | 1308459ce571eccb2b344f35ca0e4bf750be9395 (diff) | |
download | chromium_src-52c71ed5a093463acb72598dc8b07a35fbb49842.zip chromium_src-52c71ed5a093463acb72598dc8b07a35fbb49842.tar.gz chromium_src-52c71ed5a093463acb72598dc8b07a35fbb49842.tar.bz2 |
Drag and drop of buttons/folders from bar to bar.
Does not include DnD to/from menus.
No animations of drop destination yet.
BUG=http://crbug.com/17608
TEST=Do some draggin and droppin.
Confirm click still works on the marks and folders.
Confirm "other bookmarks" canNOT be moved.
Confirm NTP / detached bar also works for DnD.
Review URL: http://codereview.chromium.org/395031
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@32341 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/cocoa/bookmark_bar_view.mm')
-rw-r--r-- | chrome/browser/cocoa/bookmark_bar_view.mm | 58 |
1 files changed, 52 insertions, 6 deletions
diff --git a/chrome/browser/cocoa/bookmark_bar_view.mm b/chrome/browser/cocoa/bookmark_bar_view.mm index 61cfa67..e6976af 100644 --- a/chrome/browser/cocoa/bookmark_bar_view.mm +++ b/chrome/browser/cocoa/bookmark_bar_view.mm @@ -5,6 +5,7 @@ #import "chrome/browser/cocoa/bookmark_bar_view.h" #import "chrome/browser/cocoa/bookmark_bar_controller.h" +#import "chrome/browser/cocoa/bookmark_button.h" #import "third_party/GTM/AppKit/GTMTheme.h" #import "third_party/mozilla/include/NSPasteboard+Utils.h" @@ -30,8 +31,12 @@ object:nil]; DCHECK(controller_ && "Expected this to be hooked up via Interface Builder"); - NSArray* types = [NSArray arrayWithObjects:NSStringPboardType, - NSHTMLPboardType, NSURLPboardType, nil]; + NSArray* types = [NSArray arrayWithObjects: + NSStringPboardType, + NSHTMLPboardType, + NSURLPboardType, + kBookmarkButtonDragType, + nil]; [self registerForDraggedTypes:types]; } @@ -69,6 +74,8 @@ - (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)info { if ([[info draggingPasteboard] containsURLData]) return NSDragOperationCopy; + if ([[info draggingPasteboard] dataForType:kBookmarkButtonDragType]) + return NSDragOperationMove; return NSDragOperationNone; } @@ -80,16 +87,19 @@ } - (NSDragOperation)draggingUpdated:(id<NSDraggingInfo>)info { - if ([[info draggingPasteboard] containsURLData]) - return NSDragOperationCopy; - return NSDragOperationNone; + // For now it's the same as draggingEntered:. + // TODO(jrg): once we return YES for wantsPeriodicDraggingUpdates, + // this should ping the controller_ to perform animations. + return [self draggingEntered:info]; } - (BOOL)prepareForDragOperation:(id<NSDraggingInfo>)info { return YES; } -- (BOOL)performDragOperation:(id<NSDraggingInfo>)info { +// Implement NSDraggingDestination protocol method +// performDragOperation: for URLs. +- (BOOL)performDragOperationForURL:(id<NSDraggingInfo>)info { NSPasteboard* pboard = [info draggingPasteboard]; DCHECK([pboard containsURLData]); @@ -102,4 +112,40 @@ at:[info draggingLocation]]; } +// Implement NSDraggingDestination protocol method +// performDragOperation: for bookmarks. +- (BOOL)performDragOperationForBookmark:(id<NSDraggingInfo>)info { + BOOL rtn = NO; + NSData* data = [[info draggingPasteboard] + dataForType:kBookmarkButtonDragType]; + // [info draggingSource] is nil if not the same application. + if (data && [info draggingSource]) { + BookmarkButton* button = nil; + [data getBytes:&button length:sizeof(button)]; + rtn = [controller_ dragButton:button to:[info draggingLocation]]; + } + return rtn; +} + +- (BOOL)performDragOperation:(id<NSDraggingInfo>)info { + NSPasteboard* pboard = [info draggingPasteboard]; + if ([pboard containsURLData]) { + return [self performDragOperationForURL:info]; + } else if ([pboard dataForType:kBookmarkButtonDragType]) { + return [self performDragOperationForBookmark:info]; + } else { + NOTREACHED() << "Unknown drop type onto bookmark bar."; + return NO; + } +} + @end // @implementation BookmarkBarView + + +@implementation BookmarkBarView(TestingAPI) + +- (void)setController:(id)controller { + controller_ = controller; +} + +@end // @implementation BookmarkBarView(TestingAPI) |