Chromium Code Reviews| Index: ui/views/bubble/bubble_delegate.cc |
| diff --git a/ui/views/bubble/bubble_delegate.cc b/ui/views/bubble/bubble_delegate.cc |
| index 184a8ac8007028b4ac4999079f48cf7784a06da7..11dc4fffbb320c9564d7e96fd3d1e7e262b19711 100644 |
| --- a/ui/views/bubble/bubble_delegate.cc |
| +++ b/ui/views/bubble/bubble_delegate.cc |
| @@ -51,25 +51,10 @@ Widget* CreateBubbleWidget(BubbleDelegateView* bubble) { |
| const char BubbleDelegateView::kViewClassName[] = "BubbleDelegateView"; |
| BubbleDelegateView::BubbleDelegateView() |
|
Devlin
2015/11/18 23:21:27
Grr... silly duplicate constructors. We'll fix yo
|
| - : close_on_esc_(true), |
| - close_on_deactivate_(true), |
| - anchor_view_storage_id_(ViewStorage::GetInstance()->CreateStorageID()), |
| - anchor_widget_(NULL), |
| - arrow_(BubbleBorder::TOP_LEFT), |
| - shadow_(BubbleBorder::SMALL_SHADOW), |
| - color_explicitly_set_(false), |
| - margins_(kDefaultMargin, kDefaultMargin, kDefaultMargin, kDefaultMargin), |
| - accept_events_(true), |
| - border_accepts_events_(true), |
| - adjust_if_offscreen_(true), |
| - parent_window_(NULL) { |
| - AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE)); |
| - UpdateColorsFromTheme(GetNativeTheme()); |
| -} |
| + : BubbleDelegateView(nullptr, BubbleBorder::TOP_LEFT) {} |
| -BubbleDelegateView::BubbleDelegateView( |
| - View* anchor_view, |
| - BubbleBorder::Arrow arrow) |
| +BubbleDelegateView::BubbleDelegateView(View* anchor_view, |
| + BubbleBorder::Arrow arrow) |
| : close_on_esc_(true), |
| close_on_deactivate_(true), |
| anchor_view_storage_id_(ViewStorage::GetInstance()->CreateStorageID()), |
| @@ -81,8 +66,10 @@ BubbleDelegateView::BubbleDelegateView( |
| accept_events_(true), |
| border_accepts_events_(true), |
| adjust_if_offscreen_(true), |
| - parent_window_(NULL) { |
| - SetAnchorView(anchor_view); |
| + parent_window_(NULL), |
| + close_reason_(CloseReason::UNKNOWN) { |
| + if (anchor_view) |
| + SetAnchorView(anchor_view); |
| AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE)); |
| UpdateColorsFromTheme(GetNativeTheme()); |
| } |
| @@ -151,6 +138,14 @@ const char* BubbleDelegateView::GetClassName() const { |
| return kViewClassName; |
| } |
| +void BubbleDelegateView::OnWidgetClosing(Widget* widget) { |
| + DCHECK(GetBubbleFrameView()); |
| + if (widget == GetWidget() && close_reason_ == CloseReason::UNKNOWN && |
| + GetBubbleFrameView()->close_button_clicked()) { |
| + close_reason_ = CloseReason::CLOSE_BUTTON; |
| + } |
| +} |
| + |
| void BubbleDelegateView::OnWidgetDestroying(Widget* widget) { |
| if (anchor_widget() == widget) |
| SetAnchorView(NULL); |
| @@ -175,8 +170,11 @@ void BubbleDelegateView::OnWidgetVisibilityChanged(Widget* widget, |
| void BubbleDelegateView::OnWidgetActivationChanged(Widget* widget, |
| bool active) { |
| - if (close_on_deactivate() && widget == GetWidget() && !active) |
| + if (close_on_deactivate() && widget == GetWidget() && !active) { |
| + if (close_reason_ == CloseReason::UNKNOWN) |
| + close_reason_ = CloseReason::DEACTIVATION; |
| GetWidget()->Close(); |
| + } |
| } |
| void BubbleDelegateView::OnWidgetBoundsChanged(Widget* widget, |
| @@ -221,6 +219,7 @@ bool BubbleDelegateView::AcceleratorPressed( |
| const ui::Accelerator& accelerator) { |
| if (!close_on_esc() || accelerator.key_code() != ui::VKEY_ESCAPE) |
| return false; |
| + close_reason_ = CloseReason::ESCAPE; |
| GetWidget()->Close(); |
| return true; |
| } |