| Index: chrome/browser/cocoa/bookmark_bar_controller.mm
|
| ===================================================================
|
| --- chrome/browser/cocoa/bookmark_bar_controller.mm (revision 19517)
|
| +++ chrome/browser/cocoa/bookmark_bar_controller.mm (working copy)
|
| @@ -16,9 +16,9 @@
|
| #include "skia/ext/skia_utils_mac.h"
|
|
|
| @interface BookmarkBarController(Private)
|
| -- (void)applyContentAreaOffset:(BOOL)apply;
|
| +- (void)applyContentAreaOffset:(BOOL)apply immediately:(BOOL)immediately;
|
| - (void)positionBar;
|
| -- (void)showBookmarkBar:(BOOL)enable;
|
| +- (void)showBookmarkBar:(BOOL)enable immediately:(BOOL)immediately;
|
| @end
|
|
|
| namespace {
|
| @@ -38,13 +38,16 @@
|
| bookmarkModel_ = profile->GetBookmarkModel();
|
| contentView_ = content;
|
| delegate_ = delegate;
|
| + // Be sure to enable the bar before trying to show it...
|
| + barIsEnabled_ = YES;
|
| // Create and initialize the view's position. Show it if appropriate.
|
| // TODO(jrg): put it in a nib if necessary.
|
| NSRect frame = NSMakeRect(0, 0, 0, 30);
|
| bookmarkBarView_ = [[BookmarkBarView alloc] initWithFrame:frame];
|
| [self positionBar];
|
| - if (profile->GetPrefs()->GetBoolean(prefs::kShowBookmarkBar))
|
| - [self showBookmarkBar:YES];
|
| + preferences_ = profile->GetPrefs();
|
| + if (preferences_->GetBoolean(prefs::kShowBookmarkBar))
|
| + [self showBookmarkBar:YES immediately:NO];
|
| [[[contentView_ window] contentView] addSubview:bookmarkBarView_];
|
| }
|
| // Don't pass ourself along until our init is done.
|
| @@ -64,7 +67,7 @@
|
| - (void)positionBar {
|
| // Hide or show bar based on initial visibility and set the resize flags.
|
| [bookmarkBarView_ setAutoresizingMask:NSViewWidthSizable | NSViewMinYMargin];
|
| - [bookmarkBarView_ setHidden:!barIsVisible_];
|
| + [bookmarkBarView_ setHidden:!barShouldBeShown_];
|
|
|
| // Set the bar's height to zero and position it at the top of the
|
| // content area, within the window's content view (as opposed to the
|
| @@ -86,16 +89,21 @@
|
| [bookmarkBarView_ setFrame:barFrame];
|
| }
|
|
|
| -// Show or hide the bar based on the value of |enable|. Handles animating the
|
| -// resize of the content view.
|
| -- (void)showBookmarkBar:(BOOL)enable {
|
| - contentViewHasOffset_ = enable;
|
| - [bookmarkBarView_ setHidden:enable ? NO : YES];
|
| - [self applyContentAreaOffset:enable];
|
| -
|
| - barIsVisible_ = enable;
|
| - if (enable) {
|
| - [self loaded:bookmarkModel_];
|
| +// Show or hide the bar based on the value of |show|. Handles
|
| +// animating the resize of the content view. if |immediately| is YES,
|
| +// make changes immediately instead of using an animator. If the bar
|
| +// is disabled, do absolutely nothing. The routine which enables the
|
| +// bar will show it if relevant using other mechanisms (the pref) to
|
| +// determine desired state.
|
| +- (void)showBookmarkBar:(BOOL)show immediately:(BOOL)immediately {
|
| + if (barIsEnabled_) {
|
| + contentViewHasOffset_ = show;
|
| + [bookmarkBarView_ setHidden:show ? NO : YES];
|
| + [self applyContentAreaOffset:show immediately:immediately];
|
| + barShouldBeShown_ = show;
|
| + if (show) {
|
| + [self loaded:bookmarkModel_];
|
| + }
|
| }
|
| }
|
|
|
| @@ -103,7 +111,7 @@
|
| // bookmark bar. If apply==YES, always make room (the contentView_ is
|
| // "full size"). If apply==NO we are trying to undo an offset. If no
|
| // offset there is nothing to undo.
|
| -- (void)applyContentAreaOffset:(BOOL)apply {
|
| +- (void)applyContentAreaOffset:(BOOL)apply immediately:(BOOL)immediately {
|
| if (bookmarkBarView_ == nil) {
|
| // We're too early, but awakeFromNib will call me again.
|
| return;
|
| @@ -119,22 +127,43 @@
|
| else
|
| frame.size.height += kBookmarkBarHeight;
|
|
|
| - [[contentView_ animator] setFrame:frame];
|
| + if (immediately) {
|
| + [contentView_ setFrame:frame];
|
| + [contentView_ setNeedsDisplay:YES];
|
| + } else {
|
| + [[contentView_ animator] setFrame:frame];
|
| + }
|
| +
|
| [bookmarkBarView_ setNeedsDisplay:YES];
|
| [contentView_ setNeedsDisplay:YES];
|
| }
|
|
|
| - (BOOL)isBookmarkBarVisible {
|
| - return barIsVisible_;
|
| + return barShouldBeShown_;
|
| }
|
|
|
| // We don't change a preference; we only change visibility.
|
| // Preference changing (global state) is handled in
|
| // BrowserWindowCocoa::ToggleBookmarkBar().
|
| - (void)toggleBookmarkBar {
|
| - [self showBookmarkBar:!barIsVisible_];
|
| + [self showBookmarkBar:!barShouldBeShown_ immediately:NO];
|
| }
|
|
|
| +- (void)setBookmarkBarEnabled:(BOOL)enabled {
|
| + if (enabled) {
|
| + // Enabling the bar; set enabled then show if needed.
|
| + barIsEnabled_ = YES;
|
| + if (preferences_->GetBoolean(prefs::kShowBookmarkBar))
|
| + [self showBookmarkBar:YES immediately:YES];
|
| + } else {
|
| + // Disabling the bar; hide if visible.
|
| + if ([self isBookmarkBarVisible]) {
|
| + [self showBookmarkBar:NO immediately:YES];
|
| + }
|
| + barIsEnabled_ = NO;
|
| + }
|
| +}
|
| +
|
| // Delete all items from the bookmark bar.
|
| - (void)clearBookmarkBar {
|
| [bookmarkBarView_ setSubviews:[NSArray array]];
|
| @@ -250,8 +279,8 @@
|
| // TODO(jrg): for now this is brute force.
|
| - (void)loaded:(BookmarkModel*)model {
|
| DCHECK(model == bookmarkModel_);
|
| - // Do nothing if not visible or too early
|
| - if ((barIsVisible_ == NO) || !model->IsLoaded())
|
| + // Do nothing if not active or too early
|
| + if ((barShouldBeShown_ == NO) || !model->IsLoaded())
|
| return;
|
| // Else brute force nuke and build.
|
| const BookmarkNode* node = model->GetBookmarkBarNode();
|
|
|