summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/bookmark_bar_view.mm
diff options
context:
space:
mode:
authorjrg@chromium.org <jrg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-18 17:59:10 +0000
committerjrg@chromium.org <jrg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-18 17:59:10 +0000
commit52c71ed5a093463acb72598dc8b07a35fbb49842 (patch)
tree7e1705718bed27cdd1068dacb06176da3fb5b531 /chrome/browser/cocoa/bookmark_bar_view.mm
parent1308459ce571eccb2b344f35ca0e4bf750be9395 (diff)
downloadchromium_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.mm58
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)