Index: chrome/browser/cocoa/tab_window_controller.mm |
=================================================================== |
--- chrome/browser/cocoa/tab_window_controller.mm (revision 13420) |
+++ chrome/browser/cocoa/tab_window_controller.mm (working copy) |
@@ -13,19 +13,16 @@ |
@implementation TabWindowController |
@synthesize tabStripView = tabStripView_; |
+@synthesize tabContentArea = tabContentArea_; |
- (void)windowDidLoad { |
// Place the tab bar above the content box and add it to the view hierarchy |
// as a sibling of the content view so it can overlap with the window frame. |
- NSRect tabFrame = [contentBox_ frame]; |
+ NSRect tabFrame = [tabContentArea_ frame]; |
TVL
2009/04/09 15:53:00
you could DCheck the class requirements on tabCont
pink (ping after 24hrs)
2009/04/09 16:00:48
do what, though? check that it's not an NSBox? tha
|
tabFrame.origin = NSMakePoint(0, NSMaxY(tabFrame)); |
tabFrame.size.height = NSHeight([tabStripView_ frame]); |
[tabStripView_ setFrame:tabFrame]; |
[[[[self window] contentView] superview] addSubview:tabStripView_]; |
- |
- // tab switching will destroy the content area, so nil this out to ensure |
- // that nobody tries to use it. |
- contentBox_ = nil; |
} |
- (void)removeOverlay { |
@@ -45,6 +42,22 @@ |
[self setUseOverlay:YES]; |
} |
+- (NSArray*)viewsToMoveToOverlay { |
+ return [NSArray arrayWithObject:[self tabStripView]]; |
+} |
+ |
+- (void)moveViewsBetweenWindowAndOverlay:(BOOL)useOverlay { |
+ NSArray* viewsToMove = [self viewsToMoveToOverlay]; |
+ for (NSView* view in viewsToMove) { |
+ // if |useOverlay| is true, we're moving views into the overlay's content |
+ // area. If false, we're moving out of the overlay back into the window's |
+ // content. |
+ NSView* moveTo = useOverlay ? |
+ [overlayWindow_ contentView] : [cachedContentView_ superview]; |
TVL
2009/04/09 15:53:00
move this outside the loop, it doesn't need loop s
pink (ping after 24hrs)
2009/04/09 16:00:48
duh. changed this around at the last minute and mi
|
+ [moveTo addSubview:view]; |
+ } |
+} |
+ |
// If |useOverlay| is YES, creates a new overlay window and puts the tab strip |
// and the content area inside of it. This allows it to have a different opacity |
// from the title bar. If NO, returns everything to the previous state and |
@@ -66,7 +79,7 @@ |
NSView *contentView = [overlayWindow_ contentView]; |
[contentView addSubview:[self tabStripView]]; |
cachedContentView_ = [[self window] contentView]; |
- [contentView addSubview:cachedContentView_]; |
+ [self moveViewsBetweenWindowAndOverlay:useOverlay]; |
[overlayWindow_ setHasShadow:YES]; |
[[self window] addChildWindow:overlayWindow_ ordered:NSWindowAbove]; |
[overlayWindow_ orderFront:nil]; |
@@ -75,7 +88,7 @@ |
DCHECK(cachedContentView_); |
[[self window] setHasShadow:YES]; |
[[self window] setContentView:cachedContentView_]; |
- [[cachedContentView_ superview] addSubview:[self tabStripView]]; |
+ [self moveViewsBetweenWindowAndOverlay:useOverlay]; |
[[self window] makeFirstResponder:cachedContentView_]; |
[[self window] display]; |
[[self window] removeChildWindow:overlayWindow_]; |