diff options
author | mrossetti@chromium.org <mrossetti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-02 20:54:58 +0000 |
---|---|---|
committer | mrossetti@chromium.org <mrossetti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-02 20:54:58 +0000 |
commit | 195eef06359b185ce061d17aafd4e898fe02e8ee (patch) | |
tree | 0a5d9de0df046672feff8ccfee239d04523e67d1 | |
parent | d824a60fc2e91cd195c9722d6557a8038cf19503 (diff) | |
download | chromium_src-195eef06359b185ce061d17aafd4e898fe02e8ee.zip chromium_src-195eef06359b185ce061d17aafd4e898fe02e8ee.tar.gz chromium_src-195eef06359b185ce061d17aafd4e898fe02e8ee.tar.bz2 |
Insure that the bookmark bubble comes up properly aligned when the browser is in full-screen mode and the floating bar is not showing by having the floating bar come up.
BUG=39428
TEST=1) Enter full-screen mode. Press Cmd-D and verify that the floating bar appears and that the bubble is properly aligned. Press 'Remove' and verify that the floating bar goes away. Repeat but this time press 'Done'. Repeat once again and this time press 'Edit' and verify that the bubble goes away but the floating bar remains until the bookmark editor is dismissed with the editor pane appearsing off the bottom of the floating bar.
2) Exit full-screen mode and perform the above exercises to insure that the bookmark bubble and bookmark edit window are still presented as expected: Press Cmd-D and verify that the bubble is properly aligned. Press 'Remove' and verify that the bubble goes away. Repeat but this time press 'Done'. Repeat once again and this time press 'Edit' and verify that the bubble goes and that the bookmark editor pane is presented off the bottom of the Chrome toolbar.
Review URL: http://codereview.chromium.org/1539011
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@43519 0039d316-1c4b-4281-b951-d872f2087c98
6 files changed, 32 insertions, 16 deletions
diff --git a/chrome/browser/cocoa/bookmark_bubble_controller.h b/chrome/browser/cocoa/bookmark_bubble_controller.h index 68f835f..53baeb9 100644 --- a/chrome/browser/cocoa/bookmark_bubble_controller.h +++ b/chrome/browser/cocoa/bookmark_bubble_controller.h @@ -19,7 +19,6 @@ class BookmarkNode; @interface BookmarkBubbleController : NSWindowController<NSWindowDelegate> { @private NSWindow* parentWindow_; // weak - NSPoint topRightForBubble_; // Both weak; owned by the current browser's profile BookmarkModel* model_; // weak @@ -45,7 +44,6 @@ class BookmarkNode; // it desires it to be visible on the screen. It is not shown by the // init routine. Closing of the window happens implicitly on dealloc. - (id)initWithParentWindow:(NSWindow*)parentWindow - topRightForBubble:(NSPoint)topRightForBubble model:(BookmarkModel*)model node:(const BookmarkNode*)node alreadyBookmarked:(BOOL)alreadyBookmarked; diff --git a/chrome/browser/cocoa/bookmark_bubble_controller.mm b/chrome/browser/cocoa/bookmark_bubble_controller.mm index e59d1f6..c3b7cd0 100644 --- a/chrome/browser/cocoa/bookmark_bubble_controller.mm +++ b/chrome/browser/cocoa/bookmark_bubble_controller.mm @@ -7,6 +7,7 @@ #include "base/mac_util.h" #include "base/sys_string_conversions.h" #include "chrome/browser/bookmarks/bookmark_model.h" +#import "chrome/browser/cocoa/browser_window_controller.h" #import "chrome/browser/cocoa/info_bubble_view.h" #include "chrome/browser/metrics/user_metrics.h" #include "grit/generated_resources.h" @@ -39,7 +40,6 @@ } - (id)initWithParentWindow:(NSWindow*)parentWindow - topRightForBubble:(NSPoint)topRightForBubble model:(BookmarkModel*)model node:(const BookmarkNode*)node alreadyBookmarked:(BOOL)alreadyBookmarked { @@ -48,7 +48,6 @@ ofType:@"nib"]; if ((self = [super initWithWindowNibPath:nibPath owner:self])) { parentWindow_ = parentWindow; - topRightForBubble_ = topRightForBubble; model_ = model; node_ = node; alreadyBookmarked_ = alreadyBookmarked; @@ -95,8 +94,15 @@ // position). We cannot have an addChildWindow: and a subsequent // showWindow:. Thus, we have our own version. - (void)showWindow:(id)sender { + BrowserWindowController* bwc = + [BrowserWindowController browserWindowControllerForWindow:parentWindow_]; + [bwc lockBarVisibilityForOwner:self withAnimation:NO delay:NO]; NSWindow* window = [self window]; // completes nib load - NSPoint origin = [parentWindow_ convertBaseToScreen:topRightForBubble_]; + // Insure decent positioning even in the absence of a browser controller, + // which will occur for some unit tests. + NSPoint topRight = bwc ? [bwc topRightForBubble] : + NSMakePoint([window frame].size.width, [window frame].size.height); + NSPoint origin = [parentWindow_ convertBaseToScreen:topRight]; origin.y -= NSHeight([window frame]); origin.x -= NSWidth([window frame]); [window setFrameOrigin:origin]; @@ -125,6 +131,8 @@ } - (void)close { + [[BrowserWindowController browserWindowControllerForWindow:parentWindow_] + releaseBarVisibilityForOwner:self withAnimation:YES delay:NO]; [parentWindow_ removeChildWindow:[self window]]; // If you quit while the bubble is open, sometimes we get a diff --git a/chrome/browser/cocoa/bookmark_bubble_controller_unittest.mm b/chrome/browser/cocoa/bookmark_bubble_controller_unittest.mm index abc991c..556f228 100644 --- a/chrome/browser/cocoa/bookmark_bubble_controller_unittest.mm +++ b/chrome/browser/cocoa/bookmark_bubble_controller_unittest.mm @@ -8,6 +8,7 @@ #include "base/scoped_nsobject.h" #import "chrome/browser/cocoa/bookmark_bubble_controller.h" #include "chrome/browser/cocoa/browser_test_helper.h" +#include "chrome/browser/cocoa/browser_window_controller.h" #import "chrome/browser/cocoa/cocoa_test_helper.h" #import "chrome/browser/cocoa/info_bubble_window.h" #include "testing/gtest/include/gtest/gtest.h" @@ -29,7 +30,6 @@ class BookmarkBubbleControllerTest : public CocoaTest { // TODO(shess): Figure out why CocoaTest::TearDown() needs 3 // passes through the event loop to fully close out these windows. [controller_ close]; - controller_ = nil; CocoaTest::TearDown(); } @@ -42,7 +42,6 @@ class BookmarkBubbleControllerTest : public CocoaTest { } controller_ = [[BookmarkBubbleController alloc] initWithParentWindow:test_window() - topRightForBubble:TopRightForBubble() model:helper_.profile()->GetBookmarkModel() node:node alreadyBookmarked:YES]; @@ -60,10 +59,6 @@ class BookmarkBubbleControllerTest : public CocoaTest { bool IsWindowClosing() { return [static_cast<InfoBubbleWindow*>([controller_ window]) isClosing]; } - - NSPoint TopRightForBubble() { - return NSMakePoint(NSWidth([test_window() frame]) - 10, 300); - } }; // Confirm basics about the bubble window (e.g. that it is inside the @@ -334,7 +329,6 @@ TEST_F(BookmarkBubbleControllerTest, EscapeRemovesNewBookmark) { BookmarkBubbleController* controller = [[BookmarkBubbleController alloc] initWithParentWindow:test_window() - topRightForBubble:TopRightForBubble() model:helper_.profile()->GetBookmarkModel() node:node alreadyBookmarked:NO]; // The last param is the key difference. diff --git a/chrome/browser/cocoa/bookmark_editor_base_controller.mm b/chrome/browser/cocoa/bookmark_editor_base_controller.mm index 8ecbc47..017d477 100644 --- a/chrome/browser/cocoa/bookmark_editor_base_controller.mm +++ b/chrome/browser/cocoa/bookmark_editor_base_controller.mm @@ -14,6 +14,7 @@ #import "chrome/browser/cocoa/bookmark_all_tabs_controller.h" #import "chrome/browser/cocoa/bookmark_editor_controller.h" #import "chrome/browser/cocoa/bookmark_tree_browser_cell.h" +#import "chrome/browser/cocoa/browser_window_controller.h" #include "chrome/browser/profile.h" #include "grit/generated_resources.h" @@ -227,6 +228,10 @@ class BookmarkEditorBaseControllerBridge : public BookmarkModelObserver { // TODO(jrg): consider NSModalSession. - (void)runAsModalSheet { + // Lock down floating bar when in full-screen mode. Don't animate + // otherwise the pane will be misplaced. + [[BrowserWindowController browserWindowControllerForWindow:parentWindow_] + lockBarVisibilityForOwner:self withAnimation:NO delay:NO]; [NSApp beginSheet:[self window] modalForWindow:parentWindow_ modalDelegate:self @@ -268,6 +273,8 @@ class BookmarkEditorBaseControllerBridge : public BookmarkModelObserver { returnCode:(int)returnCode contextInfo:(void*)contextInfo { [sheet close]; + [[BrowserWindowController browserWindowControllerForWindow:parentWindow_] + releaseBarVisibilityForOwner:self withAnimation:YES delay:NO]; } - (void)windowWillClose:(NSNotification*)notification { diff --git a/chrome/browser/cocoa/browser_window_controller.h b/chrome/browser/cocoa/browser_window_controller.h index 373fe20..4568e6a 100644 --- a/chrome/browser/cocoa/browser_window_controller.h +++ b/chrome/browser/cocoa/browser_window_controller.h @@ -125,6 +125,10 @@ class TabStripModelObserverBridge; } // A convenience class method which gets the |BrowserWindowController| for a +// given window. This method returns nil if no window in the chain has a BWC. ++ (BrowserWindowController*)browserWindowControllerForWindow:(NSWindow*)window; + +// A convenience class method which gets the |BrowserWindowController| for a // given view. This is the controller for the window containing |view|, if it // is a BWC, or the first controller in the parent-window chain that is a // BWC. This method returns nil if no window in the chain has a BWC. @@ -240,6 +244,9 @@ class TabStripModelObserverBridge; // Gets the pattern phase for the window. - (NSPoint)themePatternPhase; +// Return a point suitable for the topRight for a bookmark bubble. +- (NSPoint)topRightForBubble; + @end // @interface BrowserWindowController diff --git a/chrome/browser/cocoa/browser_window_controller.mm b/chrome/browser/cocoa/browser_window_controller.mm index 91b891d..05edc1a 100644 --- a/chrome/browser/cocoa/browser_window_controller.mm +++ b/chrome/browser/cocoa/browser_window_controller.mm @@ -155,8 +155,7 @@ @implementation BrowserWindowController -+ (BrowserWindowController*)browserWindowControllerForView:(NSView*)view { - NSWindow* window = [view window]; ++ (BrowserWindowController*)browserWindowControllerForWindow:(NSWindow*)window { while (window) { id controller = [window windowController]; if ([controller isKindOfClass:[BrowserWindowController class]]) @@ -166,6 +165,11 @@ return nil; } ++ (BrowserWindowController*)browserWindowControllerForView:(NSView*)view { + NSWindow* window = [view window]; + return [BrowserWindowController browserWindowControllerForWindow:window]; +} + // Load the browser window nib and do any Cocoa-specific initialization. // Takes ownership of |browser|. Note that the nib also sets this controller // up as the window's delegate. @@ -1385,10 +1389,8 @@ if (!bookmarkBubbleController_) { BookmarkModel* model = browser_->profile()->GetBookmarkModel(); const BookmarkNode* node = model->GetMostRecentlyAddedNodeForURL(url); - NSPoint topRight = [self topRightForBubble]; bookmarkBubbleController_ = [[BookmarkBubbleController alloc] initWithParentWindow:[self window] - topRightForBubble:topRight model:model node:node alreadyBookmarked:alreadyMarked]; |