diff options
Diffstat (limited to 'ui/views/bubble/bubble_delegate.cc')
-rw-r--r-- | ui/views/bubble/bubble_delegate.cc | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/ui/views/bubble/bubble_delegate.cc b/ui/views/bubble/bubble_delegate.cc index 184a8ac..11dc4ff 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() - : 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; } |