summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/tab_window_controller.mm
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/cocoa/tab_window_controller.mm')
-rw-r--r--chrome/browser/cocoa/tab_window_controller.mm34
1 files changed, 27 insertions, 7 deletions
diff --git a/chrome/browser/cocoa/tab_window_controller.mm b/chrome/browser/cocoa/tab_window_controller.mm
index 0729c37..691095f 100644
--- a/chrome/browser/cocoa/tab_window_controller.mm
+++ b/chrome/browser/cocoa/tab_window_controller.mm
@@ -22,6 +22,10 @@
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 {
@@ -41,11 +45,17 @@
[self setUseOverlay:YES];
}
+// 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
+// destroys the overlay window until it's needed again. The tab strip and window
+// contents are returned to the original window.
- (void)setUseOverlay:(BOOL)useOverlay {
[NSObject cancelPreviousPerformRequestsWithTarget:self
selector:@selector(removeOverlay)
object:nil];
if (useOverlay && !overlayWindow_) {
+ DCHECK(!cachedContentView_);
overlayWindow_ = [[NSPanel alloc] initWithContentRect:[[self window] frame]
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
@@ -55,27 +65,31 @@
[overlayWindow_ setOpaque:NO];
NSView *contentView = [overlayWindow_ contentView];
[contentView addSubview:[self tabStripView]];
- [contentView addSubview:contentBox_];
+ cachedContentView_ = [[self window] contentView];
+ [contentView addSubview:cachedContentView_];
[overlayWindow_ setHasShadow:YES];
[[self window] addChildWindow:overlayWindow_ ordered:NSWindowAbove];
[overlayWindow_ orderFront:nil];
-
[[self window] setHasShadow:NO];
} else if (!useOverlay && overlayWindow_) {
- NSResponder *responder = [overlayWindow_ firstResponder];
+ DCHECK(cachedContentView_);
[[self window] setHasShadow:YES];
- NSView *contentView = [[self window] contentView];
- [contentView addSubview:contentBox_];
- [[contentView superview] addSubview:[self tabStripView]];
- [[self window] makeFirstResponder:responder];
+ [[self window] setContentView:cachedContentView_];
+ [[cachedContentView_ superview] addSubview:[self tabStripView]];
+ [[self window] makeFirstResponder:cachedContentView_];
[[self window] display];
[[self window] removeChildWindow:overlayWindow_];
[overlayWindow_ orderOut:nil];
[overlayWindow_ release];
overlayWindow_ = nil;
+ cachedContentView_ = nil;
}
}
+- (NSWindow*)overlayWindow {
+ return overlayWindow_;
+}
+
- (void)arrangeTabs {
// subclass must implement
NOTIMPLEMENTED();
@@ -97,4 +111,10 @@
NOTIMPLEMENTED();
}
+- (NSInteger)numberOfTabs {
+ // subclass must implement
+ NOTIMPLEMENTED();
+ return 0;
+}
+
@end