Chromium Code Reviews| Index: views/bubble/bubble_delegate.cc |
| diff --git a/views/bubble/bubble_delegate.cc b/views/bubble/bubble_delegate.cc |
| index 1b40c29ae1b47cf9230c48dc44f830a2272bf2c7..755b6979b567c607c6f1ce38e74b78f0bda58ff5 100644 |
| --- a/views/bubble/bubble_delegate.cc |
| +++ b/views/bubble/bubble_delegate.cc |
| @@ -75,6 +75,7 @@ Widget* CreateBorderWidget(BubbleDelegateView* bubble, Widget* parent) { |
| BubbleDelegateView::BubbleDelegateView() |
| : close_on_esc_(true), |
| + close_on_blur_(true), |
| arrow_location_(BubbleBorder::TOP_LEFT), |
| color_(SK_ColorWHITE), |
| border_widget_(NULL) { |
| @@ -87,6 +88,7 @@ BubbleDelegateView::BubbleDelegateView( |
| BubbleBorder::ArrowLocation arrow_location, |
| const SkColor& color) |
| : close_on_esc_(true), |
| + close_on_blur_(true), |
| anchor_point_(anchor_point), |
| arrow_location_(arrow_location), |
| color_(color), |
| @@ -99,6 +101,7 @@ BubbleDelegateView::BubbleDelegateView( |
| BubbleDelegateView::~BubbleDelegateView() { |
| if (border_widget_) |
| border_widget_->Close(); |
| + WidgetFocusManager::GetInstance()->RemoveFocusChangeListener(this); |
| } |
| // static |
| @@ -115,6 +118,9 @@ Widget* BubbleDelegateView::CreateBubble(BubbleDelegateView* bubble_delegate, |
| bubble_widget->SetBounds(bubble_delegate->GetBubbleBounds()); |
| #endif |
| + if (parent_widget && parent_widget->GetTopLevelWidget()) |
| + parent_widget->GetTopLevelWidget()->DisableInactiveRendering(); |
| + WidgetFocusManager::GetInstance()->AddFocusChangeListener(bubble_delegate); |
| return bubble_widget; |
| } |
| @@ -132,6 +138,17 @@ NonClientFrameView* BubbleDelegateView::CreateNonClientFrameView() { |
| GetColor()); |
| } |
| +void BubbleDelegateView::NativeFocusWillChange(gfx::NativeView focused_before, |
| + gfx::NativeView focused_now) { |
| + if (close_on_blur()) { |
| + gfx::NativeView native_view = GetWidget()->GetNativeView(); |
| + if (focused_before == native_view && focused_now != native_view) { |
|
Ben Goodger (Google)
2011/11/01 23:54:56
I thought we just discussed doing this in an activ
msw
2011/11/05 03:22:24
Done.
I was lead astray by WidgetFocusChangeListe
|
| + WidgetFocusManager::GetInstance()->RemoveFocusChangeListener(this); |
| + GetWidget()->Close(); |
| + } |
| + } |
| +} |
| + |
| gfx::Point BubbleDelegateView::GetAnchorPoint() { |
| return anchor_point_; |
| } |