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 #include "chrome/browser/ui/views/bookmarks/bookmark_bubble_view.h" | 5 #include "chrome/browser/ui/views/bookmarks/bookmark_bubble_view.h" |
6 | 6 |
7 #include "base/strings/string16.h" | 7 #include "base/strings/string16.h" |
8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "chrome/app/chrome_command_ids.h" | 10 #include "chrome/app/chrome_command_ids.h" |
11 #include "chrome/browser/bookmarks/bookmark_model_factory.h" | 11 #include "chrome/browser/bookmarks/bookmark_model_factory.h" |
12 #include "chrome/browser/platform_util.h" | |
12 #include "chrome/browser/profiles/profile.h" | 13 #include "chrome/browser/profiles/profile.h" |
14 #include "chrome/browser/ui/bookmarks/bookmark_bubble_observer.h" | |
13 #include "chrome/browser/ui/bookmarks/bookmark_editor.h" | 15 #include "chrome/browser/ui/bookmarks/bookmark_editor.h" |
16 #include "chrome/browser/ui/browser_dialogs.h" | |
14 #include "chrome/browser/ui/sync/sync_promo_ui.h" | 17 #include "chrome/browser/ui/sync/sync_promo_ui.h" |
15 #include "chrome/browser/ui/views/bookmarks/bookmark_bubble_view_observer.h" | |
16 #include "chrome/browser/ui/views/bookmarks/bookmark_sync_promo_view.h" | 18 #include "chrome/browser/ui/views/bookmarks/bookmark_sync_promo_view.h" |
17 #include "chrome/grit/generated_resources.h" | 19 #include "chrome/grit/generated_resources.h" |
18 #include "components/bookmarks/browser/bookmark_model.h" | 20 #include "components/bookmarks/browser/bookmark_model.h" |
19 #include "components/bookmarks/browser/bookmark_utils.h" | 21 #include "components/bookmarks/browser/bookmark_utils.h" |
20 #include "content/public/browser/user_metrics.h" | 22 #include "content/public/browser/user_metrics.h" |
21 #include "ui/accessibility/ax_view_state.h" | 23 #include "ui/accessibility/ax_view_state.h" |
22 #include "ui/base/l10n/l10n_util.h" | 24 #include "ui/base/l10n/l10n_util.h" |
23 #include "ui/base/resource/resource_bundle.h" | 25 #include "ui/base/resource/resource_bundle.h" |
24 #include "ui/events/keycodes/keyboard_codes.h" | 26 #include "ui/events/keycodes/keyboard_codes.h" |
25 #include "ui/views/bubble/bubble_frame_view.h" | 27 #include "ui/views/bubble/bubble_frame_view.h" |
(...skipping 30 matching lines...) Expand all Loading... | |
56 private: | 58 private: |
57 DISALLOW_COPY_AND_ASSIGN(UnsizedCombobox); | 59 DISALLOW_COPY_AND_ASSIGN(UnsizedCombobox); |
58 }; | 60 }; |
59 | 61 |
60 } // namespace | 62 } // namespace |
61 | 63 |
62 BookmarkBubbleView* BookmarkBubbleView::bookmark_bubble_ = NULL; | 64 BookmarkBubbleView* BookmarkBubbleView::bookmark_bubble_ = NULL; |
63 | 65 |
64 // static | 66 // static |
65 void BookmarkBubbleView::ShowBubble(views::View* anchor_view, | 67 void BookmarkBubbleView::ShowBubble(views::View* anchor_view, |
66 BookmarkBubbleViewObserver* observer, | 68 const gfx::Rect& anchor_rect, |
69 gfx::NativeView parent_window, | |
70 bookmarks::BookmarkBubbleObserver* observer, | |
67 scoped_ptr<BookmarkBubbleDelegate> delegate, | 71 scoped_ptr<BookmarkBubbleDelegate> delegate, |
68 Profile* profile, | 72 Profile* profile, |
69 const GURL& url, | 73 const GURL& url, |
70 bool newly_bookmarked) { | 74 bool newly_bookmarked) { |
71 if (bookmark_bubble_) | 75 if (bookmark_bubble_) |
72 return; | 76 return; |
73 | 77 |
74 bookmark_bubble_ = new BookmarkBubbleView(anchor_view, | 78 bookmark_bubble_ = new BookmarkBubbleView(anchor_view, |
75 observer, | 79 observer, |
76 delegate.Pass(), | 80 delegate.Pass(), |
77 profile, | 81 profile, |
78 url, | 82 url, |
79 newly_bookmarked); | 83 newly_bookmarked); |
84 if (!anchor_view) { | |
85 bookmark_bubble_->SetAnchorRect(anchor_rect); | |
86 bookmark_bubble_->set_parent_window(parent_window); | |
87 } | |
80 views::BubbleDelegateView::CreateBubble(bookmark_bubble_)->Show(); | 88 views::BubbleDelegateView::CreateBubble(bookmark_bubble_)->Show(); |
81 // Select the entire title textfield contents when the bubble is first shown. | 89 // Select the entire title textfield contents when the bubble is first shown. |
82 bookmark_bubble_->title_tf_->SelectAll(true); | 90 bookmark_bubble_->title_tf_->SelectAll(true); |
83 bookmark_bubble_->SetArrowPaintType(views::BubbleBorder::PAINT_NONE); | 91 bookmark_bubble_->SetArrowPaintType(views::BubbleBorder::PAINT_NONE); |
84 | 92 |
85 if (bookmark_bubble_->observer_) | 93 if (bookmark_bubble_->observer_) { |
86 bookmark_bubble_->observer_->OnBookmarkBubbleShown(url); | 94 BookmarkModel* model = BookmarkModelFactory::GetForProfile(profile); |
95 const BookmarkNode* node = model->GetMostRecentlyAddedUserNodeForURL(url); | |
96 bookmark_bubble_->observer_->OnBookmarkBubbleShown(node); | |
97 } | |
87 } | 98 } |
88 | 99 |
89 void BookmarkBubbleView::Hide() { | 100 void BookmarkBubbleView::Hide() { |
90 if (bookmark_bubble_) | 101 if (bookmark_bubble_) |
91 bookmark_bubble_->GetWidget()->Close(); | 102 bookmark_bubble_->GetWidget()->Close(); |
92 } | 103 } |
93 | 104 |
94 BookmarkBubbleView::~BookmarkBubbleView() { | 105 BookmarkBubbleView::~BookmarkBubbleView() { |
95 if (apply_edits_) { | 106 if (apply_edits_) { |
96 ApplyEdits(); | 107 ApplyEdits(); |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
257 const char* BookmarkBubbleView::GetClassName() const { | 268 const char* BookmarkBubbleView::GetClassName() const { |
258 return "BookmarkBubbleView"; | 269 return "BookmarkBubbleView"; |
259 } | 270 } |
260 | 271 |
261 views::View* BookmarkBubbleView::GetInitiallyFocusedView() { | 272 views::View* BookmarkBubbleView::GetInitiallyFocusedView() { |
262 return title_tf_; | 273 return title_tf_; |
263 } | 274 } |
264 | 275 |
265 BookmarkBubbleView::BookmarkBubbleView( | 276 BookmarkBubbleView::BookmarkBubbleView( |
266 views::View* anchor_view, | 277 views::View* anchor_view, |
267 BookmarkBubbleViewObserver* observer, | 278 bookmarks::BookmarkBubbleObserver* observer, |
268 scoped_ptr<BookmarkBubbleDelegate> delegate, | 279 scoped_ptr<BookmarkBubbleDelegate> delegate, |
269 Profile* profile, | 280 Profile* profile, |
270 const GURL& url, | 281 const GURL& url, |
271 bool newly_bookmarked) | 282 bool newly_bookmarked) |
272 : BubbleDelegateView(anchor_view, views::BubbleBorder::TOP_RIGHT), | 283 : BubbleDelegateView(anchor_view, views::BubbleBorder::TOP_RIGHT), |
273 observer_(observer), | 284 observer_(observer), |
274 delegate_(delegate.Pass()), | 285 delegate_(delegate.Pass()), |
275 profile_(profile), | 286 profile_(profile), |
276 url_(url), | 287 url_(url), |
277 newly_bookmarked_(newly_bookmarked), | 288 newly_bookmarked_(newly_bookmarked), |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
336 ShowEditor(); | 347 ShowEditor(); |
337 } else { | 348 } else { |
338 DCHECK_EQ(close_button_, sender); | 349 DCHECK_EQ(close_button_, sender); |
339 GetWidget()->Close(); | 350 GetWidget()->Close(); |
340 } | 351 } |
341 } | 352 } |
342 | 353 |
343 void BookmarkBubbleView::ShowEditor() { | 354 void BookmarkBubbleView::ShowEditor() { |
344 const BookmarkNode* node = BookmarkModelFactory::GetForProfile( | 355 const BookmarkNode* node = BookmarkModelFactory::GetForProfile( |
345 profile_)->GetMostRecentlyAddedUserNodeForURL(url_); | 356 profile_)->GetMostRecentlyAddedUserNodeForURL(url_); |
346 views::Widget* parent = anchor_widget(); | 357 gfx::NativeWindow native_window = |
347 DCHECK(parent); | 358 anchor_widget() ? anchor_widget()->GetNativeWindow() |
359 : platform_util::GetTopLevel(parent_window()); | |
360 DCHECK(native_window); | |
348 | 361 |
349 Profile* profile = profile_; | 362 Profile* profile = profile_; |
350 ApplyEdits(); | 363 ApplyEdits(); |
351 GetWidget()->Close(); | 364 GetWidget()->Close(); |
352 | 365 |
353 if (node && parent) | 366 if (node && native_window) |
354 BookmarkEditor::Show(parent->GetNativeWindow(), profile, | 367 chrome::ShowBookmarkEditorViews(native_window, profile, |
tapted
2015/08/21 07:19:18
leave this as BookmarkEditor::Show?
jackhou1
2015/08/24 08:22:04
Done.
| |
355 BookmarkEditor::EditDetails::EditNode(node), | 368 BookmarkEditor::EditDetails::EditNode(node), |
356 BookmarkEditor::SHOW_TREE); | 369 BookmarkEditor::SHOW_TREE); |
357 } | 370 } |
358 | 371 |
359 void BookmarkBubbleView::ApplyEdits() { | 372 void BookmarkBubbleView::ApplyEdits() { |
360 // Set this to make sure we don't attempt to apply edits again. | 373 // Set this to make sure we don't attempt to apply edits again. |
361 apply_edits_ = false; | 374 apply_edits_ = false; |
362 | 375 |
363 BookmarkModel* model = BookmarkModelFactory::GetForProfile(profile_); | 376 BookmarkModel* model = BookmarkModelFactory::GetForProfile(profile_); |
364 const BookmarkNode* node = model->GetMostRecentlyAddedUserNodeForURL(url_); | 377 const BookmarkNode* node = model->GetMostRecentlyAddedUserNodeForURL(url_); |
365 if (node) { | 378 if (node) { |
366 const base::string16 new_title = title_tf_->text(); | 379 const base::string16 new_title = title_tf_->text(); |
367 if (new_title != node->GetTitle()) { | 380 if (new_title != node->GetTitle()) { |
368 model->SetTitle(node, new_title); | 381 model->SetTitle(node, new_title); |
369 content::RecordAction( | 382 content::RecordAction( |
370 UserMetricsAction("BookmarkBubble_ChangeTitleInBubble")); | 383 UserMetricsAction("BookmarkBubble_ChangeTitleInBubble")); |
371 } | 384 } |
372 parent_model_.MaybeChangeParent(node, parent_combobox_->selected_index()); | 385 parent_model_.MaybeChangeParent(node, parent_combobox_->selected_index()); |
373 } | 386 } |
374 } | 387 } |
OLD | NEW |