summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrohitrao@chromium.org <rohitrao@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-05 16:22:54 +0000
committerrohitrao@chromium.org <rohitrao@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-05 16:22:54 +0000
commit3264774f72062f95a5328e65efd0dc5075fec691 (patch)
tree5a168a6eea40a4421873dbdc3fa9bfe530dfc5cf
parent33f39d5985daafddf49ad68be2e1c4c03baad06c (diff)
downloadchromium_src-3264774f72062f95a5328e65efd0dc5075fec691.zip
chromium_src-3264774f72062f95a5328e65efd0dc5075fec691.tar.gz
chromium_src-3264774f72062f95a5328e65efd0dc5075fec691.tar.bz2
[Mac] Lock open the fullscreen overlay when browsing bookmark folders.
BUG=37271 TEST=Go fullscreen. Open a folder on the bookmarkbar and hover over one of its subentries. Overlay should not scroll back up. Review URL: http://codereview.chromium.org/669086 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@40740 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/cocoa/bookmark_bar_controller.mm22
-rw-r--r--chrome/browser/cocoa/bookmark_bar_folder_controller.mm18
-rw-r--r--chrome/browser/cocoa/bookmark_bar_folder_controller_unittest.mm37
-rw-r--r--chrome/browser/cocoa/bookmark_bar_folder_view_unittest.mm6
-rw-r--r--chrome/browser/cocoa/bookmark_button.h7
5 files changed, 88 insertions, 2 deletions
diff --git a/chrome/browser/cocoa/bookmark_bar_controller.mm b/chrome/browser/cocoa/bookmark_bar_controller.mm
index 9bbf8c8..0e96495 100644
--- a/chrome/browser/cocoa/bookmark_bar_controller.mm
+++ b/chrome/browser/cocoa/bookmark_bar_controller.mm
@@ -25,6 +25,7 @@
#import "chrome/browser/cocoa/bookmark_menu.h"
#import "chrome/browser/cocoa/bookmark_menu_cocoa_controller.h"
#import "chrome/browser/cocoa/bookmark_name_folder_controller.h"
+#import "chrome/browser/cocoa/browser_window_controller.h"
#import "chrome/browser/cocoa/event_utils.h"
#import "chrome/browser/cocoa/menu_button.h"
#import "chrome/browser/cocoa/themed_window.h"
@@ -897,6 +898,27 @@ static BOOL ValueInRangeInclusive(CGFloat low, CGFloat value, CGFloat high) {
return browser_->profile()->GetThemeProvider();
}
+- (void)childFolderWillShow:(id<BookmarkButtonControllerProtocol>)child {
+ // Lock bar visibility, forcing the overlay to stay open when in fullscreen
+ // mode.
+ BrowserWindowController* browserController =
+ [BrowserWindowController browserWindowControllerForView:[self view]];
+ [browserController lockBarVisibilityForOwner:child
+ withAnimation:NO
+ delay:NO];
+}
+
+- (void)childFolderWillClose:(id<BookmarkButtonControllerProtocol>)child {
+ // Release bar visibility, allowing the overlay to close if in fullscreen
+ // mode.
+ BrowserWindowController* browserController =
+ [BrowserWindowController browserWindowControllerForView:[self view]];
+ [browserController releaseBarVisibilityForOwner:child
+ withAnimation:NO
+ delay:NO];
+}
+
+
// Enable or disable items. We are the menu delegate for both the bar
// and for bookmark folder buttons.
- (BOOL)validateUserInterfaceItem:(id)item {
diff --git a/chrome/browser/cocoa/bookmark_bar_folder_controller.mm b/chrome/browser/cocoa/bookmark_bar_folder_controller.mm
index 7dedb21..f000750c 100644
--- a/chrome/browser/cocoa/bookmark_bar_folder_controller.mm
+++ b/chrome/browser/cocoa/bookmark_bar_folder_controller.mm
@@ -11,7 +11,7 @@
#import "chrome/browser/cocoa/bookmark_bar_controller.h" // namespace bookmarks
#import "chrome/browser/cocoa/bookmark_bar_folder_view.h"
#import "chrome/browser/cocoa/bookmark_button_cell.h"
-
+#import "chrome/browser/cocoa/browser_window_controller.h"
@interface BookmarkBarFolderController(Private)
- (void)configureWindow;
@@ -52,6 +52,13 @@
[super dealloc];
}
+// Overriden from NSWindowController to call childFolderWillShow: before showing
+// the window.
+- (void)showWindow:(id)sender {
+ [parentController_ childFolderWillShow:self];
+ [super showWindow:sender];
+}
+
// Update theme information for all our buttons.
- (void)updateTheme:(ThemeProvider*)themeProvider {
if (!themeProvider)
@@ -224,6 +231,14 @@
return [parentController_ themeProvider];
}
+- (void)childFolderWillShow:(id<BookmarkButtonControllerProtocol>)child {
+ // Do nothing.
+}
+
+- (void)childFolderWillClose:(id<BookmarkButtonControllerProtocol>)child {
+ // Do nothing.
+}
+
// Recursively close all bookmark folders.
- (void)closeAllBookmarkFolders {
// Closing the top level implicitly closes all children.
@@ -255,6 +270,7 @@
// Delegate callback.
- (void)windowWillClose:(NSNotification*)notification {
+ [parentController_ childFolderWillClose:self];
[[self parentWindow] removeChildWindow:[self window]];
[self closeBookmarkFolder:self];
[self autorelease];
diff --git a/chrome/browser/cocoa/bookmark_bar_folder_controller_unittest.mm b/chrome/browser/cocoa/bookmark_bar_folder_controller_unittest.mm
index 1b94292..59d7465 100644
--- a/chrome/browser/cocoa/bookmark_bar_folder_controller_unittest.mm
+++ b/chrome/browser/cocoa/bookmark_bar_folder_controller_unittest.mm
@@ -13,6 +13,27 @@
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/platform_test.h"
+@interface BookmarkBarFolderControllerPong : BookmarkBarFolderController {
+ BOOL childFolderWillShow_;
+ BOOL childFolderWillClose_;
+}
+@property(readonly) BOOL childFolderWillShow;
+@property(readonly) BOOL childFolderWillClose;
+@end
+
+@implementation BookmarkBarFolderControllerPong
+@synthesize childFolderWillShow = childFolderWillShow_;
+@synthesize childFolderWillClose = childFolderWillClose_;
+
+- (void)childFolderWillShow:(id<BookmarkButtonControllerProtocol>)child {
+ childFolderWillShow_ = YES;
+}
+
+- (void)childFolderWillClose:(id<BookmarkButtonControllerProtocol>)child {
+ childFolderWillClose_ = YES;
+}
+@end
+
class BookmarkBarFolderControllerTest : public CocoaTest {
public:
BrowserTestHelper helper_;
@@ -50,7 +71,7 @@ class BookmarkBarFolderControllerTest : public CocoaTest {
BookmarkBarFolderController* SimpleBookmarkBarFolderController() {
BookmarkButton* parentButton = [[parentBarController_ buttons]
objectAtIndex:0];
- return [[BookmarkBarFolderController alloc]
+ return [[BookmarkBarFolderControllerPong alloc]
initWithParentButton:parentButton
parentController:parentBarController_];
}
@@ -196,6 +217,20 @@ TEST_F(BookmarkBarFolderControllerTest, OpenFolder) {
EXPECT_FALSE([bbfc folderController]);
}
+TEST_F(BookmarkBarFolderControllerTest, ChildFolderCallbacks) {
+ scoped_nsobject<BookmarkBarFolderControllerPong> bbfc;
+ bbfc.reset(SimpleBookmarkBarFolderController());
+ EXPECT_TRUE(bbfc.get());
+
+ EXPECT_FALSE([bbfc childFolderWillShow]);
+ [bbfc openBookmarkFolderFromButton:[[bbfc buttons] objectAtIndex:0]];
+ EXPECT_TRUE([bbfc childFolderWillShow]);
+
+ EXPECT_FALSE([bbfc childFolderWillClose]);
+ [bbfc closeBookmarkFolder:nil];
+ EXPECT_TRUE([bbfc childFolderWillClose]);
+}
+
// TODO(jrg): draggingEntered: and draggingExited: trigger timers so
// they are hard to test. Factor out "fire timers" into routines
// which can be overridden to fire immediately to make behavior
diff --git a/chrome/browser/cocoa/bookmark_bar_folder_view_unittest.mm b/chrome/browser/cocoa/bookmark_bar_folder_view_unittest.mm
index 514c3b9..a549538 100644
--- a/chrome/browser/cocoa/bookmark_bar_folder_view_unittest.mm
+++ b/chrome/browser/cocoa/bookmark_bar_folder_view_unittest.mm
@@ -91,6 +91,12 @@
return nil;
}
+- (void)childFolderWillShow:(id<BookmarkButtonControllerProtocol>)child {
+}
+
+- (void)childFolderWillClose:(id<BookmarkButtonControllerProtocol>)child {
+}
+
@end
namespace {
diff --git a/chrome/browser/cocoa/bookmark_button.h b/chrome/browser/cocoa/bookmark_button.h
index 3144247..304a07d 100644
--- a/chrome/browser/cocoa/bookmark_button.h
+++ b/chrome/browser/cocoa/bookmark_button.h
@@ -8,6 +8,7 @@
@class BookmarkButton;
class BookmarkModel;
class BookmarkNode;
+@class BrowserWindowController;
class ThemeProvider;
// Protocol for a BookmarkButton's delegate, responsible for doing
@@ -79,6 +80,12 @@ class ThemeProvider;
// Return the theme provider associated with this browser window.
- (ThemeProvider*)themeProvider;
+// Called just before a child folder puts itself on screen.
+- (void)childFolderWillShow:(id<BookmarkButtonControllerProtocol>)child;
+
+// Called just before a child folder closes.
+- (void)childFolderWillClose:(id<BookmarkButtonControllerProtocol>)child;
+
@end // @protocol BookmarkButtonControllerProtocol