Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3054)

Unified Diff: chrome/browser/ui/cocoa/browser_window_controller.mm

Issue 1308713002: [Mac] Enable MacViews bookmark bubble behind --enable-mac-views-dialogs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@pulse
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/cocoa/browser_window_controller.mm
diff --git a/chrome/browser/ui/cocoa/browser_window_controller.mm b/chrome/browser/ui/cocoa/browser_window_controller.mm
index b86492f79da7f30b1b6dd650a603f6e73c7dfe09..c7e7bfc91a9a42357f603372dbd3765bf415d584 100644
--- a/chrome/browser/ui/cocoa/browser_window_controller.mm
+++ b/chrome/browser/ui/cocoa/browser_window_controller.mm
@@ -30,11 +30,13 @@
#include "chrome/browser/themes/theme_service.h"
#include "chrome/browser/themes/theme_service_factory.h"
#include "chrome/browser/translate/chrome_translate_client.h"
+#include "chrome/browser/ui/bookmarks/bookmark_bubble_observer.h"
#include "chrome/browser/ui/bookmarks/bookmark_editor.h"
#include "chrome/browser/ui/bookmarks/bookmark_utils.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_command_controller.h"
#include "chrome/browser/ui/browser_commands.h"
+#include "chrome/browser/ui/browser_dialogs.h"
#include "chrome/browser/ui/browser_instant_controller.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/browser_window_state.h"
@@ -95,6 +97,7 @@
#import "ui/base/cocoa/nsview_additions.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/l10n/l10n_util_mac.h"
+#import "ui/gfx/mac/coordinate_conversion.h"
#include "ui/gfx/mac/scoped_cocoa_disable_screen_updates.h"
using bookmarks::BookmarkModel;
@@ -182,6 +185,49 @@ using content::Referrer;
using content::RenderWidgetHostView;
using content::WebContents;
+@interface BrowserWindowController ()
+// Declared for ViewsBookmarkBubbleObserver.
+- (void)viewsBookmarkBubbleClosed;
+@end
+
+namespace {
+
+// Manages toolbar visibility locking and bookmark button pulsing.
+class ViewsBookmarkBubbleObserver : public bookmarks::BookmarkBubbleObserver {
tapted 2015/08/21 07:19:18 This doesn't feel right in this file, but I haven'
jackhou1 2015/08/24 08:22:04 I decided to pull all the non-Views parts out to a
+ public:
+ explicit ViewsBookmarkBubbleObserver(BrowserWindowController* controller)
+ : controller_(controller), lockOwner_([[NSObject alloc] init]) {}
+ ~ViewsBookmarkBubbleObserver() override {}
+
+ // bookmarks::BookmarkBubbleObserver.
+ void OnBookmarkBubbleShown(const BookmarkNode* node) override {
+ [controller_ lockBarVisibilityForOwner:lockOwner_
+ withAnimation:NO
+ delay:NO];
+ pulsingBookmarkNode_ =
+ [[controller_ bookmarkBarController] startPulsingBookmarkNode:node];
+ }
+
+ void OnBookmarkBubbleHidden() override {
+ [controller_ releaseBarVisibilityForOwner:lockOwner_
+ withAnimation:YES
+ delay:NO];
+ [[controller_ bookmarkBarController]
+ stopPulsingBookmarkNode:pulsingBookmarkNode_];
+ pulsingBookmarkNode_ = nullptr;
+ [controller_ viewsBookmarkBubbleClosed];
+ }
+
+ private:
+ BrowserWindowController* controller_; // Weak, owns us.
+ const BookmarkNode* pulsingBookmarkNode_ = nullptr;
+ base::scoped_nsobject<NSObject> lockOwner_;
+
+ DISALLOW_COPY_AND_ASSIGN(ViewsBookmarkBubbleObserver);
+};
+
+} // namespace
+
@interface NSWindow (NSPrivateApis)
// Note: These functions are private, use -[NSObject respondsToSelector:]
// before calling them.
@@ -1766,6 +1812,19 @@ using content::WebContents;
// Show the bookmark bubble (e.g. user just clicked on the STAR).
- (void)showBookmarkBubbleForURL:(const GURL&)url
alreadyBookmarked:(BOOL)alreadyMarked {
+ if (chrome::ToolkitViewsDialogsEnabled()) {
+ if (viewsBookmarkBubbleObserver_.get())
+ return;
+
+ viewsBookmarkBubbleObserver_.reset(new ViewsBookmarkBubbleObserver(self));
+ chrome::ShowBookmarkBubbleViewsAtPoint(
+ gfx::ScreenPointFromNSPoint(
+ [[self window] convertBaseToScreen:[self bookmarkBubblePoint]]),
+ [[self window] contentView], viewsBookmarkBubbleObserver_.get(),
+ browser_.get(), url, alreadyMarked);
+ return;
tapted 2015/08/21 07:19:18 DCHECK(viewsBookmarkBubbleObserver_) ?
jackhou1 2015/08/24 08:22:04 Done. Is this to ensure it's not closed immediatel
tapted 2015/08/25 03:10:16 oops - missed a question. I guess that's part of i
+ }
+
if (!bookmarkBubbleController_) {
BookmarkModel* model =
BookmarkModelFactory::GetForProfile(browser_->profile());
@@ -1798,6 +1857,10 @@ using content::WebContents;
bookmarkBubbleController_ = nil;
}
+- (void)viewsBookmarkBubbleClosed {
+ viewsBookmarkBubbleObserver_.reset();
+}
+
// Handle the editBookmarkNode: action sent from bookmark bubble controllers.
- (void)editBookmarkNode:(id)sender {
BOOL responds = [sender respondsToSelector:@selector(node)];

Powered by Google App Engine
This is Rietveld 408576698