Index: chrome/browser/ui/cocoa/tabs/tab_strip_drag_controller.mm |
diff --git a/chrome/browser/ui/cocoa/tabs/tab_strip_drag_controller.mm b/chrome/browser/ui/cocoa/tabs/tab_strip_drag_controller.mm |
index f70ba57d84acf07dd5d0c5c8d3daf03df7119d39..193d8bf25e75d5a76111dc9b84d8ac69d818b74b 100644 |
--- a/chrome/browser/ui/cocoa/tabs/tab_strip_drag_controller.mm |
+++ b/chrome/browser/ui/cocoa/tabs/tab_strip_drag_controller.mm |
@@ -11,6 +11,7 @@ |
#import "chrome/browser/ui/cocoa/tabs/tab_controller_target.h" |
#import "chrome/browser/ui/cocoa/tabs/tab_view.h" |
#import "chrome/browser/ui/cocoa/tabs/tab_window_controller.h" |
+#import "chrome/browser/ui/cocoa/tabs/tab_strip_controller.h" |
const CGFloat kTearDistance = 36.0; |
const NSTimeInterval kTearDuration = 0.333; |
@@ -232,8 +233,12 @@ const NSTimeInterval kTearDuration = 0.333; |
// go away (it's been autoreleased) so we need to ensure we don't reference |
// it any more. In that case the new controller becomes our source |
// controller. |
+ NSArray* tabs = [draggedTab_ selected] ? [tabStrip_ selectedViews] |
+ : @[ [draggedTab_ tabView] ]; |
draggedController_ = |
- [sourceController_ detachTabToNewWindow:[draggedTab_ tabView]]; |
+ [sourceController_ detachTabsToNewWindow:tabs |
+ draggedTab:[draggedTab_ tabView]]; |
+ |
dragWindow_ = [draggedController_ window]; |
[dragWindow_ setAlphaValue:0.0]; |
if (![sourceController_ hasLiveTabs]) { |
@@ -330,8 +335,11 @@ const NSTimeInterval kTearDuration = 0.333; |
// Compute where placeholder should go and insert it into the |
// destination tab strip. |
- TabView* draggedTabView = (TabView*)[draggedController_ activeTabView]; |
- NSRect tabFrame = [draggedTabView frame]; |
+ // The placeholder frame is the rect that contains all dragged tabs. |
+ NSRect tabFrame = NSZeroRect; |
+ for (NSView* tabView in [draggedController_ tabViews]) { |
+ tabFrame = NSUnionRect(tabFrame, [tabView frame]); |
+ } |
tabFrame.origin = [dragWindow_ convertBaseToScreen:tabFrame.origin]; |
tabFrame.origin = [[targetController_ window] |
convertScreenToBase:tabFrame.origin]; |
@@ -379,15 +387,14 @@ const NSTimeInterval kTearDuration = 0.333; |
// Move tab to new location. |
DCHECK([sourceController_ numberOfTabs]); |
TabWindowController* dropController = sourceController_; |
- [dropController moveTabView:[dropController activeTabView] |
- fromController:nil]; |
+ [dropController moveTabViews:@[ [dropController activeTabView] ] |
+ fromController:nil]; |
} |
} else if (targetController_) { |
// Move between windows. If |targetController_| is nil, we're not dropping |
// into any existing window. |
- NSView* draggedTabView = [draggedController_ activeTabView]; |
- [targetController_ moveTabView:draggedTabView |
- fromController:draggedController_]; |
+ [targetController_ moveTabViews:[draggedController_ tabViews] |
+ fromController:draggedController_]; |
// Force redraw to avoid flashes of old content before returning to event |
// loop. |
[[targetController_ window] display]; |