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_; |
} |