summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/app/nibs/BrowserWindow.xib56
-rw-r--r--chrome/browser/cocoa/browser_window_controller.h6
-rw-r--r--chrome/browser/cocoa/browser_window_controller.mm76
-rw-r--r--chrome/browser/cocoa/browser_window_controller_private.mm4
-rw-r--r--chrome/browser/cocoa/browser_window_controller_unittest.mm22
-rw-r--r--chrome/browser/cocoa/dev_tools_controller.h23
-rw-r--r--chrome/browser/cocoa/dev_tools_controller.mm54
-rw-r--r--chrome/browser/cocoa/sidebar_controller.h24
-rw-r--r--chrome/browser/cocoa/sidebar_controller.mm60
-rw-r--r--chrome/browser/cocoa/tab_window_controller.h4
-rw-r--r--chrome/browser/cocoa/tab_window_controller.mm2
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) {