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

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

Issue 2404783002: [Mac] Avoid "adding unknown subview" warning. (Closed)
Patch Set: Merged with head Created 4 years, 2 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_window_controller.mm
diff --git a/chrome/browser/ui/cocoa/tabs/tab_window_controller.mm b/chrome/browser/ui/cocoa/tabs/tab_window_controller.mm
index 0d1927f1bee471859e4aacc843fa6e9f524893ab..73d0f3e755b97af15cb87aef4bc07c9584dc3639 100644
--- a/chrome/browser/ui/cocoa/tabs/tab_window_controller.mm
+++ b/chrome/browser/ui/cocoa/tabs/tab_window_controller.mm
@@ -25,6 +25,15 @@
// of non-layer backed content like the window controls.
- (void)insertTabStripBackgroundViewIntoWindow:(NSWindow*)window
titleBar:(BOOL)hasTitleBar;
+
+// Called when NSWindowWillEnterFullScreenNotification notification received.
+// Makes visual effects view hidden as it should not be displayed in fullscreen.
+- (void)windowWillEnterFullScreenNotification:(NSNotification*)notification;
+
+// Called when NSWindowWillExitFullScreenNotification notification received.
+// Makes visual effects view visible since it was hidden in fullscreen.
+- (void)windowWillExitFullScreenNotification:(NSNotification*)notification;
+
@end
@interface TabWindowOverlayWindow : NSWindow
@@ -89,12 +98,10 @@
// the parent window so that it can be translucent, while the tab strip view
// moves to the child window and stays opaque.
NSView* windowView = [window contentView];
+ CGFloat paintHeight = [FramedBrowserWindow browserFrameViewPaintHeight];
tabStripBackgroundView_.reset([[TabStripBackgroundView alloc]
- initWithFrame:NSMakeRect(0,
- NSMaxY([windowView bounds]) -
- kBrowserFrameViewPaintHeight,
- NSWidth([windowView bounds]),
- kBrowserFrameViewPaintHeight)]);
+ initWithFrame:NSMakeRect(0, NSMaxY([windowView bounds]) - paintHeight,
+ NSWidth([windowView bounds]), paintHeight)]);
[tabStripBackgroundView_
setAutoresizingMask:NSViewWidthSizable | NSViewMinYMargin];
[self insertTabStripBackgroundViewIntoWindow:window titleBar:hasTitleBar];
@@ -106,10 +113,34 @@
NSViewMinYMargin];
if (hasTabStrip)
[windowView addSubview:tabStripView_];
+
+ if (chrome::ShouldUseFullSizeContentView()) {
+ // |windowWillEnterFullScreen:| and |windowWillExitFullScreen:| are
+ // already called because self is a delegate for the window. However this
+ // class is designed for subclassing and can not implement
+ // NSWindowDelegate methods (because subclasses can do so as well and they
+ // should be able to). TODO(crbug.com/654656): Move |visualEffectView_| to
+ // subclass.
+ [[NSNotificationCenter defaultCenter]
+ addObserver:self
+ selector:@selector(windowWillEnterFullScreenNotification:)
+ name:NSWindowWillEnterFullScreenNotification
+ object:window];
+ [[NSNotificationCenter defaultCenter]
+ addObserver:self
+ selector:@selector(windowWillExitFullScreenNotification:)
+ name:NSWindowWillExitFullScreenNotification
+ object:window];
+ }
}
return self;
}
+- (void)dealloc {
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+ [super dealloc];
+}
+
- (NSView*)tabStripBackgroundView {
return tabStripBackgroundView_;
}
@@ -360,6 +391,7 @@
// blurred using an NSVisualEffectView.
Class nsVisualEffectViewClass = NSClassFromString(@"NSVisualEffectView");
if (!nsVisualEffectViewClass) {
+ DCHECK(!chrome::ShouldUseFullSizeContentView());
[rootView addSubview:tabStripBackgroundView_
positioned:NSWindowBelow
relativeTo:nil];
@@ -372,12 +404,12 @@
if (hasTitleBar)
return;
- base::scoped_nsobject<NSVisualEffectView> visualEffectView(
+ visualEffectView_.reset(
[[nsVisualEffectViewClass alloc]
initWithFrame:[tabStripBackgroundView_ frame]]);
- DCHECK(visualEffectView);
+ DCHECK(visualEffectView_);
- [visualEffectView setAutoresizingMask:
+ [visualEffectView_ setAutoresizingMask:
[tabStripBackgroundView_ autoresizingMask]];
[tabStripBackgroundView_
setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
@@ -388,19 +420,23 @@
// before the |browser_| ivar has been set. Without a browser object we
// can't check the window's theme. The final setup happens in
// -[TabStripView setController:], at which point we have access to the theme.
- [visualEffectView setAppearance:
+ [visualEffectView_ setAppearance:
[NSAppearance appearanceNamed:NSAppearanceNameVibrantLight]];
- [visualEffectView setMaterial:NSVisualEffectMaterialLight];
- [visualEffectView setBlendingMode:NSVisualEffectBlendingModeBehindWindow];
- [visualEffectView setState:NSVisualEffectStateFollowsWindowActiveState];
+ [visualEffectView_ setMaterial:NSVisualEffectMaterialLight];
+ [visualEffectView_ setBlendingMode:NSVisualEffectBlendingModeBehindWindow];
+ [visualEffectView_ setState:NSVisualEffectStateFollowsWindowActiveState];
- [rootView addSubview:visualEffectView
- positioned:NSWindowBelow
- relativeTo:nil];
+ if (chrome::ShouldUseFullSizeContentView()) {
+ [[window contentView] addSubview:visualEffectView_];
+ } else {
+ [rootView addSubview:visualEffectView_
+ positioned:NSWindowBelow
+ relativeTo:nil];
+ }
// Make the |tabStripBackgroundView_| a child of the NSVisualEffectView.
- [tabStripBackgroundView_ setFrame:[visualEffectView bounds]];
- [visualEffectView addSubview:tabStripBackgroundView_];
+ [tabStripBackgroundView_ setFrame:[visualEffectView_ bounds]];
+ [visualEffectView_ addSubview:tabStripBackgroundView_];
}
// Called when the size of the window content area has changed. Override to
@@ -409,4 +445,12 @@
NOTIMPLEMENTED();
}
+- (void)windowWillEnterFullScreenNotification:(NSNotification*)notification {
+ [[visualEffectView_ animator] setAlphaValue:0.0];
+}
+
+- (void)windowWillExitFullScreenNotification:(NSNotification*)notification {
+ [[visualEffectView_ animator] setAlphaValue:1.0];
+}
+
@end
« base/mac/sdk_forward_declarations.h ('K') | « chrome/browser/ui/cocoa/tabs/tab_window_controller.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698