OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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/bookmarks/bookmark_bubble_controller.h" | 5 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bubble_controller.h" |
6 | 6 |
7 #include "base/mac/bundle_locations.h" | 7 #include "base/mac/bundle_locations.h" |
8 #include "base/strings/sys_string_conversions.h" | 8 #include "base/strings/sys_string_conversions.h" |
| 9 #include "chrome/browser/ui/bookmarks/bookmark_bubble_observer.h" |
9 #include "chrome/browser/ui/browser.h" | 10 #include "chrome/browser/ui/browser.h" |
| 11 #include "chrome/browser/ui/browser_dialogs.h" |
10 #include "chrome/browser/ui/browser_finder.h" | 12 #include "chrome/browser/ui/browser_finder.h" |
11 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_button.h" | 13 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_button.h" |
12 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_sync_promo_controller.h" | 14 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_sync_promo_controller.h" |
13 #import "chrome/browser/ui/cocoa/browser_window_controller.h" | 15 #import "chrome/browser/ui/cocoa/browser_window_controller.h" |
14 #import "chrome/browser/ui/cocoa/info_bubble_view.h" | 16 #import "chrome/browser/ui/cocoa/info_bubble_view.h" |
15 #include "chrome/browser/ui/sync/sync_promo_ui.h" | 17 #include "chrome/browser/ui/sync/sync_promo_ui.h" |
16 #include "chrome/grit/generated_resources.h" | 18 #include "chrome/grit/generated_resources.h" |
17 #include "components/bookmarks/browser/bookmark_model.h" | 19 #include "components/bookmarks/browser/bookmark_model.h" |
18 #include "components/bookmarks/browser/bookmark_utils.h" | 20 #include "components/bookmarks/browser/bookmark_utils.h" |
19 #include "components/bookmarks/managed/managed_bookmark_service.h" | 21 #include "components/bookmarks/managed/managed_bookmark_service.h" |
20 #include "content/public/browser/notification_observer.h" | 22 #include "content/public/browser/notification_observer.h" |
21 #include "content/public/browser/notification_registrar.h" | 23 #include "content/public/browser/notification_registrar.h" |
22 #include "content/public/browser/notification_service.h" | 24 #include "content/public/browser/notification_service.h" |
23 #include "content/public/browser/user_metrics.h" | 25 #include "content/public/browser/user_metrics.h" |
24 #include "ui/base/l10n/l10n_util_mac.h" | 26 #include "ui/base/l10n/l10n_util_mac.h" |
| 27 #import "ui/gfx/mac/coordinate_conversion.h" |
25 | 28 |
26 using base::UserMetricsAction; | 29 using base::UserMetricsAction; |
27 using bookmarks::BookmarkModel; | 30 using bookmarks::BookmarkModel; |
28 using bookmarks::BookmarkNode; | 31 using bookmarks::BookmarkNode; |
29 | 32 |
| 33 namespace { |
| 34 |
| 35 // Closes the BookmarkBubbleController when the toolkit-views bubble closes. |
| 36 class CocoaViewsBookmarkBubbleObserver |
| 37 : public bookmarks::BookmarkBubbleObserver { |
| 38 public: |
| 39 explicit CocoaViewsBookmarkBubbleObserver( |
| 40 BookmarkBubbleController* controller) |
| 41 : controller_(controller) {} |
| 42 ~CocoaViewsBookmarkBubbleObserver() override {} |
| 43 |
| 44 // bookmarks::BookmarkBubbleObserver. |
| 45 void OnBookmarkBubbleShown(const GURL& url) override {} |
| 46 void OnBookmarkBubbleHidden() override { [controller_ close]; } |
| 47 |
| 48 private: |
| 49 BookmarkBubbleController* controller_; // Weak, owns us. |
| 50 |
| 51 DISALLOW_COPY_AND_ASSIGN(CocoaViewsBookmarkBubbleObserver); |
| 52 }; |
| 53 |
| 54 } // namespace |
| 55 |
30 // An object to represent the ChooseAnotherFolder item in the pop up. | 56 // An object to represent the ChooseAnotherFolder item in the pop up. |
31 @interface ChooseAnotherFolder : NSObject | 57 @interface ChooseAnotherFolder : NSObject |
32 @end | 58 @end |
33 | 59 |
34 @implementation ChooseAnotherFolder | 60 @implementation ChooseAnotherFolder |
35 @end | 61 @end |
36 | 62 |
37 @interface BookmarkBubbleController (PrivateAPI) | 63 @interface BookmarkBubbleController (PrivateAPI) |
38 - (void)updateBookmarkNode; | 64 - (void)updateBookmarkNode; |
39 - (void)fillInFolderList; | 65 - (void)fillInFolderList; |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 InfoBubbleView* bubble = self.bubble; | 203 InfoBubbleView* bubble = self.bubble; |
178 [bubble setArrowLocation:info_bubble::kTopRight]; | 204 [bubble setArrowLocation:info_bubble::kTopRight]; |
179 | 205 |
180 // Insure decent positioning even in the absence of a browser controller, | 206 // Insure decent positioning even in the absence of a browser controller, |
181 // which will occur for some unit tests. | 207 // which will occur for some unit tests. |
182 NSPoint arrowTip = bwc ? [bwc bookmarkBubblePoint] : | 208 NSPoint arrowTip = bwc ? [bwc bookmarkBubblePoint] : |
183 NSMakePoint([window frame].size.width, [window frame].size.height); | 209 NSMakePoint([window frame].size.width, [window frame].size.height); |
184 arrowTip = [parentWindow convertBaseToScreen:arrowTip]; | 210 arrowTip = [parentWindow convertBaseToScreen:arrowTip]; |
185 NSPoint bubbleArrowTip = [bubble arrowTip]; | 211 NSPoint bubbleArrowTip = [bubble arrowTip]; |
186 bubbleArrowTip = [bubble convertPoint:bubbleArrowTip toView:nil]; | 212 bubbleArrowTip = [bubble convertPoint:bubbleArrowTip toView:nil]; |
187 arrowTip.y -= bubbleArrowTip.y; | 213 [window setFrameOrigin:NSMakePoint(arrowTip.x - bubbleArrowTip.x, |
188 arrowTip.x -= bubbleArrowTip.x; | 214 arrowTip.y - bubbleArrowTip.y)]; |
189 [window setFrameOrigin:arrowTip]; | |
190 | 215 |
191 // Default is IDS_BOOKMARK_BUBBLE_PAGE_BOOKMARK; "Bookmark". | 216 // Default is IDS_BOOKMARK_BUBBLE_PAGE_BOOKMARK; "Bookmark". |
192 // If adding for the 1st time the string becomes "Bookmark Added!" | 217 // If adding for the 1st time the string becomes "Bookmark Added!" |
193 if (!alreadyBookmarked_) { | 218 if (!alreadyBookmarked_) { |
194 NSString* title = | 219 NSString* title = |
195 l10n_util::GetNSString(IDS_BOOKMARK_BUBBLE_PAGE_BOOKMARKED); | 220 l10n_util::GetNSString(IDS_BOOKMARK_BUBBLE_PAGE_BOOKMARKED); |
196 [bigTitle_ setStringValue:title]; | 221 [bigTitle_ setStringValue:title]; |
197 } | 222 } |
198 | 223 |
199 [self fillInFolderList]; | 224 [self fillInFolderList]; |
200 | 225 |
201 // Ping me when things change out from under us. Unlike a normal | 226 // Ping me when things change out from under us. Unlike a normal |
202 // dialog, the bookmark bubble's cancel: means "don't add this as a | 227 // dialog, the bookmark bubble's cancel: means "don't add this as a |
203 // bookmark", not "cancel editing". We must take extra care to not | 228 // bookmark", not "cancel editing". We must take extra care to not |
204 // touch the bookmark in this selector. | 229 // touch the bookmark in this selector. |
205 bookmarkObserver_.reset( | 230 bookmarkObserver_.reset( |
206 new BookmarkModelObserverForCocoa(model_, ^(BOOL nodeWasDeleted) { | 231 new BookmarkModelObserverForCocoa(model_, ^(BOOL nodeWasDeleted) { |
207 // If a watched node was deleted, the pointer to the pulsing button | 232 // If a watched node was deleted, the pointer to the pulsing button |
208 // is likely stale. | 233 // is likely stale. |
209 if (nodeWasDeleted) | 234 if (nodeWasDeleted) |
210 pulsingBookmarkNode_ = NULL; | 235 pulsingBookmarkNode_ = NULL; |
211 [self dismissWithoutEditing:nil]; | 236 [self dismissWithoutEditing:nil]; |
212 })); | 237 })); |
213 bookmarkObserver_->StartObservingNode(node_); | 238 bookmarkObserver_->StartObservingNode(node_); |
214 | 239 |
215 // Pulse something interesting on the bookmark bar. | 240 // Pulse something interesting on the bookmark bar. |
216 [self startPulsingBookmarkButton:node_]; | 241 [self startPulsingBookmarkButton:node_]; |
217 | 242 |
| 243 if (chrome::ToolkitViewsDialogsEnabled()) { |
| 244 if (!bookmarkBubbleObserver_.get()) |
| 245 bookmarkBubbleObserver_.reset(new CocoaViewsBookmarkBubbleObserver(self)); |
| 246 chrome::ShowBookmarkBubbleViewsAtPoint( |
| 247 gfx::ScreenPointFromNSPoint(arrowTip), [parentWindow contentView], |
| 248 bookmarkBubbleObserver_.get(), |
| 249 chrome::FindBrowserWithWindow(parentWindow), node_->url(), |
| 250 alreadyBookmarked_); |
| 251 return; |
| 252 } |
| 253 |
218 [parentWindow addChildWindow:window ordered:NSWindowAbove]; | 254 [parentWindow addChildWindow:window ordered:NSWindowAbove]; |
219 [window makeKeyAndOrderFront:self]; | 255 [window makeKeyAndOrderFront:self]; |
220 [self registerKeyStateEventTap]; | 256 [self registerKeyStateEventTap]; |
221 } | 257 } |
222 | 258 |
223 - (void)close { | 259 - (void)close { |
224 [[BrowserWindowController browserWindowControllerForWindow:self.parentWindow] | 260 [[BrowserWindowController browserWindowControllerForWindow:self.parentWindow] |
225 releaseBarVisibilityForOwner:self withAnimation:YES delay:NO]; | 261 releaseBarVisibilityForOwner:self withAnimation:YES delay:NO]; |
226 | 262 |
227 [super close]; | 263 [super close]; |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
404 NSInteger idx = [menu indexOfItemWithRepresentedObject:parentValue]; | 440 NSInteger idx = [menu indexOfItemWithRepresentedObject:parentValue]; |
405 DCHECK(idx != -1); | 441 DCHECK(idx != -1); |
406 [folderPopUpButton_ selectItemAtIndex:idx]; | 442 [folderPopUpButton_ selectItemAtIndex:idx]; |
407 } | 443 } |
408 | 444 |
409 - (NSPopUpButton*)folderPopUpButton { | 445 - (NSPopUpButton*)folderPopUpButton { |
410 return folderPopUpButton_; | 446 return folderPopUpButton_; |
411 } | 447 } |
412 | 448 |
413 @end // implementation BookmarkBubbleController(ExposedForUnitTesting) | 449 @end // implementation BookmarkBubbleController(ExposedForUnitTesting) |
OLD | NEW |