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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "chrome/browser/ui/cocoa/browser_window_controller.h" 5 #import "chrome/browser/ui/cocoa/browser_window_controller.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <numeric> 8 #include <numeric>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 12 matching lines...) Expand all
23 #include "chrome/browser/extensions/extension_commands_global_registry.h" 23 #include "chrome/browser/extensions/extension_commands_global_registry.h"
24 #include "chrome/browser/fullscreen.h" 24 #include "chrome/browser/fullscreen.h"
25 #include "chrome/browser/profiles/avatar_menu.h" 25 #include "chrome/browser/profiles/avatar_menu.h"
26 #include "chrome/browser/profiles/profile.h" 26 #include "chrome/browser/profiles/profile.h"
27 #include "chrome/browser/profiles/profile_info_cache.h" 27 #include "chrome/browser/profiles/profile_info_cache.h"
28 #include "chrome/browser/profiles/profile_manager.h" 28 #include "chrome/browser/profiles/profile_manager.h"
29 #include "chrome/browser/profiles/profiles_state.h" 29 #include "chrome/browser/profiles/profiles_state.h"
30 #include "chrome/browser/themes/theme_service.h" 30 #include "chrome/browser/themes/theme_service.h"
31 #include "chrome/browser/themes/theme_service_factory.h" 31 #include "chrome/browser/themes/theme_service_factory.h"
32 #include "chrome/browser/translate/chrome_translate_client.h" 32 #include "chrome/browser/translate/chrome_translate_client.h"
33 #include "chrome/browser/ui/bookmarks/bookmark_bubble_observer.h"
33 #include "chrome/browser/ui/bookmarks/bookmark_editor.h" 34 #include "chrome/browser/ui/bookmarks/bookmark_editor.h"
34 #include "chrome/browser/ui/bookmarks/bookmark_utils.h" 35 #include "chrome/browser/ui/bookmarks/bookmark_utils.h"
35 #include "chrome/browser/ui/browser.h" 36 #include "chrome/browser/ui/browser.h"
36 #include "chrome/browser/ui/browser_command_controller.h" 37 #include "chrome/browser/ui/browser_command_controller.h"
37 #include "chrome/browser/ui/browser_commands.h" 38 #include "chrome/browser/ui/browser_commands.h"
39 #include "chrome/browser/ui/browser_dialogs.h"
38 #include "chrome/browser/ui/browser_instant_controller.h" 40 #include "chrome/browser/ui/browser_instant_controller.h"
39 #include "chrome/browser/ui/browser_list.h" 41 #include "chrome/browser/ui/browser_list.h"
40 #include "chrome/browser/ui/browser_window_state.h" 42 #include "chrome/browser/ui/browser_window_state.h"
41 #import "chrome/browser/ui/cocoa/background_gradient_view.h" 43 #import "chrome/browser/ui/cocoa/background_gradient_view.h"
42 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h" 44 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h"
43 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_editor_controller.h" 45 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_editor_controller.h"
44 #import "chrome/browser/ui/cocoa/browser_window_cocoa.h" 46 #import "chrome/browser/ui/cocoa/browser_window_cocoa.h"
45 #import "chrome/browser/ui/cocoa/browser_window_controller_private.h" 47 #import "chrome/browser/ui/cocoa/browser_window_controller_private.h"
46 #import "chrome/browser/ui/cocoa/browser_window_layout.h" 48 #import "chrome/browser/ui/cocoa/browser_window_layout.h"
47 #import "chrome/browser/ui/cocoa/browser_window_utils.h" 49 #import "chrome/browser/ui/cocoa/browser_window_utils.h"
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 #include "components/translate/core/browser/translate_manager.h" 90 #include "components/translate/core/browser/translate_manager.h"
89 #include "components/translate/core/browser/translate_ui_delegate.h" 91 #include "components/translate/core/browser/translate_ui_delegate.h"
90 #include "components/web_modal/web_contents_modal_dialog_manager.h" 92 #include "components/web_modal/web_contents_modal_dialog_manager.h"
91 #include "content/public/browser/render_view_host.h" 93 #include "content/public/browser/render_view_host.h"
92 #include "content/public/browser/render_widget_host_view.h" 94 #include "content/public/browser/render_widget_host_view.h"
93 #include "content/public/browser/web_contents.h" 95 #include "content/public/browser/web_contents.h"
94 #import "ui/base/cocoa/cocoa_base_utils.h" 96 #import "ui/base/cocoa/cocoa_base_utils.h"
95 #import "ui/base/cocoa/nsview_additions.h" 97 #import "ui/base/cocoa/nsview_additions.h"
96 #include "ui/base/l10n/l10n_util.h" 98 #include "ui/base/l10n/l10n_util.h"
97 #include "ui/base/l10n/l10n_util_mac.h" 99 #include "ui/base/l10n/l10n_util_mac.h"
100 #import "ui/gfx/mac/coordinate_conversion.h"
98 #include "ui/gfx/mac/scoped_cocoa_disable_screen_updates.h" 101 #include "ui/gfx/mac/scoped_cocoa_disable_screen_updates.h"
99 102
100 using bookmarks::BookmarkModel; 103 using bookmarks::BookmarkModel;
101 using bookmarks::BookmarkNode; 104 using bookmarks::BookmarkNode;
102 using l10n_util::GetStringUTF16; 105 using l10n_util::GetStringUTF16;
103 using l10n_util::GetNSStringWithFixup; 106 using l10n_util::GetNSStringWithFixup;
104 using l10n_util::GetNSStringFWithFixup; 107 using l10n_util::GetNSStringFWithFixup;
105 108
106 // ORGANIZATION: This is a big file. It is (in principle) organized as follows 109 // ORGANIZATION: This is a big file. It is (in principle) organized as follows
107 // (in order): 110 // (in order):
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 // set a flag, and constrain any resize by the allowed amounts. On further 178 // set a flag, and constrain any resize by the allowed amounts. On further
176 // shrinks, we check the flag (since the size/position of the window will no 179 // shrinks, we check the flag (since the size/position of the window will no
177 // longer indicate that the window is shrinking from an apparent zoomed state) 180 // longer indicate that the window is shrinking from an apparent zoomed state)
178 // and if it's set we continue to constrain the resize. 181 // and if it's set we continue to constrain the resize.
179 182
180 using content::OpenURLParams; 183 using content::OpenURLParams;
181 using content::Referrer; 184 using content::Referrer;
182 using content::RenderWidgetHostView; 185 using content::RenderWidgetHostView;
183 using content::WebContents; 186 using content::WebContents;
184 187
188 @interface BrowserWindowController ()
189 // Declared for ViewsBookmarkBubbleObserver.
190 - (void)viewsBookmarkBubbleClosed;
191 @end
192
193 namespace {
194
195 // Manages toolbar visibility locking and bookmark button pulsing.
196 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
197 public:
198 explicit ViewsBookmarkBubbleObserver(BrowserWindowController* controller)
199 : controller_(controller), lockOwner_([[NSObject alloc] init]) {}
200 ~ViewsBookmarkBubbleObserver() override {}
201
202 // bookmarks::BookmarkBubbleObserver.
203 void OnBookmarkBubbleShown(const BookmarkNode* node) override {
204 [controller_ lockBarVisibilityForOwner:lockOwner_
205 withAnimation:NO
206 delay:NO];
207 pulsingBookmarkNode_ =
208 [[controller_ bookmarkBarController] startPulsingBookmarkNode:node];
209 }
210
211 void OnBookmarkBubbleHidden() override {
212 [controller_ releaseBarVisibilityForOwner:lockOwner_
213 withAnimation:YES
214 delay:NO];
215 [[controller_ bookmarkBarController]
216 stopPulsingBookmarkNode:pulsingBookmarkNode_];
217 pulsingBookmarkNode_ = nullptr;
218 [controller_ viewsBookmarkBubbleClosed];
219 }
220
221 private:
222 BrowserWindowController* controller_; // Weak, owns us.
223 const BookmarkNode* pulsingBookmarkNode_ = nullptr;
224 base::scoped_nsobject<NSObject> lockOwner_;
225
226 DISALLOW_COPY_AND_ASSIGN(ViewsBookmarkBubbleObserver);
227 };
228
229 } // namespace
230
185 @interface NSWindow (NSPrivateApis) 231 @interface NSWindow (NSPrivateApis)
186 // Note: These functions are private, use -[NSObject respondsToSelector:] 232 // Note: These functions are private, use -[NSObject respondsToSelector:]
187 // before calling them. 233 // before calling them.
188 234
189 - (void)setBottomCornerRounded:(BOOL)rounded; 235 - (void)setBottomCornerRounded:(BOOL)rounded;
190 236
191 - (NSRect)_growBoxRect; 237 - (NSRect)_growBoxRect;
192 238
193 @end 239 @end
194 240
(...skipping 1564 matching lines...) Expand 10 before | Expand all | Expand 10 after
1759 alignment:alignment]; 1805 alignment:alignment];
1760 } 1806 }
1761 1807
1762 - (NSPoint)bookmarkBubblePoint { 1808 - (NSPoint)bookmarkBubblePoint {
1763 return [toolbarController_ bookmarkBubblePoint]; 1809 return [toolbarController_ bookmarkBubblePoint];
1764 } 1810 }
1765 1811
1766 // Show the bookmark bubble (e.g. user just clicked on the STAR). 1812 // Show the bookmark bubble (e.g. user just clicked on the STAR).
1767 - (void)showBookmarkBubbleForURL:(const GURL&)url 1813 - (void)showBookmarkBubbleForURL:(const GURL&)url
1768 alreadyBookmarked:(BOOL)alreadyMarked { 1814 alreadyBookmarked:(BOOL)alreadyMarked {
1815 if (chrome::ToolkitViewsDialogsEnabled()) {
1816 if (viewsBookmarkBubbleObserver_.get())
1817 return;
1818
1819 viewsBookmarkBubbleObserver_.reset(new ViewsBookmarkBubbleObserver(self));
1820 chrome::ShowBookmarkBubbleViewsAtPoint(
1821 gfx::ScreenPointFromNSPoint(
1822 [[self window] convertBaseToScreen:[self bookmarkBubblePoint]]),
1823 [[self window] contentView], viewsBookmarkBubbleObserver_.get(),
1824 browser_.get(), url, alreadyMarked);
1825 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
1826 }
1827
1769 if (!bookmarkBubbleController_) { 1828 if (!bookmarkBubbleController_) {
1770 BookmarkModel* model = 1829 BookmarkModel* model =
1771 BookmarkModelFactory::GetForProfile(browser_->profile()); 1830 BookmarkModelFactory::GetForProfile(browser_->profile());
1772 bookmarks::ManagedBookmarkService* managed = 1831 bookmarks::ManagedBookmarkService* managed =
1773 ManagedBookmarkServiceFactory::GetForProfile(browser_->profile()); 1832 ManagedBookmarkServiceFactory::GetForProfile(browser_->profile());
1774 const BookmarkNode* node = model->GetMostRecentlyAddedUserNodeForURL(url); 1833 const BookmarkNode* node = model->GetMostRecentlyAddedUserNodeForURL(url);
1775 bookmarkBubbleController_ = 1834 bookmarkBubbleController_ =
1776 [[BookmarkBubbleController alloc] initWithParentWindow:[self window] 1835 [[BookmarkBubbleController alloc] initWithParentWindow:[self window]
1777 managed:managed 1836 managed:managed
1778 model:model 1837 model:model
(...skipping 12 matching lines...) Expand all
1791 - (void)bookmarkBubbleWindowWillClose:(NSNotification*)notification { 1850 - (void)bookmarkBubbleWindowWillClose:(NSNotification*)notification {
1792 DCHECK_EQ([notification object], [bookmarkBubbleController_ window]); 1851 DCHECK_EQ([notification object], [bookmarkBubbleController_ window]);
1793 1852
1794 NSNotificationCenter* center = [NSNotificationCenter defaultCenter]; 1853 NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
1795 [center removeObserver:self 1854 [center removeObserver:self
1796 name:NSWindowWillCloseNotification 1855 name:NSWindowWillCloseNotification
1797 object:[bookmarkBubbleController_ window]]; 1856 object:[bookmarkBubbleController_ window]];
1798 bookmarkBubbleController_ = nil; 1857 bookmarkBubbleController_ = nil;
1799 } 1858 }
1800 1859
1860 - (void)viewsBookmarkBubbleClosed {
1861 viewsBookmarkBubbleObserver_.reset();
1862 }
1863
1801 // Handle the editBookmarkNode: action sent from bookmark bubble controllers. 1864 // Handle the editBookmarkNode: action sent from bookmark bubble controllers.
1802 - (void)editBookmarkNode:(id)sender { 1865 - (void)editBookmarkNode:(id)sender {
1803 BOOL responds = [sender respondsToSelector:@selector(node)]; 1866 BOOL responds = [sender respondsToSelector:@selector(node)];
1804 DCHECK(responds); 1867 DCHECK(responds);
1805 if (responds) { 1868 if (responds) {
1806 const BookmarkNode* node = [sender node]; 1869 const BookmarkNode* node = [sender node];
1807 if (node) 1870 if (node)
1808 BookmarkEditor::Show([self window], browser_->profile(), 1871 BookmarkEditor::Show([self window], browser_->profile(),
1809 BookmarkEditor::EditDetails::EditNode(node), 1872 BookmarkEditor::EditDetails::EditNode(node),
1810 BookmarkEditor::SHOW_TREE); 1873 BookmarkEditor::SHOW_TREE);
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after
2267 2330
2268 - (BOOL)supportsBookmarkBar { 2331 - (BOOL)supportsBookmarkBar {
2269 return [self supportsWindowFeature:Browser::FEATURE_BOOKMARKBAR]; 2332 return [self supportsWindowFeature:Browser::FEATURE_BOOKMARKBAR];
2270 } 2333 }
2271 2334
2272 - (BOOL)isTabbedWindow { 2335 - (BOOL)isTabbedWindow {
2273 return browser_->is_type_tabbed(); 2336 return browser_->is_type_tabbed();
2274 } 2337 }
2275 2338
2276 @end // @implementation BrowserWindowController(WindowType) 2339 @end // @implementation BrowserWindowController(WindowType)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698