summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/cocoa')
-rw-r--r--chrome/browser/cocoa/bookmark_bar_controller.mm16
-rw-r--r--chrome/browser/cocoa/bookmark_bar_controller_unittest.mm42
-rw-r--r--chrome/browser/cocoa/bookmark_bar_folder_controller.mm16
-rw-r--r--chrome/browser/cocoa/bookmark_bar_folder_view.mm6
-rw-r--r--chrome/browser/cocoa/bookmark_bar_folder_view_unittest.mm4
-rw-r--r--chrome/browser/cocoa/bookmark_bar_view.mm6
-rw-r--r--chrome/browser/cocoa/bookmark_bar_view_unittest.mm2
-rw-r--r--chrome/browser/cocoa/bookmark_button.h9
8 files changed, 84 insertions, 17 deletions
diff --git a/chrome/browser/cocoa/bookmark_bar_controller.mm b/chrome/browser/cocoa/bookmark_bar_controller.mm
index 0e96495..d80a1cfe 100644
--- a/chrome/browser/cocoa/bookmark_bar_controller.mm
+++ b/chrome/browser/cocoa/bookmark_bar_controller.mm
@@ -708,7 +708,9 @@ const NSTimeInterval kBookmarkBarAnimationDuration = 0.12;
return [buttons_ count];
}
-- (BOOL)dragButton:(BookmarkButton*)sourceButton to:(NSPoint)point {
+- (BOOL)dragButton:(BookmarkButton*)sourceButton
+ to:(NSPoint)point
+ copy:(BOOL)copy {
DCHECK([sourceButton isKindOfClass:[BookmarkButton class]]);
const BookmarkNode* sourceNode = [sourceButton bookmarkNode];
@@ -717,9 +719,15 @@ const NSTimeInterval kBookmarkBarAnimationDuration = 0.12;
int destIndex = [self indexForDragOfButton:sourceButton toPoint:point];
if (destIndex >= 0 && sourceNode) {
// Our destination parent is not sourceNode->GetParent()!
- bookmarkModel_->Move(sourceNode,
- bookmarkModel_->GetBookmarkBarNode(),
- destIndex);
+ if (copy) {
+ bookmarkModel_->Copy(sourceNode,
+ bookmarkModel_->GetBookmarkBarNode(),
+ destIndex);
+ } else {
+ bookmarkModel_->Move(sourceNode,
+ bookmarkModel_->GetBookmarkBarNode(),
+ destIndex);
+ }
} else {
NOTREACHED();
}
diff --git a/chrome/browser/cocoa/bookmark_bar_controller_unittest.mm b/chrome/browser/cocoa/bookmark_bar_controller_unittest.mm
index 9b08e90..a6fe547 100644
--- a/chrome/browser/cocoa/bookmark_bar_controller_unittest.mm
+++ b/chrome/browser/cocoa/bookmark_bar_controller_unittest.mm
@@ -901,21 +901,57 @@ TEST_F(BookmarkBarControllerTest, TestDragButton) {
EXPECT_EQ([[bar_ buttons] count], arraysize(titles));
EXPECT_TRUE([[[[bar_ buttons] objectAtIndex:0] title] isEqual:@"a"]);
- [bar_ dragButton:[[bar_ buttons] objectAtIndex:2] to:NSMakePoint(0, 0)];
+ [bar_ dragButton:[[bar_ buttons] objectAtIndex:2]
+ to:NSMakePoint(0, 0)
+ copy:NO];
EXPECT_TRUE([[[[bar_ buttons] objectAtIndex:0] title] isEqual:@"c"]);
+ // Make sure a 'copy' did not happen.
+ EXPECT_EQ([[bar_ buttons] count], arraysize(titles));
- [bar_ dragButton:[[bar_ buttons] objectAtIndex:1] to:NSMakePoint(1000, 0)];
+ [bar_ dragButton:[[bar_ buttons] objectAtIndex:1]
+ to:NSMakePoint(1000, 0)
+ copy:NO];
EXPECT_TRUE([[[[bar_ buttons] objectAtIndex:0] title] isEqual:@"c"]);
EXPECT_TRUE([[[[bar_ buttons] objectAtIndex:1] title] isEqual:@"b"]);
EXPECT_TRUE([[[[bar_ buttons] objectAtIndex:2] title] isEqual:@"a"]);
+ EXPECT_EQ([[bar_ buttons] count], arraysize(titles));
// Finally, a drop of the 1st between the next 2
CGFloat x = NSMinX([[[bar_ buttons] objectAtIndex:2] frame]);
x += [[bar_ view] frame].origin.x;
- [bar_ dragButton:[[bar_ buttons] objectAtIndex:0] to:NSMakePoint(x, 0)];
+ [bar_ dragButton:[[bar_ buttons] objectAtIndex:0]
+ to:NSMakePoint(x, 0)
+ copy:NO];
EXPECT_TRUE([[[[bar_ buttons] objectAtIndex:0] title] isEqual:@"b"]);
EXPECT_TRUE([[[[bar_ buttons] objectAtIndex:1] title] isEqual:@"c"]);
EXPECT_TRUE([[[[bar_ buttons] objectAtIndex:2] title] isEqual:@"a"]);
+ EXPECT_EQ([[bar_ buttons] count], arraysize(titles));
+}
+
+TEST_F(BookmarkBarControllerTest, TestCopyButton) {
+ BookmarkModel* model = helper_.profile()->GetBookmarkModel();
+
+ GURL gurls[] = { GURL("http://www.google.com/a"),
+ GURL("http://www.google.com/b"),
+ GURL("http://www.google.com/c") };
+ std::wstring titles[] = { L"a", L"b", L"c" };
+ for (unsigned i = 0; i < arraysize(titles); i++) {
+ model->SetURLStarred(gurls[i], titles[i], true);
+ }
+ EXPECT_EQ([[bar_ buttons] count], arraysize(titles));
+ EXPECT_TRUE([[[[bar_ buttons] objectAtIndex:0] title] isEqual:@"a"]);
+
+ // Drag 'a' between 'b' and 'c'.
+ CGFloat x = NSMinX([[[bar_ buttons] objectAtIndex:2] frame]);
+ x += [[bar_ view] frame].origin.x;
+ [bar_ dragButton:[[bar_ buttons] objectAtIndex:0]
+ to:NSMakePoint(x, 0)
+ copy:YES];
+ EXPECT_TRUE([[[[bar_ buttons] objectAtIndex:0] title] isEqual:@"a"]);
+ EXPECT_TRUE([[[[bar_ buttons] objectAtIndex:1] title] isEqual:@"b"]);
+ EXPECT_TRUE([[[[bar_ buttons] objectAtIndex:2] title] isEqual:@"a"]);
+ EXPECT_TRUE([[[[bar_ buttons] objectAtIndex:3] title] isEqual:@"c"]);
+ EXPECT_EQ([[bar_ buttons] count], 4U);
}
// Fake a theme with colored text. Apply it and make sure bookmark
diff --git a/chrome/browser/cocoa/bookmark_bar_folder_controller.mm b/chrome/browser/cocoa/bookmark_bar_folder_controller.mm
index f000750c..2dca753 100644
--- a/chrome/browser/cocoa/bookmark_bar_folder_controller.mm
+++ b/chrome/browser/cocoa/bookmark_bar_folder_controller.mm
@@ -458,7 +458,9 @@ static BOOL ValueInRangeInclusive(CGFloat low, CGFloat value, CGFloat high) {
// TODO(jrg): ARGH more code dup.
// http://crbug.com/35966
-- (BOOL)dragButton:(BookmarkButton*)sourceButton to:(NSPoint)point {
+- (BOOL)dragButton:(BookmarkButton*)sourceButton
+ to:(NSPoint)point
+ copy:(BOOL)copy {
DCHECK([sourceButton isKindOfClass:[BookmarkButton class]]);
const BookmarkNode* sourceNode = [sourceButton bookmarkNode];
@@ -466,9 +468,15 @@ static BOOL ValueInRangeInclusive(CGFloat low, CGFloat value, CGFloat high) {
int destIndex = [self indexForDragOfButton:sourceButton toPoint:point];
if (destIndex >= 0 && sourceNode) {
- [parentController_ bookmarkModel]->Move(sourceNode,
- [parentButton_ bookmarkNode],
- destIndex);
+ if (copy) {
+ [parentController_ bookmarkModel]->Copy(sourceNode,
+ [parentButton_ bookmarkNode],
+ destIndex);
+ } else {
+ [parentController_ bookmarkModel]->Move(sourceNode,
+ [parentButton_ bookmarkNode],
+ destIndex);
+ }
} else {
NOTREACHED();
}
diff --git a/chrome/browser/cocoa/bookmark_bar_folder_view.mm b/chrome/browser/cocoa/bookmark_bar_folder_view.mm
index e8e91dd..6f0db17 100644
--- a/chrome/browser/cocoa/bookmark_bar_folder_view.mm
+++ b/chrome/browser/cocoa/bookmark_bar_folder_view.mm
@@ -158,7 +158,11 @@
if (data && [info draggingSource]) {
BookmarkButton* button = nil;
[data getBytes:&button length:sizeof(button)];
- doDrag = [[self controller] dragButton:button to:[info draggingLocation]];
+ BOOL copy =
+ [info draggingSourceOperationMask] & NSDragOperationMove ? NO : YES;
+ doDrag = [[self controller] dragButton:button
+ to:[info draggingLocation]
+ copy:copy];
}
return doDrag;
}
diff --git a/chrome/browser/cocoa/bookmark_bar_folder_view_unittest.mm b/chrome/browser/cocoa/bookmark_bar_folder_view_unittest.mm
index a549538..c39ba86 100644
--- a/chrome/browser/cocoa/bookmark_bar_folder_view_unittest.mm
+++ b/chrome/browser/cocoa/bookmark_bar_folder_view_unittest.mm
@@ -71,7 +71,9 @@
closedAll_ = YES;
}
-- (BOOL)dragButton:(BookmarkButton*)sourceButton to:(NSPoint)point {
+- (BOOL)dragButton:(BookmarkButton*)sourceButton
+ to:(NSPoint)point
+ copy:(BOOL)copy {
return NO;
}
diff --git a/chrome/browser/cocoa/bookmark_bar_view.mm b/chrome/browser/cocoa/bookmark_bar_view.mm
index b1099b2..9e47614 100644
--- a/chrome/browser/cocoa/bookmark_bar_view.mm
+++ b/chrome/browser/cocoa/bookmark_bar_view.mm
@@ -220,7 +220,11 @@
if (data && [info draggingSource]) {
BookmarkButton* button = nil;
[data getBytes:&button length:sizeof(button)];
- rtn = [controller_ dragButton:button to:[info draggingLocation]];
+ BOOL copy =
+ [info draggingSourceOperationMask] & NSDragOperationMove ? NO : YES;
+ rtn = [controller_ dragButton:button
+ to:[info draggingLocation]
+ copy:copy];
}
return rtn;
}
diff --git a/chrome/browser/cocoa/bookmark_bar_view_unittest.mm b/chrome/browser/cocoa/bookmark_bar_view_unittest.mm
index 600c91d..85b4f2d 100644
--- a/chrome/browser/cocoa/bookmark_bar_view_unittest.mm
+++ b/chrome/browser/cocoa/bookmark_bar_view_unittest.mm
@@ -65,7 +65,7 @@ const CGFloat kFakeIndicatorPos = 7.0;
}
// Fake a controller for callback ponging
-- (BOOL)dragButton:(BookmarkButton*)button to:(NSPoint)point {
+- (BOOL)dragButton:(BookmarkButton*)button to:(NSPoint)point copy:(BOOL)copy {
pong_ = YES;
return YES;
}
diff --git a/chrome/browser/cocoa/bookmark_button.h b/chrome/browser/cocoa/bookmark_button.h
index 4401c10..0bc1994 100644
--- a/chrome/browser/cocoa/bookmark_button.h
+++ b/chrome/browser/cocoa/bookmark_button.h
@@ -55,8 +55,13 @@ class ThemeProvider;
// Perform the actual DnD of a bookmark button.
// |point| is in the base coordinate system of the destination window;
-// |it comes from an id<NSDraggingInfo>.
-- (BOOL)dragButton:(BookmarkButton*)sourceButton to:(NSPoint)point;
+// |it comes from an id<NSDraggingInfo>. |copy| is YES if a copy is to be
+// made and inserted into the new location while leaving the bookmark in
+// the old location, otherwise move the bookmark by removing from its old
+// location and inserting into the new location.
+- (BOOL)dragButton:(BookmarkButton *)sourceButton
+ to:(NSPoint)point
+ copy:(BOOL)copy;
// Return YES if we should show the drop indicator, else NO. In some
// cases (e.g. hover open) we don't want to show the drop indicator.