Chromium Code Reviews| Index: ash/common/system/toast/toast_overlay.cc |
| diff --git a/ash/common/system/toast/toast_overlay.cc b/ash/common/system/toast/toast_overlay.cc |
| index 7a969c4d020944d41100529fa25e5ba8b078015e..f9786ceae2d627a883707e44b4862de75e14afdb 100644 |
| --- a/ash/common/system/toast/toast_overlay.cc |
| +++ b/ash/common/system/toast/toast_overlay.cc |
| @@ -129,10 +129,10 @@ ToastOverlayButton::ToastOverlayButton(views::ButtonListener* listener, |
| // ToastOverlayView |
| class ToastOverlayView : public views::View, public views::ButtonListener { |
| public: |
| - // This object is not owned by the views hiearchy or by the widget. |
| + // This object is not owned by the views hierarchy or by the widget. |
| ToastOverlayView(ToastOverlay* overlay, |
| const base::string16& text, |
| - const base::string16& dismiss_text); |
| + const base::Optional<base::string16>& dismiss_text); |
| ~ToastOverlayView() override; |
| // views::View overrides: |
| @@ -141,38 +141,44 @@ class ToastOverlayView : public views::View, public views::ButtonListener { |
| ToastOverlayButton* button() { return button_; } |
| private: |
| - ToastOverlay* overlay_; // weak |
| - ToastOverlayButton* button_; // weak |
| - |
| + // views::View overrides: |
| gfx::Size GetMaximumSize() const override; |
| gfx::Size GetMinimumSize() const override; |
| + // views::ButtonListener overrides: |
| void ButtonPressed(views::Button* sender, const ui::Event& event) override; |
| + ToastOverlay* overlay_ = nullptr; // weak |
| + ToastOverlayButton* button_ = nullptr; // weak |
| + |
| DISALLOW_COPY_AND_ASSIGN(ToastOverlayView); |
| }; |
| -ToastOverlayView::ToastOverlayView(ToastOverlay* overlay, |
| - const base::string16& text, |
| - const base::string16& dismiss_text) |
| - : overlay_(overlay), |
| - button_(new ToastOverlayButton( |
| - this, |
| - dismiss_text.empty() |
| - ? l10n_util::GetStringUTF16(IDS_ASH_TOAST_DISMISS_BUTTON) |
| - : dismiss_text)) { |
| - ToastOverlayLabel* label = new ToastOverlayLabel(text); |
| - label->SetMaximumWidth( |
| - GetMaximumSize().width() - button_->GetPreferredSize().width() - |
| - kToastHorizontalSpacing * 2 - kToastHorizontalSpacing * 2); |
| - AddChildView(label); |
| - |
| - AddChildView(button_); |
| - |
| +ToastOverlayView::ToastOverlayView( |
| + ToastOverlay* overlay, |
| + const base::string16& text, |
| + const base::Optional<base::string16>& dismiss_text) |
| + : overlay_(overlay) { |
| auto* layout = new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0); |
| SetLayoutManager(layout); |
| + |
| + if (dismiss_text.has_value()) { |
| + button_ = new ToastOverlayButton( |
| + this, dismiss_text.value().empty() |
| + ? l10n_util::GetStringUTF16(IDS_ASH_TOAST_DISMISS_BUTTON) |
| + : dismiss_text.value()); |
| + } |
| + |
| + ToastOverlayLabel* label = new ToastOverlayLabel(text); |
| + AddChildView(label); |
| layout->SetFlexForView(label, 1); |
| - layout->SetFlexForView(button_, 0); |
| + |
| + if (button_) { |
| + label->SetMaximumWidth( |
| + GetMaximumSize().width() - button_->GetPreferredSize().width() - |
| + kToastHorizontalSpacing * 2 - kToastHorizontalSpacing * 2); |
| + AddChildView(button_); |
| + } |
| } |
| ToastOverlayView::~ToastOverlayView() {} |
| @@ -196,6 +202,7 @@ gfx::Size ToastOverlayView::GetMaximumSize() const { |
| void ToastOverlayView::ButtonPressed(views::Button* sender, |
| const ui::Event& event) { |
| + DCHECK_EQ(button_, sender); |
| overlay_->Show(false); |
| } |
| @@ -203,7 +210,7 @@ void ToastOverlayView::ButtonPressed(views::Button* sender, |
| // ToastOverlay |
| ToastOverlay::ToastOverlay(Delegate* delegate, |
| const base::string16& text, |
| - const base::string16& dismiss_text) |
| + base::Optional<base::string16> dismiss_text) |
| : delegate_(delegate), |
| text_(text), |
| dismiss_text_(dismiss_text), |
| @@ -293,6 +300,10 @@ views::Widget* ToastOverlay::widget_for_testing() { |
| return overlay_widget_.get(); |
| } |
| +ToastOverlayButton* ToastOverlay::dismiss_button_for_testing() { |
| + return overlay_view_->button(); |
| +} |
| + |
| void ToastOverlay::ClickDismissButtonForTesting(const ui::Event& event) { |
| overlay_view_->button()->NotifyClick(event); |
|
yoshiki
2016/11/16 04:22:45
nit: Could you add DCHECK(overlay_view_->button())
jdufault
2016/11/16 19:13:56
Done.
|
| } |