| Index: ui/views/bubble/bubble_delegate.cc
|
| diff --git a/ui/views/bubble/bubble_delegate.cc b/ui/views/bubble/bubble_delegate.cc
|
| index 3942c9276f5521b67f289eeb29e351bf411331e0..11e2072b5f5feeaf5d1e236f45ac3f5230b662d3 100644
|
| --- a/ui/views/bubble/bubble_delegate.cc
|
| +++ b/ui/views/bubble/bubble_delegate.cc
|
| @@ -171,19 +171,30 @@ NonClientFrameView* BubbleDelegateView::CreateNonClientFrameView(
|
| return new BubbleFrameView(arrow_location(), color(), margin());
|
| }
|
|
|
| +void BubbleDelegateView::OnWidgetClosing(Widget* widget) {
|
| + if (anchor_view() && anchor_view()->GetWidget() == widget)
|
| + anchor_view_ = NULL;
|
| +}
|
| +
|
| void BubbleDelegateView::OnWidgetVisibilityChanged(Widget* widget,
|
| bool visible) {
|
| - if (widget == GetWidget()) {
|
| - if (visible) {
|
| - if (border_widget_)
|
| - border_widget_->Show();
|
| - GetFocusManager()->SetFocusedView(GetInitiallyFocusedView());
|
| - Widget* anchor_widget = anchor_view() ? anchor_view()->GetWidget() : NULL;
|
| - if (anchor_widget && anchor_widget->GetTopLevelWidget())
|
| - anchor_widget->GetTopLevelWidget()->DisableInactiveRendering();
|
| - } else if (border_widget_) {
|
| + if (widget != GetWidget())
|
| + return;
|
| +
|
| + Widget* anchor_widget = anchor_view() ? anchor_view()->GetWidget() : NULL;
|
| + if (visible) {
|
| + if (border_widget_)
|
| + border_widget_->Show();
|
| + if (anchor_widget)
|
| + anchor_widget->AddObserver(this);
|
| + GetFocusManager()->SetFocusedView(GetInitiallyFocusedView());
|
| + if (anchor_widget && anchor_widget->GetTopLevelWidget())
|
| + anchor_widget->GetTopLevelWidget()->DisableInactiveRendering();
|
| + } else {
|
| + if (border_widget_)
|
| border_widget_->Hide();
|
| - }
|
| + if (anchor_widget)
|
| + anchor_widget->RemoveObserver(this);
|
| }
|
| }
|
|
|
| @@ -193,6 +204,11 @@ void BubbleDelegateView::OnWidgetActivationChanged(Widget* widget,
|
| GetWidget()->Close();
|
| }
|
|
|
| +void BubbleDelegateView::OnWidgetMove(Widget* widget) {
|
| + if (anchor_view() && anchor_view()->GetWidget() == widget)
|
| + SizeToContents();
|
| +}
|
| +
|
| gfx::Rect BubbleDelegateView::GetAnchorRect() {
|
| return anchor_view() ? anchor_view()->GetScreenBounds() : gfx::Rect();
|
| }
|
|
|