| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import "chrome/browser/ui/cocoa/tabs/tab_strip_controller.h" | 5 #import "chrome/browser/ui/cocoa/tabs/tab_strip_controller.h" |
| 6 | 6 |
| 7 #import <QuartzCore/QuartzCore.h> | 7 #import <QuartzCore/QuartzCore.h> |
| 8 | 8 |
| 9 #include <limits> | 9 #include <limits> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 #import "chrome/browser/ui/cocoa/image_button_cell.h" | 35 #import "chrome/browser/ui/cocoa/image_button_cell.h" |
| 36 #import "chrome/browser/ui/cocoa/new_tab_button.h" | 36 #import "chrome/browser/ui/cocoa/new_tab_button.h" |
| 37 #import "chrome/browser/ui/cocoa/tab_contents/favicon_util.h" | 37 #import "chrome/browser/ui/cocoa/tab_contents/favicon_util.h" |
| 38 #import "chrome/browser/ui/cocoa/tabs/tab_controller.h" | 38 #import "chrome/browser/ui/cocoa/tabs/tab_controller.h" |
| 39 #import "chrome/browser/ui/cocoa/tabs/tab_strip_drag_controller.h" | 39 #import "chrome/browser/ui/cocoa/tabs/tab_strip_drag_controller.h" |
| 40 #import "chrome/browser/ui/cocoa/tabs/tab_strip_model_observer_bridge.h" | 40 #import "chrome/browser/ui/cocoa/tabs/tab_strip_model_observer_bridge.h" |
| 41 #import "chrome/browser/ui/cocoa/tabs/tab_strip_view.h" | 41 #import "chrome/browser/ui/cocoa/tabs/tab_strip_view.h" |
| 42 #import "chrome/browser/ui/cocoa/tabs/tab_view.h" | 42 #import "chrome/browser/ui/cocoa/tabs/tab_view.h" |
| 43 #import "chrome/browser/ui/cocoa/tabs/throbber_view.h" | 43 #import "chrome/browser/ui/cocoa/tabs/throbber_view.h" |
| 44 #import "chrome/browser/ui/cocoa/tracking_area.h" | 44 #import "chrome/browser/ui/cocoa/tracking_area.h" |
| 45 #include "chrome/browser/ui/constrained_window_tab_helper.h" |
| 45 #include "chrome/browser/ui/find_bar/find_bar.h" | 46 #include "chrome/browser/ui/find_bar/find_bar.h" |
| 46 #include "chrome/browser/ui/find_bar/find_bar_controller.h" | 47 #include "chrome/browser/ui/find_bar/find_bar_controller.h" |
| 47 #include "chrome/browser/ui/find_bar/find_tab_helper.h" | 48 #include "chrome/browser/ui/find_bar/find_tab_helper.h" |
| 48 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" | 49 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
| 49 #include "chrome/browser/ui/tabs/tab_menu_model.h" | 50 #include "chrome/browser/ui/tabs/tab_menu_model.h" |
| 50 #include "chrome/common/chrome_switches.h" | 51 #include "chrome/common/chrome_switches.h" |
| 51 #include "chrome/common/pref_names.h" | 52 #include "chrome/common/pref_names.h" |
| 52 #include "content/browser/tab_contents/navigation_controller.h" | 53 #include "content/browser/tab_contents/navigation_controller.h" |
| 53 #include "content/browser/tab_contents/navigation_entry.h" | 54 #include "content/browser/tab_contents/navigation_entry.h" |
| 54 #include "content/browser/tab_contents/tab_contents.h" | 55 #include "content/browser/tab_contents/tab_contents.h" |
| (...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 505 // Tell per-tab sheet manager about currently selected tab. | 506 // Tell per-tab sheet manager about currently selected tab. |
| 506 if (sheetController_.get()) { | 507 if (sheetController_.get()) { |
| 507 [sheetController_ setActiveView:newView]; | 508 [sheetController_ setActiveView:newView]; |
| 508 } | 509 } |
| 509 | 510 |
| 510 // Make sure the new tabs's sheets are visible (necessary when a background | 511 // Make sure the new tabs's sheets are visible (necessary when a background |
| 511 // tab opened a sheet while it was in the background and now becomes active). | 512 // tab opened a sheet while it was in the background and now becomes active). |
| 512 TabContentsWrapper* newTab = tabStripModel_->GetTabContentsAt(modelIndex); | 513 TabContentsWrapper* newTab = tabStripModel_->GetTabContentsAt(modelIndex); |
| 513 DCHECK(newTab); | 514 DCHECK(newTab); |
| 514 if (newTab) { | 515 if (newTab) { |
| 515 TabContents::ConstrainedWindowList::iterator it, end; | 516 ConstrainedWindowTabHelper::ConstrainedWindowList::iterator it, end; |
| 516 end = newTab->tab_contents()->constrained_window_end(); | 517 end = newTab->constrained_window_tab_helper()->constrained_window_end(); |
| 517 NSWindowController* controller = [[newView window] windowController]; | 518 NSWindowController* controller = [[newView window] windowController]; |
| 518 DCHECK([controller isKindOfClass:[BrowserWindowController class]]); | 519 DCHECK([controller isKindOfClass:[BrowserWindowController class]]); |
| 519 | 520 |
| 520 for (it = newTab->tab_contents()->constrained_window_begin(); | 521 for (it = newTab->constrained_window_tab_helper()-> |
| 522 constrained_window_begin(); |
| 521 it != end; | 523 it != end; |
| 522 ++it) { | 524 ++it) { |
| 523 ConstrainedWindow* constrainedWindow = *it; | 525 ConstrainedWindow* constrainedWindow = *it; |
| 524 static_cast<ConstrainedWindowMac*>(constrainedWindow)->Realize( | 526 static_cast<ConstrainedWindowMac*>(constrainedWindow)->Realize( |
| 525 static_cast<BrowserWindowController*>(controller)); | 527 static_cast<BrowserWindowController*>(controller)); |
| 526 } | 528 } |
| 527 } | 529 } |
| 528 } | 530 } |
| 529 | 531 |
| 530 // Create a new tab view and set its cell correctly so it draws the way we want | 532 // Create a new tab view and set its cell correctly so it draws the way we want |
| (...skipping 1454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1985 // TODO(thakis, avi): Figure out how to make this work when tabs are dragged | 1987 // TODO(thakis, avi): Figure out how to make this work when tabs are dragged |
| 1986 // out or if fullscreen mode is toggled. | 1988 // out or if fullscreen mode is toggled. |
| 1987 | 1989 |
| 1988 // View hierarchy of the contents view: | 1990 // View hierarchy of the contents view: |
| 1989 // NSView -- switchView, same for all tabs | 1991 // NSView -- switchView, same for all tabs |
| 1990 // +- NSView -- TabContentsController's view | 1992 // +- NSView -- TabContentsController's view |
| 1991 // +- TabContentsViewCocoa | 1993 // +- TabContentsViewCocoa |
| 1992 // Changing it? Do not forget to modify removeConstrainedWindow too. | 1994 // Changing it? Do not forget to modify removeConstrainedWindow too. |
| 1993 // We use the TabContentsController's view in |swapInTabAtIndex|, so we have | 1995 // We use the TabContentsController's view in |swapInTabAtIndex|, so we have |
| 1994 // to pass it to the sheet controller here. | 1996 // to pass it to the sheet controller here. |
| 1995 NSView* tabContentsView = [window->owner()->GetNativeView() superview]; | 1997 NSView* tabContentsView = |
| 1998 [window->owner()->tab_contents()->GetNativeView() superview]; |
| 1996 window->delegate()->RunSheet([self sheetController], tabContentsView); | 1999 window->delegate()->RunSheet([self sheetController], tabContentsView); |
| 1997 | 2000 |
| 1998 // TODO(avi, thakis): GTMWindowSheetController has no api to move tabsheets | 2001 // TODO(avi, thakis): GTMWindowSheetController has no api to move tabsheets |
| 1999 // between windows. Until then, we have to prevent having to move a tabsheet | 2002 // between windows. Until then, we have to prevent having to move a tabsheet |
| 2000 // between windows, e.g. no tearing off of tabs. | 2003 // between windows, e.g. no tearing off of tabs. |
| 2001 NSInteger modelIndex = [self modelIndexForContentsView:tabContentsView]; | 2004 NSInteger modelIndex = [self modelIndexForContentsView:tabContentsView]; |
| 2002 NSInteger index = [self indexFromModelIndex:modelIndex]; | 2005 NSInteger index = [self indexFromModelIndex:modelIndex]; |
| 2003 BrowserWindowController* controller = | 2006 BrowserWindowController* controller = |
| 2004 (BrowserWindowController*)[[switchView_ window] windowController]; | 2007 (BrowserWindowController*)[[switchView_ window] windowController]; |
| 2005 DCHECK(controller != nil); | 2008 DCHECK(controller != nil); |
| 2006 DCHECK(index >= 0); | 2009 DCHECK(index >= 0); |
| 2007 if (index >= 0) { | 2010 if (index >= 0) { |
| 2008 [controller setTab:[self viewAtIndex:index] isDraggable:NO]; | 2011 [controller setTab:[self viewAtIndex:index] isDraggable:NO]; |
| 2009 } | 2012 } |
| 2010 } | 2013 } |
| 2011 | 2014 |
| 2012 - (void)removeConstrainedWindow:(ConstrainedWindowMac*)window { | 2015 - (void)removeConstrainedWindow:(ConstrainedWindowMac*)window { |
| 2013 NSView* tabContentsView = [window->owner()->GetNativeView() superview]; | 2016 NSView* tabContentsView = |
| 2017 [window->owner()->tab_contents()->GetNativeView() superview]; |
| 2014 | 2018 |
| 2015 // TODO(avi, thakis): GTMWindowSheetController has no api to move tabsheets | 2019 // TODO(avi, thakis): GTMWindowSheetController has no api to move tabsheets |
| 2016 // between windows. Until then, we have to prevent having to move a tabsheet | 2020 // between windows. Until then, we have to prevent having to move a tabsheet |
| 2017 // between windows, e.g. no tearing off of tabs. | 2021 // between windows, e.g. no tearing off of tabs. |
| 2018 NSInteger modelIndex = [self modelIndexForContentsView:tabContentsView]; | 2022 NSInteger modelIndex = [self modelIndexForContentsView:tabContentsView]; |
| 2023 if (modelIndex < 0) { |
| 2024 // This can happen during shutdown where the tab contents view has already |
| 2025 // removed itself. |
| 2026 return; |
| 2027 } |
| 2019 NSInteger index = [self indexFromModelIndex:modelIndex]; | 2028 NSInteger index = [self indexFromModelIndex:modelIndex]; |
| 2020 BrowserWindowController* controller = | 2029 BrowserWindowController* controller = |
| 2021 (BrowserWindowController*)[[switchView_ window] windowController]; | 2030 (BrowserWindowController*)[[switchView_ window] windowController]; |
| 2022 DCHECK(index >= 0); | 2031 DCHECK(index >= 0); |
| 2023 if (index >= 0) { | 2032 if (index >= 0) { |
| 2024 [controller setTab:[self viewAtIndex:index] isDraggable:YES]; | 2033 [controller setTab:[self viewAtIndex:index] isDraggable:YES]; |
| 2025 } | 2034 } |
| 2026 } | 2035 } |
| 2027 | 2036 |
| 2028 @end | 2037 @end |
| OLD | NEW |