| Index: chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc
|
| diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc
|
| index a7dbcb94ef37b1f75736afaf4322e1374364fe7a..6c0ece303ba1d69315cf66d1bb8e43178e0c3a14 100644
|
| --- a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc
|
| +++ b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc
|
| @@ -31,6 +31,7 @@
|
| #include "ui/views/layout/fill_layout.h"
|
| #include "ui/views/layout/grid_layout.h"
|
| #include "ui/views/widget/widget.h"
|
| +#include "ui/views/window/dialog_client_view.h"
|
|
|
| #if defined(OS_WIN)
|
| #include "chrome/browser/sync/profile_sync_service_factory.h"
|
| @@ -42,8 +43,6 @@
|
| using base::UserMetricsAction;
|
| using bookmarks::BookmarkModel;
|
| using bookmarks::BookmarkNode;
|
| -using views::ColumnSet;
|
| -using views::GridLayout;
|
|
|
| namespace {
|
|
|
| @@ -128,8 +127,17 @@ BookmarkBubbleView::~BookmarkBubbleView() {
|
| // ui::DialogModel -------------------------------------------------------------
|
|
|
| int BookmarkBubbleView::GetDialogButtons() const {
|
| - // TODO(tapted): DialogClientView should manage the buttons.
|
| - return ui::DIALOG_BUTTON_NONE;
|
| + // TODO(tapted): DialogClientView should manage the ios promo buttons too.
|
| + return is_showing_ios_promotion_
|
| + ? ui::DIALOG_BUTTON_NONE
|
| + : (ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL);
|
| +}
|
| +
|
| +base::string16 BookmarkBubbleView::GetDialogButtonLabel(
|
| + ui::DialogButton button) const {
|
| + return l10n_util::GetStringUTF16((button == ui::DIALOG_BUTTON_OK)
|
| + ? IDS_DONE
|
| + : IDS_BOOKMARK_BUBBLE_REMOVE_BOOKMARK);
|
| }
|
|
|
| // views::WidgetDelegate -------------------------------------------------------
|
| @@ -178,6 +186,19 @@ void BookmarkBubbleView::WindowClosing() {
|
|
|
| // views::DialogDelegate -------------------------------------------------------
|
|
|
| +views::View* BookmarkBubbleView::CreateExtraView() {
|
| + edit_button_ = views::MdTextButton::CreateSecondaryUiButton(
|
| + this, l10n_util::GetStringUTF16(IDS_BOOKMARK_BUBBLE_OPTIONS));
|
| + edit_button_->AddAccelerator(ui::Accelerator(ui::VKEY_E, ui::EF_ALT_DOWN));
|
| + return edit_button_;
|
| +}
|
| +
|
| +bool BookmarkBubbleView::GetExtraViewPadding(int* padding) {
|
| + *padding = ChromeLayoutProvider::Get()->GetDistanceMetric(
|
| + DISTANCE_UNRELATED_CONTROL_HORIZONTAL_LARGE);
|
| + return true;
|
| +}
|
| +
|
| views::View* BookmarkBubbleView::CreateFootnoteView() {
|
| #if defined(OS_WIN)
|
| if (!is_showing_ios_promotion_ &&
|
| @@ -198,29 +219,41 @@ views::View* BookmarkBubbleView::CreateFootnoteView() {
|
| return footnote_view_;
|
| }
|
|
|
| -// views::View -----------------------------------------------------------------
|
| -
|
| -const char* BookmarkBubbleView::GetClassName() const {
|
| - return "BookmarkBubbleView";
|
| +bool BookmarkBubbleView::Cancel() {
|
| + base::RecordAction(UserMetricsAction("BookmarkBubble_Unstar"));
|
| + // Set this so we remove the bookmark after the window closes.
|
| + remove_bookmark_ = true;
|
| + apply_edits_ = false;
|
| + return true;
|
| }
|
|
|
| -bool BookmarkBubbleView::AcceleratorPressed(
|
| - const ui::Accelerator& accelerator) {
|
| - ui::KeyboardCode key_code = accelerator.key_code();
|
| - if (key_code == ui::VKEY_RETURN) {
|
| - HandleButtonPressed(save_button_);
|
| - return true;
|
| - }
|
| - if (key_code == ui::VKEY_E && accelerator.IsAltDown()) {
|
| - HandleButtonPressed(edit_button_);
|
| - return true;
|
| - }
|
| - if (key_code == ui::VKEY_R && accelerator.IsAltDown()) {
|
| - HandleButtonPressed(remove_button_);
|
| - return true;
|
| +bool BookmarkBubbleView::Accept() {
|
| +#if defined(OS_WIN)
|
| + using desktop_ios_promotion::PromotionEntryPoint;
|
| + if (IsIOSPromotionEligible(PromotionEntryPoint::BOOKMARKS_BUBBLE)) {
|
| + ShowIOSPromotion(PromotionEntryPoint::BOOKMARKS_BUBBLE);
|
| + return false;
|
| }
|
| +#endif
|
| + return true;
|
| +}
|
| +
|
| +bool BookmarkBubbleView::Close() {
|
| + // Allow closing when activation lost. Default would call Accept().
|
| + return true;
|
| +}
|
| +
|
| +void BookmarkBubbleView::UpdateButton(views::LabelButton* button,
|
| + ui::DialogButton type) {
|
| + LocationBarBubbleDelegateView::UpdateButton(button, type);
|
| + if (type == ui::DIALOG_BUTTON_CANCEL)
|
| + button->AddAccelerator(ui::Accelerator(ui::VKEY_R, ui::EF_ALT_DOWN));
|
| +}
|
|
|
| - return LocationBarBubbleDelegateView::AcceleratorPressed(accelerator);
|
| +// views::View -----------------------------------------------------------------
|
| +
|
| +const char* BookmarkBubbleView::GetClassName() const {
|
| + return "BookmarkBubbleView";
|
| }
|
|
|
| void BookmarkBubbleView::GetAccessibleNodeData(ui::AXNodeData* node_data) {
|
| @@ -234,7 +267,8 @@ void BookmarkBubbleView::GetAccessibleNodeData(ui::AXNodeData* node_data) {
|
|
|
| void BookmarkBubbleView::ButtonPressed(views::Button* sender,
|
| const ui::Event& event) {
|
| - HandleButtonPressed(sender);
|
| + base::RecordAction(UserMetricsAction("BookmarkBubble_Edit"));
|
| + ShowEditor();
|
| }
|
|
|
| // views::ComboboxListener -----------------------------------------------------
|
| @@ -258,82 +292,54 @@ void BookmarkBubbleView::OnIOSPromotionFootnoteLinkClicked() {
|
| // views::BubbleDialogDelegateView ---------------------------------------------
|
|
|
| void BookmarkBubbleView::Init() {
|
| - remove_button_ = views::MdTextButton::CreateSecondaryUiButton(
|
| - this, l10n_util::GetStringUTF16(IDS_BOOKMARK_BUBBLE_REMOVE_BOOKMARK));
|
| -
|
| - edit_button_ = views::MdTextButton::CreateSecondaryUiButton(
|
| - this, l10n_util::GetStringUTF16(IDS_BOOKMARK_BUBBLE_OPTIONS));
|
| + using views::GridLayout;
|
|
|
| - save_button_ = views::MdTextButton::CreateSecondaryUiButton(
|
| - this, l10n_util::GetStringUTF16(IDS_DONE));
|
| - save_button_->SetIsDefault(true);
|
| -
|
| - views::Label* combobox_label = new views::Label(
|
| - l10n_util::GetStringUTF16(IDS_BOOKMARK_BUBBLE_FOLDER_TEXT));
|
| -
|
| - parent_combobox_ = new UnsizedCombobox(&parent_model_);
|
| - parent_combobox_->set_listener(this);
|
| - parent_combobox_->SetAccessibleName(
|
| - l10n_util::GetStringUTF16(IDS_BOOKMARK_AX_BUBBLE_FOLDER_TEXT));
|
| -
|
| - SetLayoutManager(new views::FillLayout);
|
| + SetLayoutManager(new views::FillLayout());
|
| bookmark_contents_view_ = new views::View();
|
| GridLayout* layout = new GridLayout(bookmark_contents_view_);
|
| bookmark_contents_view_->SetLayoutManager(layout);
|
|
|
| - // This column set is used for the labels and textfields as well as the
|
| - // buttons at the bottom.
|
| - const int cs_id = 0;
|
| - ColumnSet* cs = layout->AddColumnSet(cs_id);
|
| + // This column set is used for the labels and textfields.
|
| + constexpr int kColumnId = 0;
|
| + constexpr float kFixed = 0.f;
|
| + constexpr float kStretchy = 1.f;
|
| + views::ColumnSet* cs = layout->AddColumnSet(kColumnId);
|
| ChromeLayoutProvider* provider = ChromeLayoutProvider::Get();
|
|
|
| - cs->AddColumn(provider->GetControlLabelGridAlignment(), GridLayout::CENTER, 0,
|
| + cs->AddColumn(provider->GetControlLabelGridAlignment(), GridLayout::CENTER,
|
| + kFixed, GridLayout::USE_PREF, 0, 0);
|
| + cs->AddPaddingColumn(kFixed, provider->GetDistanceMetric(
|
| + DISTANCE_UNRELATED_CONTROL_HORIZONTAL));
|
| + cs->AddColumn(GridLayout::FILL, GridLayout::CENTER, kStretchy,
|
| GridLayout::USE_PREF, 0, 0);
|
| - cs->AddPaddingColumn(
|
| - 0, provider->GetDistanceMetric(DISTANCE_UNRELATED_CONTROL_HORIZONTAL));
|
| -
|
| - cs->AddColumn(GridLayout::FILL, GridLayout::CENTER, 0, GridLayout::USE_PREF,
|
| - 0, 0);
|
| - cs->AddPaddingColumn(1, provider->GetDistanceMetric(
|
| - DISTANCE_UNRELATED_CONTROL_HORIZONTAL_LARGE));
|
|
|
| - cs->AddColumn(GridLayout::LEADING, GridLayout::TRAILING, 0,
|
| - GridLayout::USE_PREF, 0, 0);
|
| - cs->AddPaddingColumn(0, provider->GetDistanceMetric(
|
| - views::DISTANCE_RELATED_BUTTON_HORIZONTAL));
|
| - cs->AddColumn(GridLayout::LEADING, GridLayout::TRAILING, 0,
|
| - GridLayout::USE_PREF, 0, 0);
|
| -
|
| - layout->StartRow(0, cs_id);
|
| + layout->StartRow(kFixed, kColumnId);
|
| views::Label* label = new views::Label(
|
| - l10n_util::GetStringUTF16(IDS_BOOKMARK_BUBBLE_TITLE_TEXT));
|
| + l10n_util::GetStringUTF16(IDS_BOOKMARK_BUBBLE_NAME_LABEL));
|
| layout->AddView(label);
|
| +
|
| name_field_ = new views::Textfield();
|
| name_field_->SetText(GetBookmarkName());
|
| name_field_->SetAccessibleName(
|
| - l10n_util::GetStringUTF16(IDS_BOOKMARK_AX_BUBBLE_TITLE_TEXT));
|
| -
|
| - layout->AddView(name_field_, 5, 1);
|
| -
|
| - layout->AddPaddingRow(
|
| - 0, provider->GetInsetsMetric(views::INSETS_DIALOG_CONTENTS).top());
|
| + l10n_util::GetStringUTF16(IDS_BOOKMARK_AX_BUBBLE_NAME_LABEL));
|
| + layout->AddView(name_field_);
|
|
|
| - layout->StartRow(0, cs_id);
|
| + layout->StartRowWithPadding(
|
| + kFixed, kColumnId, kFixed,
|
| + provider->GetDistanceMetric(views::DISTANCE_RELATED_CONTROL_VERTICAL));
|
| + views::Label* combobox_label = new views::Label(
|
| + l10n_util::GetStringUTF16(IDS_BOOKMARK_BUBBLE_FOLDER_LABEL));
|
| layout->AddView(combobox_label);
|
| - layout->AddView(parent_combobox_, 5, 1);
|
| -
|
| - layout->AddPaddingRow(
|
| - 0, provider->GetDistanceMetric(views::DISTANCE_RELATED_CONTROL_VERTICAL));
|
|
|
| - layout->StartRow(0, cs_id);
|
| - layout->SkipColumns(2);
|
| - layout->AddView(remove_button_);
|
| - layout->AddView(edit_button_);
|
| - layout->AddView(save_button_);
|
| + parent_combobox_ = new UnsizedCombobox(&parent_model_);
|
| + parent_combobox_->set_listener(this);
|
| + parent_combobox_->SetAccessibleName(
|
| + l10n_util::GetStringUTF16(IDS_BOOKMARK_AX_BUBBLE_FOLDER_LABEL));
|
| + layout->AddView(parent_combobox_);
|
|
|
| - AddAccelerator(ui::Accelerator(ui::VKEY_RETURN, ui::EF_NONE));
|
| - AddAccelerator(ui::Accelerator(ui::VKEY_E, ui::EF_ALT_DOWN));
|
| - AddAccelerator(ui::Accelerator(ui::VKEY_R, ui::EF_ALT_DOWN));
|
| + layout->AddPaddingRow(
|
| + kFixed,
|
| + provider->GetInsetsMetric(views::INSETS_DIALOG_CONTENTS).bottom());
|
|
|
| AddChildView(bookmark_contents_view_);
|
| }
|
| @@ -355,17 +361,7 @@ BookmarkBubbleView::BookmarkBubbleView(
|
| newly_bookmarked_(newly_bookmarked),
|
| parent_model_(BookmarkModelFactory::GetForBrowserContext(profile_),
|
| BookmarkModelFactory::GetForBrowserContext(profile_)
|
| - ->GetMostRecentlyAddedUserNodeForURL(url)),
|
| - remove_button_(nullptr),
|
| - edit_button_(nullptr),
|
| - save_button_(nullptr),
|
| - name_field_(nullptr),
|
| - parent_combobox_(nullptr),
|
| - ios_promo_view_(nullptr),
|
| - footnote_view_(nullptr),
|
| - remove_bookmark_(false),
|
| - apply_edits_(true),
|
| - is_showing_ios_promotion_(false) {
|
| + ->GetMostRecentlyAddedUserNodeForURL(url)) {
|
| chrome::RecordDialogCreation(chrome::DialogIdentifier::BOOKMARK);
|
| }
|
|
|
| @@ -381,32 +377,6 @@ base::string16 BookmarkBubbleView::GetBookmarkName() {
|
| return base::string16();
|
| }
|
|
|
| -void BookmarkBubbleView::HandleButtonPressed(views::Button* sender) {
|
| - if (sender == remove_button_) {
|
| - base::RecordAction(UserMetricsAction("BookmarkBubble_Unstar"));
|
| - // Set this so we remove the bookmark after the window closes.
|
| - remove_bookmark_ = true;
|
| - apply_edits_ = false;
|
| - GetWidget()->Close();
|
| - } else if (sender == edit_button_) {
|
| - base::RecordAction(UserMetricsAction("BookmarkBubble_Edit"));
|
| - ShowEditor();
|
| - } else {
|
| - DCHECK_EQ(save_button_, sender);
|
| -#if defined(OS_WIN)
|
| - if (IsIOSPromotionEligible(
|
| - desktop_ios_promotion::PromotionEntryPoint::BOOKMARKS_BUBBLE)) {
|
| - ShowIOSPromotion(
|
| - desktop_ios_promotion::PromotionEntryPoint::BOOKMARKS_BUBBLE);
|
| - } else {
|
| - GetWidget()->Close();
|
| - }
|
| -#else
|
| - GetWidget()->Close();
|
| -#endif
|
| - }
|
| -}
|
| -
|
| void BookmarkBubbleView::ShowEditor() {
|
| const BookmarkNode* node =
|
| BookmarkModelFactory::GetForBrowserContext(profile_)
|
| @@ -457,6 +427,7 @@ bool BookmarkBubbleView::IsIOSPromotionEligible(
|
| void BookmarkBubbleView::ShowIOSPromotion(
|
| desktop_ios_promotion::PromotionEntryPoint entry_point) {
|
| DCHECK(!is_showing_ios_promotion_);
|
| + edit_button_->SetVisible(false);
|
| // Hide the contents, but don't delete. Its child views are accessed in the
|
| // destructor if there are edits to apply.
|
| bookmark_contents_view_->SetVisible(false);
|
| @@ -467,7 +438,7 @@ void BookmarkBubbleView::ShowIOSPromotion(
|
| AddChildView(ios_promo_view_);
|
| GetWidget()->UpdateWindowIcon();
|
| GetWidget()->UpdateWindowTitle();
|
| - // Resize the bubble so it has the same width as the parent bubble.
|
| - ios_promo_view_->UpdateBubbleHeight();
|
| + GetDialogClientView()->UpdateDialogButtons();
|
| + SizeToContents();
|
| }
|
| #endif
|
|
|