Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3107)

Unified Diff: chrome/browser/ui/cocoa/tabs/tab_strip_drag_controller.mm

Issue 157403004: [mac] Implement dragging of multiple tabs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixes for rsesek. Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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];
« no previous file with comments | « chrome/browser/ui/cocoa/tabs/tab_strip_controller.mm ('k') | chrome/browser/ui/cocoa/tabs/tab_window_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698