diff options
-rw-r--r-- | chrome/app/nibs/BrowserWindow.xib | 56 | ||||
-rw-r--r-- | chrome/browser/cocoa/browser_window_controller.h | 6 | ||||
-rw-r--r-- | chrome/browser/cocoa/browser_window_controller.mm | 76 | ||||
-rw-r--r-- | chrome/browser/cocoa/browser_window_controller_private.mm | 4 | ||||
-rw-r--r-- | chrome/browser/cocoa/browser_window_controller_unittest.mm | 22 | ||||
-rw-r--r-- | chrome/browser/cocoa/dev_tools_controller.h | 23 | ||||
-rw-r--r-- | chrome/browser/cocoa/dev_tools_controller.mm | 54 | ||||
-rw-r--r-- | chrome/browser/cocoa/sidebar_controller.h | 24 | ||||
-rw-r--r-- | chrome/browser/cocoa/sidebar_controller.mm | 60 | ||||
-rw-r--r-- | chrome/browser/cocoa/tab_window_controller.h | 4 | ||||
-rw-r--r-- | chrome/browser/cocoa/tab_window_controller.mm | 2 |
11 files changed, 152 insertions, 179 deletions
diff --git a/chrome/app/nibs/BrowserWindow.xib b/chrome/app/nibs/BrowserWindow.xib index 022c2b2..2e3a414 100644 --- a/chrome/app/nibs/BrowserWindow.xib +++ b/chrome/app/nibs/BrowserWindow.xib @@ -56,27 +56,6 @@ <object class="NSCustomView" id="1858870"> <reference key="NSNextResponder" ref="1006"/> <int key="NSvFlags">274</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSSplitView" id="321204824"> - <reference key="NSNextResponder" ref="1858870"/> - <int key="NSvFlags">274</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSSplitView" id="267972061"> - <reference key="NSNextResponder" ref="321204824"/> - <int key="NSvFlags">268</int> - <string key="NSFrameSize">{750, 600}</string> - <reference key="NSSuperview" ref="321204824"/> - <bool key="NSIsVertical">YES</bool> - <int key="NSDividerStyle">2</int> - </object> - </object> - <string key="NSFrameSize">{750, 600}</string> - <reference key="NSSuperview" ref="1858870"/> - <int key="NSDividerStyle">2</int> - </object> - </object> <string key="NSFrameSize">{750, 600}</string> <reference key="NSSuperview" ref="1006"/> <string key="NSClassName">FastResizeView</string> @@ -180,22 +159,6 @@ </object> <int key="connectionID">90</int> </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">devToolsContainer_</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="321204824"/> - </object> - <int key="connectionID">94</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">contentsContainer_</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="267972061"/> - </object> - <int key="connectionID">98</int> - </object> </object> <object class="IBMutableOrderedSet" key="objectRecords"> <object class="NSArray" key="orderedObjects"> @@ -277,24 +240,9 @@ <reference key="object" ref="1858870"/> <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="321204824"/> </object> <reference key="parent" ref="1006"/> </object> - <object class="IBObjectRecord"> - <int key="objectID">91</int> - <reference key="object" ref="321204824"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="267972061"/> - </object> - <reference key="parent" ref="1858870"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">95</int> - <reference key="object" ref="267972061"/> - <reference key="parent" ref="321204824"/> - </object> </object> </object> <object class="NSMutableDictionary" key="flattenedProperties"> @@ -325,8 +273,6 @@ <string>84.IBPluginDependency</string> <string>89.IBEditorWindowLastContentRect</string> <string>89.IBPluginDependency</string> - <string>91.IBPluginDependency</string> - <string>95.IBPluginDependency</string> </object> <object class="NSMutableArray" key="dict.values"> <bool key="EncodedWithXMLCoder">YES</bool> @@ -357,8 +303,6 @@ <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>{{89, 611}, {236, 393}}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> </object> </object> <object class="NSMutableDictionary" key="unlocalizedProperties"> diff --git a/chrome/browser/cocoa/browser_window_controller.h b/chrome/browser/cocoa/browser_window_controller.h index c90de7a..6869397 100644 --- a/chrome/browser/cocoa/browser_window_controller.h +++ b/chrome/browser/cocoa/browser_window_controller.h @@ -17,9 +17,7 @@ #include "base/scoped_ptr.h" #import "chrome/browser/cocoa/bookmark_bar_controller.h" #import "chrome/browser/cocoa/bookmark_bubble_controller.h" -#import "chrome/browser/cocoa/dev_tools_controller.h" #import "chrome/browser/cocoa/browser_command_executor.h" -#import "chrome/browser/cocoa/sidebar_controller.h" #import "chrome/browser/cocoa/tab_strip_controller.h" #import "chrome/browser/cocoa/tab_window_controller.h" #import "chrome/browser/cocoa/themed_window.h" @@ -32,6 +30,7 @@ class Browser; class BrowserWindow; class BrowserWindowCocoa; class ConstrainedWindowMac; +@class DevToolsController; @class DownloadShelfController; @class FindBarCocoaController; @class FullscreenController; @@ -39,6 +38,7 @@ class ConstrainedWindowMac; @class IncognitoImageView; @class InfoBarContainerController; class LocationBarViewMac; +@class SidebarController; class StatusBubbleMac; class TabContents; @class TabStripController; @@ -51,8 +51,6 @@ class TabContents; BookmarkBarControllerDelegate, BrowserCommandExecutor, ViewResizer, - DevToolsControllerDelegate, - SidebarControllerDelegate, TabStripControllerDelegate> { @private // The ordering of these members is important as it determines the order in diff --git a/chrome/browser/cocoa/browser_window_controller.mm b/chrome/browser/cocoa/browser_window_controller.mm index e2743c8..899eecd 100644 --- a/chrome/browser/cocoa/browser_window_controller.mm +++ b/chrome/browser/cocoa/browser_window_controller.mm @@ -22,6 +22,7 @@ #import "chrome/browser/cocoa/bookmark_editor_controller.h" #import "chrome/browser/cocoa/browser_window_cocoa.h" #import "chrome/browser/cocoa/browser_window_controller_private.h" +#import "chrome/browser/cocoa/dev_tools_controller.h" #import "chrome/browser/cocoa/download_shelf_controller.h" #import "chrome/browser/cocoa/event_utils.h" #import "chrome/browser/cocoa/fast_resize_view.h" @@ -33,6 +34,7 @@ #import "chrome/browser/cocoa/infobar_container_controller.h" #import "chrome/browser/cocoa/location_bar/autocomplete_text_field_editor.h" #import "chrome/browser/cocoa/sad_tab_controller.h" +#import "chrome/browser/cocoa/sidebar_controller.h" #import "chrome/browser/cocoa/status_bubble_mac.h" #import "chrome/browser/cocoa/tab_contents_controller.h" #import "chrome/browser/cocoa/tab_strip_controller.h" @@ -231,6 +233,20 @@ // Puts the incognito badge on the window frame, if necessary. [self installIncognitoBadge]; + // Create a sub-controller for the docked devTools and add its view to the + // hierarchy. This must happen before the sidebar controller is + // instantiated. + devToolsController_.reset([[DevToolsController alloc] init]); + [[devToolsController_ view] setFrame:[[self tabContentArea] bounds]]; + [[self tabContentArea] addSubview:[devToolsController_ view]]; + + // Create a sub-controller for the docked sidebar and add its view to the + // hierarchy. This must happen before the tabstrip controller is + // instantiated. + sidebarController_.reset([[SidebarController alloc] init]); + [[sidebarController_ view] setFrame:[[devToolsController_ view] bounds]]; + [[devToolsController_ view] addSubview:[sidebarController_ view]]; + // Create a controller for the tab strip, giving it the model object for // this window's Browser and the tab strip view. The controller will handle // registering for the appropriate tab notifications from the back-end and @@ -274,16 +290,6 @@ relativeTo:[toolbarController_ view]]; [bookmarkBarController_ setBookmarkBarEnabled:[self supportsBookmarkBar]]; - // Create a sub-controller for the docked devTools. - devToolsController_.reset( - [[DevToolsController alloc] initWithView:[self devToolsContainer] - delegate:self]); - - // Create a sub-controller for the docked devTools. - sidebarController_.reset( - [[SidebarController alloc] initWithView:[self contentsContainer] - delegate:self]); - // We don't want to try and show the bar before it gets placed in its parent // view, so this step shoudn't be inside the bookmark bar controller's // |-awakeFromNib|. @@ -1011,10 +1017,10 @@ // TODO(alekseys): status bubble should respect web view bounds, not just its // vertical size. Now it can overlap sidebar contents. http://crbug.com/54882 - (CGFloat)verticalOffsetForStatusBubble { - NSRect contents_bounds = [[self contentsContainer] bounds]; + NSRect contents_bounds = [[sidebarController_ view] bounds]; NSView* baseView = [[self window] contentView]; return NSMinY([baseView convertRect:contents_bounds - fromView:[self contentsContainer]]); + fromView:[sidebarController_ view]]); } - (GTMWindowSheetController*)sheetController { @@ -1338,52 +1344,6 @@ return [self supportsWindowFeature:Browser::FEATURE_TABSTRIP]; } -// DevToolsController protocol. -- (void)resizeDevToolsToNewHeight:(CGFloat)height { - NSSplitView* container = [self devToolsContainer]; - NSArray* subviews = [container subviews]; - - // It seems as if |-setPosition:ofDividerAtIndex:| should do what's needed, - // but I can't figure out how to use it. Manually resize web and devtools. - // TODO(alekseys): either make setPosition:ofDividerAtIndex: work or to add a - // category on NSSplitView to handle manual resizing. - NSView* devToolsView = [subviews objectAtIndex:1]; - NSRect devToolsFrame = [devToolsView frame]; - devToolsFrame.size.height = height; - [devToolsView setFrame:devToolsFrame]; - - NSView* webView = [subviews objectAtIndex:0]; - NSRect webFrame = [webView frame]; - webFrame.size.height = - NSHeight([container frame]) - ([container dividerThickness] + height); - [webView setFrame:webFrame]; - - [container adjustSubviews]; -} - -// SidebarController protocol. -- (void)resizeSidebarToNewWidth:(CGFloat)width { - NSSplitView* container = [self contentsContainer]; - NSArray* subviews = [container subviews]; - - // It seems as if |-setPosition:ofDividerAtIndex:| should do what's needed, - // but I can't figure out how to use it. Manually resize web and sidebar. - // TODO(alekseys): either make setPosition:ofDividerAtIndex: work or to add a - // category on NSSplitView to handle manual resizing. - NSView* sidebarView = [subviews objectAtIndex:1]; - NSRect sidebarFrame = [sidebarView frame]; - sidebarFrame.size.width = width; - [sidebarView setFrame:sidebarFrame]; - - NSView* webView = [subviews objectAtIndex:0]; - NSRect webFrame = [webView frame]; - webFrame.size.width = - NSWidth([container frame]) - ([container dividerThickness] + width); - [webView setFrame:webFrame]; - - [container adjustSubviews]; -} - // TabStripControllerDelegate protocol. - (void)onSelectTabWithContents:(TabContents*)contents { // Update various elements that are interested in knowing the current diff --git a/chrome/browser/cocoa/browser_window_controller_private.mm b/chrome/browser/cocoa/browser_window_controller_private.mm index 1fbd31e..cc3e726 100644 --- a/chrome/browser/cocoa/browser_window_controller_private.mm +++ b/chrome/browser/cocoa/browser_window_controller_private.mm @@ -50,9 +50,11 @@ const CGFloat kLocBarBottomInset = 1; if ([self useVerticalTabs]) factory = [SideTabStripController class]; + DCHECK([sidebarController_ view]); + DCHECK([[sidebarController_ view] window]); tabStripController_.reset([[factory alloc] initWithView:[self tabStripView] - switchView:[self contentsContainer] + switchView:[sidebarController_ view] browser:browser_.get() delegate:self]); } diff --git a/chrome/browser/cocoa/browser_window_controller_unittest.mm b/chrome/browser/cocoa/browser_window_controller_unittest.mm index 1597e69..2550f44 100644 --- a/chrome/browser/cocoa/browser_window_controller_unittest.mm +++ b/chrome/browser/cocoa/browser_window_controller_unittest.mm @@ -50,6 +50,14 @@ return [findBarCocoaController_ view]; } +- (NSView*)devToolsView { + return [devToolsController_ view]; +} + +- (NSView*)sidebarView { + return [sidebarController_ view]; +} + - (BOOL)bookmarkBarVisible { return [bookmarkBarController_ isVisible]; } @@ -548,6 +556,20 @@ TEST_F(BrowserWindowControllerTest, TestFindBarOnTop) { EXPECT_GT(findBar_index, bookmark_index); } +// Tests that the sidebar view and devtools view are both non-opaque. +TEST_F(BrowserWindowControllerTest, TestSplitViewsAreNotOpaque) { + // Add a subview to the sidebar view to mimic what happens when a tab is added + // to the window. NSSplitView only marks itself as non-opaque when one of its + // subviews is non-opaque, so the test will not pass without this subview. + scoped_nsobject<NSView> view( + [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 10, 10)]); + [[controller_ sidebarView] addSubview:view]; + + EXPECT_FALSE([[controller_ tabContentArea] isOpaque]); + EXPECT_FALSE([[controller_ devToolsView] isOpaque]); + EXPECT_FALSE([[controller_ sidebarView] isOpaque]); +} + @interface BrowserWindowControllerFakeFullscreen : BrowserWindowController { @private // We release the window ourselves, so we don't have to rely on the unittest diff --git a/chrome/browser/cocoa/dev_tools_controller.h b/chrome/browser/cocoa/dev_tools_controller.h index 1d6254e5..774d799 100644 --- a/chrome/browser/cocoa/dev_tools_controller.h +++ b/chrome/browser/cocoa/dev_tools_controller.h @@ -15,28 +15,23 @@ class TabContents; -// DevTools controller's delegate interface. Delegate is responsible -// for the actual subviews resize and layout. -@protocol DevToolsControllerDelegate - -// Resizes the devTools view to the new |height| and adjusts window layout -// accordingly. -- (void)resizeDevToolsToNewHeight:(CGFloat)height; - -@end - // A class that handles updates of the devTools view within a browser window. // It swaps in the relevant devTools contents for a given TabContents or removes // the vew, if there's no devTools contents to show. @interface DevToolsController : NSObject { @private // A view hosting docked devTools contents. - scoped_nsobject<NSSplitView> devToolsView_; - id<DevToolsControllerDelegate> delegate_; // weak + scoped_nsobject<NSSplitView> splitView_; } -- (id)initWithView:(NSSplitView*)devToolsView - delegate:(id<DevToolsControllerDelegate>)delegate; +- (id)init; + +// This controller's view. +- (NSView*)view; + +// The compiler seems to have trouble handling a function named "view" that +// returns an NSSplitView, so provide a differently-named method. +- (NSSplitView*)splitView; // Depending on |contents|'s state, decides whether the docked web inspector // should be shown or hidden and adjusts its height (|delegate_| handles diff --git a/chrome/browser/cocoa/dev_tools_controller.mm b/chrome/browser/cocoa/dev_tools_controller.mm index 1a7e3b6..3dee715 100644 --- a/chrome/browser/cocoa/dev_tools_controller.mm +++ b/chrome/browser/cocoa/dev_tools_controller.mm @@ -30,21 +30,30 @@ const int kMinWebHeight = 50; @interface DevToolsController (Private) - (void)showDevToolsContents:(TabContents*)devToolsContents; +- (void)resizeDevToolsToNewHeight:(CGFloat)height; @end @implementation DevToolsController -- (id)initWithView:(NSSplitView*)devToolsView - delegate:(id<DevToolsControllerDelegate>)delegate { - DCHECK(delegate); +- (id)init { if ((self = [super init])) { - devToolsView_.reset([devToolsView retain]); - delegate_ = delegate; + splitView_.reset([[NSSplitView alloc] initWithFrame:NSZeroRect]); + [splitView_ setDividerStyle:NSSplitViewDividerStyleThin]; + [splitView_ setVertical:NO]; + [splitView_ setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable]; } return self; } +- (NSView*)view { + return splitView_.get(); +} + +- (NSSplitView*)splitView { + return splitView_.get(); +} + - (void)updateDevToolsForTabContents:(TabContents*)contents { // Get current devtools content. TabContents* devToolsContents = contents ? @@ -54,7 +63,7 @@ const int kMinWebHeight = 50; } - (void)showDevToolsContents:(TabContents*)devToolsContents { - NSArray* subviews = [devToolsView_ subviews]; + NSArray* subviews = [splitView_ subviews]; if (devToolsContents) { DCHECK_GE([subviews count], 1u); @@ -73,23 +82,23 @@ const int kMinWebHeight = 50; // Initial load, set to default value. splitOffset = kDefaultContentsSplitOffset; } - [devToolsView_ addSubview:devToolsView]; + [splitView_ addSubview:devToolsView]; } else { DCHECK_EQ([subviews count], 2u); // If devtools are already visible, keep the current size. splitOffset = NSHeight([devToolsView frame]); - [devToolsView_ replaceSubview:[subviews objectAtIndex:1] - with:devToolsView]; + [splitView_ replaceSubview:[subviews objectAtIndex:1] + with:devToolsView]; } // Make sure |splitOffset| isn't too large or too small. splitOffset = - std::min(splitOffset, NSHeight([devToolsView_ frame]) - kMinWebHeight); + std::min(splitOffset, NSHeight([splitView_ frame]) - kMinWebHeight); DCHECK_GE(splitOffset, 0) << "kMinWebHeight needs to be smaller than " << "smallest available tab contents space."; splitOffset = std::max(static_cast<CGFloat>(0), splitOffset); - [delegate_ resizeDevToolsToNewHeight:splitOffset]; + [self resizeDevToolsToNewHeight:splitOffset]; } else { if ([subviews count] > 1) { NSView* oldDevToolsContentsView = [subviews objectAtIndex:1]; @@ -102,4 +111,27 @@ const int kMinWebHeight = 50; } } +- (void)resizeDevToolsToNewHeight:(CGFloat)height { + NSArray* subviews = [splitView_ subviews]; + + // It seems as if |-setPosition:ofDividerAtIndex:| should do what's needed, + // but I can't figure out how to use it. Manually resize web and devtools. + // TODO(alekseys): either make setPosition:ofDividerAtIndex: work or to add a + // category on NSSplitView to handle manual resizing. + NSView* devToolsView = [subviews objectAtIndex:1]; + NSRect devToolsFrame = [devToolsView frame]; + devToolsFrame.size.height = height; + [devToolsView setFrame:devToolsFrame]; + + NSView* webView = [subviews objectAtIndex:0]; + NSRect webFrame = [webView frame]; + webFrame.size.height = + NSHeight([splitView_ frame]) - ([splitView_ dividerThickness] + height); + [webView setFrame:webFrame]; + + [splitView_ adjustSubviews]; +} + + + @end diff --git a/chrome/browser/cocoa/sidebar_controller.h b/chrome/browser/cocoa/sidebar_controller.h index c6bdfc6..f3c4a30 100644 --- a/chrome/browser/cocoa/sidebar_controller.h +++ b/chrome/browser/cocoa/sidebar_controller.h @@ -15,30 +15,26 @@ class TabContents; -// Sidebar controller's delegate interface. Delegate is responsible -// for the actual subviews resize and layout. -@protocol SidebarControllerDelegate - -// Resizes the sidebar view to the new |width| and adjusts window layout -// accordingly. -- (void)resizeSidebarToNewWidth:(CGFloat)width; - -@end - // A class that handles updates of the sidebar view within a browser window. // It swaps in the relevant sidebar contents for a given TabContents or removes // the vew, if there's no sidebar contents to show. @interface SidebarController : NSObject { @private // A view hosting sidebar contents. - scoped_nsobject<NSSplitView> sidebarView_; - id<SidebarControllerDelegate> delegate_; // weak + scoped_nsobject<NSSplitView> splitView_; + // Currently displayed sidebar contents. TabContents* sidebarContents_; // weak. } -- (id)initWithView:(NSSplitView*)sidebarView - delegate:(id<SidebarControllerDelegate>)delegate; +- (id)init; + +// This controller's view. +- (NSSplitView*)view; + +// The compiler seems to have trouble handling a function named "view" that +// returns an NSSplitView, so provide a differently-named method. +- (NSSplitView*)splitView; // Depending on |contents|'s state, decides whether the sidebar // should be shown or hidden and adjusts its width (|delegate_| handles diff --git a/chrome/browser/cocoa/sidebar_controller.mm b/chrome/browser/cocoa/sidebar_controller.mm index 9b879d6..c5a0081 100644 --- a/chrome/browser/cocoa/sidebar_controller.mm +++ b/chrome/browser/cocoa/sidebar_controller.mm @@ -30,28 +30,37 @@ const int kMinWebWidth = 50; @interface SidebarController (Private) - (void)showSidebarContents:(TabContents*)sidebarContents; +- (void)resizeSidebarToNewWidth:(CGFloat)width; @end @implementation SidebarController -- (id)initWithView:(NSSplitView*)sidebarView - delegate:(id<SidebarControllerDelegate>)delegate { - DCHECK(delegate); +- (id)init { if ((self = [super init])) { - sidebarView_.reset([sidebarView retain]); - [sidebarView_ setDelegate:self]; - delegate_ = delegate; + splitView_.reset([[NSSplitView alloc] initWithFrame:NSZeroRect]); + [splitView_ setDividerStyle:NSSplitViewDividerStyleThin]; + [splitView_ setVertical:YES]; + [splitView_ setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable]; + [splitView_ setDelegate:self]; sidebarContents_ = NULL; } return self; } - (void)dealloc { - [sidebarView_ setDelegate:nil]; + [splitView_ setDelegate:nil]; [super dealloc]; } +- (NSView*)view { + return splitView_.get(); +} + +- (NSSplitView*)splitView { + return splitView_.get(); +} + - (void)updateSidebarForTabContents:(TabContents*)contents { // Get the active sidebar content. if (SidebarManager::GetInstance() == NULL) // Happens in tests. @@ -79,7 +88,7 @@ const int kMinWebWidth = 50; } - (void)showSidebarContents:(TabContents*)sidebarContents { - NSArray* subviews = [sidebarView_ subviews]; + NSArray* subviews = [splitView_ subviews]; if (sidebarContents) { DCHECK_GE([subviews count], 1u); @@ -97,24 +106,24 @@ const int kMinWebWidth = 50; if (sidebarWidth < 0) { // Initial load, set to default value. sidebarWidth = - NSWidth([sidebarView_ frame]) * kDefaultSidebarWidthRatio; + NSWidth([splitView_ frame]) * kDefaultSidebarWidthRatio; } - [sidebarView_ addSubview:sidebarView]; + [splitView_ addSubview:sidebarView]; } else { DCHECK_EQ([subviews count], 2u); sidebarWidth = NSWidth([[subviews objectAtIndex:1] frame]); - [sidebarView_ replaceSubview:[subviews objectAtIndex:1] - with:sidebarView]; + [splitView_ replaceSubview:[subviews objectAtIndex:1] + with:sidebarView]; } // Make sure |sidebarWidth| isn't too large or too small. sidebarWidth = std::min(sidebarWidth, - NSWidth([sidebarView_ frame]) - kMinWebWidth); + NSWidth([splitView_ frame]) - kMinWebWidth); DCHECK_GE(sidebarWidth, 0) << "kMinWebWidth needs to be smaller than " << "smallest available tab contents space."; sidebarWidth = std::max(static_cast<CGFloat>(0), sidebarWidth); - [delegate_ resizeSidebarToNewWidth:sidebarWidth]; + [self resizeSidebarToNewWidth:sidebarWidth]; } else { if ([subviews count] > 1) { NSView* oldSidebarContentsView = [subviews objectAtIndex:1]; @@ -127,12 +136,33 @@ const int kMinWebWidth = 50; } } +- (void)resizeSidebarToNewWidth:(CGFloat)width { + NSArray* subviews = [splitView_ subviews]; + + // It seems as if |-setPosition:ofDividerAtIndex:| should do what's needed, + // but I can't figure out how to use it. Manually resize web and sidebar. + // TODO(alekseys): either make setPosition:ofDividerAtIndex: work or to add a + // category on NSSplitView to handle manual resizing. + NSView* sidebarView = [subviews objectAtIndex:1]; + NSRect sidebarFrame = [sidebarView frame]; + sidebarFrame.size.width = width; + [sidebarView setFrame:sidebarFrame]; + + NSView* webView = [subviews objectAtIndex:0]; + NSRect webFrame = [webView frame]; + webFrame.size.width = + NSWidth([splitView_ frame]) - ([splitView_ dividerThickness] + width); + [webView setFrame:webFrame]; + + [splitView_ adjustSubviews]; +} + // NSSplitViewDelegate protocol. - (BOOL)splitView:(NSSplitView *)splitView shouldAdjustSizeOfSubview:(NSView *)subview { // Return NO for the sidebar view to indicate that it should not be resized // automatically. The sidebar keeps the width set by the user. - if ([[sidebarView_ subviews] indexOfObject:subview] == 1) + if ([[splitView_ subviews] indexOfObject:subview] == 1) return NO; return YES; } diff --git a/chrome/browser/cocoa/tab_window_controller.h b/chrome/browser/cocoa/tab_window_controller.h index 9d97fe1..ad0d5b7 100644 --- a/chrome/browser/cocoa/tab_window_controller.h +++ b/chrome/browser/cocoa/tab_window_controller.h @@ -39,8 +39,6 @@ @interface TabWindowController : NSWindowController<NSWindowDelegate> { @private IBOutlet FastResizeView* tabContentArea_; - IBOutlet NSSplitView* contentsContainer_; - IBOutlet NSSplitView* devToolsContainer_; // TODO(pinkerton): Figure out a better way to initialize one or the other // w/out needing both to be in the nib. IBOutlet TabStripView* topTabStripView_; @@ -59,8 +57,6 @@ } @property(readonly, nonatomic) TabStripView* tabStripView; @property(readonly, nonatomic) FastResizeView* tabContentArea; -@property(readonly, nonatomic) NSSplitView* contentsContainer; -@property(readonly, nonatomic) NSSplitView* devToolsContainer; // Used during tab dragging to turn on/off the overlay window when a tab // is torn off. If -deferPerformClose (below) is used, -removeOverlay will diff --git a/chrome/browser/cocoa/tab_window_controller.mm b/chrome/browser/cocoa/tab_window_controller.mm index f9e390b..4e886eb 100644 --- a/chrome/browser/cocoa/tab_window_controller.mm +++ b/chrome/browser/cocoa/tab_window_controller.mm @@ -41,8 +41,6 @@ @implementation TabWindowController @synthesize tabContentArea = tabContentArea_; -@synthesize contentsContainer = contentsContainer_; -@synthesize devToolsContainer = devToolsContainer_; - (id)initWithWindow:(NSWindow*)window { if ((self = [super initWithWindow:window]) != nil) { |