Chromium Code Reviews| Index: chrome/browser/cocoa/browser_window_controller.mm |
| =================================================================== |
| --- chrome/browser/cocoa/browser_window_controller.mm (revision 14839) |
| +++ chrome/browser/cocoa/browser_window_controller.mm (working copy) |
| @@ -275,18 +275,54 @@ |
| return [tabStripController_ selectedTabGrowBoxRect]; |
| } |
| -- (void)dropTabView:(NSView *)view atIndex:(NSUInteger)index { |
| - [tabStripController_ dropTabView:view atIndex:index]; |
| +// Drop a given tab view at the location of the current placeholder. If there |
| +// is no placeholder, it will go at the end. |dragController| is the window |
| +// controller of a tab being dropped from a different window. It will be nil |
| +// if the drag is within the window. The implementation will call |
| +// |-removePlaceholder| since the drag is now complete. This also calls |
| +// |-layoutTabs| internally so clients do not need to call it again. When |
| +// dragging tabs between windows, this should be called *before* |
| +// |-detachTabView| on the source window since it needs to still be in the |
| +// source window's tab model for this method to find the information it needs |
| +// to complete the drop. |
| +- (void)dropTabView:(NSView*)view |
| + fromController:(TabWindowController*)dragController { |
| + if (dragController) { |
| + // Moving between windows. Figure out the TabContents to drop into our tab |
| + // model from the source window's model. |
| + BrowserWindowController* dragBWC = (BrowserWindowController*)dragController; |
|
TVL
2009/04/29 19:42:01
nit: maybe do the cast after the class check, just
|
| + BOOL isBrowser = |
| + [dragBWC isKindOfClass:[BrowserWindowController class]]; |
| + DCHECK(isBrowser); |
| + if (!isBrowser) return; |
| + int index = [dragBWC->tabStripController_ indexForTabView:view]; |
| + TabContents* contents = |
| + dragBWC->browser_->tabstrip_model()->GetTabContentsAt(index); |
| + |
| + // Deposit it into our model at the appropriate location (it already knows |
| + // where it should go from tracking the drag). |
| + [tabStripController_ dropTabContents:contents]; |
| + } else { |
| + // Moving within a window. |
| + int index = [tabStripController_ indexForTabView:view]; |
| + [tabStripController_ moveTabFromIndex:index]; |
| + } |
| + |
| + // Remove the placeholder since the drag is now complete. |
| + [self removePlaceholder]; |
| } |
| +// Tells the tab strip to forget about this tab in preparation for it being |
| +// put into a different tab strip, such as during a drop on another window. |
| +- (void)detachTabView:(NSView*)view { |
| + int index = [tabStripController_ indexForTabView:view]; |
| + browser_->tabstrip_model()->DetachTabContentsAt(index); |
| +} |
| + |
| - (NSView *)selectedTabView { |
| return [tabStripController_ selectedTabView]; |
| } |
| -- (TabStripController *)tabStripController { |
| - return tabStripController_; |
| -} |
| - |
| - (void)setIsLoading:(BOOL)isLoading { |
| [toolbarController_ setIsLoading:isLoading]; |
| } |