Chromium Code Reviews| Index: ui/views/bubble/bubble_dialog_delegate.cc |
| diff --git a/ui/views/bubble/bubble_delegate.cc b/ui/views/bubble/bubble_dialog_delegate.cc |
| similarity index 70% |
| copy from ui/views/bubble/bubble_delegate.cc |
| copy to ui/views/bubble/bubble_dialog_delegate.cc |
| index 5e30b98694a5a4760385970dd2635c2cf374afb6..2de96e72d96a82c026416db5580a12a2ac37ac09 100644 |
| --- a/ui/views/bubble/bubble_delegate.cc |
| +++ b/ui/views/bubble/bubble_dialog_delegate.cc |
| @@ -1,8 +1,8 @@ |
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| -#include "ui/views/bubble/bubble_delegate.h" |
| +#include "ui/views/bubble/bubble_dialog_delegate.h" |
| #include "build/build_config.h" |
| #include "ui/accessibility/ax_view_state.h" |
| @@ -15,6 +15,7 @@ |
| #include "ui/views/layout/layout_constants.h" |
| #include "ui/views/widget/widget.h" |
| #include "ui/views/widget/widget_observer.h" |
| +#include "ui/views/window/dialog_client_view.h" |
| #if defined(OS_WIN) |
| #include "ui/base/win/shell.h" |
| @@ -25,7 +26,7 @@ namespace views { |
| namespace { |
| // Create a widget to host the bubble. |
| -Widget* CreateBubbleWidget(BubbleDelegateView* bubble) { |
| +Widget* CreateBubbleWidget(BubbleDialogDelegateView* bubble) { |
| Widget* bubble_widget = new Widget(); |
| Widget::InitParams bubble_params(Widget::InitParams::TYPE_BUBBLE); |
| bubble_params.delegate = bubble; |
| @@ -35,8 +36,9 @@ Widget* CreateBubbleWidget(BubbleDelegateView* bubble) { |
| bubble_params.parent = bubble->parent_window(); |
| else if (bubble->anchor_widget()) |
| bubble_params.parent = bubble->anchor_widget()->GetNativeView(); |
| - bubble_params.activatable = bubble->CanActivate() ? |
| - Widget::InitParams::ACTIVATABLE_YES : Widget::InitParams::ACTIVATABLE_NO; |
| + bubble_params.activatable = bubble->CanActivate() |
| + ? Widget::InitParams::ACTIVATABLE_YES |
| + : Widget::InitParams::ACTIVATABLE_NO; |
| bubble->OnBeforeBubbleWidgetInit(&bubble_params, bubble_widget); |
| bubble_widget->Init(bubble_params); |
| if (bubble_params.parent) |
| @@ -47,13 +49,14 @@ Widget* CreateBubbleWidget(BubbleDelegateView* bubble) { |
| } // namespace |
| // static |
| -const char BubbleDelegateView::kViewClassName[] = "BubbleDelegateView"; |
| +const char BubbleDialogDelegateView::kViewClassName[] = |
| + "BubbleDialogDelegateView"; |
| -BubbleDelegateView::BubbleDelegateView() |
| - : BubbleDelegateView(nullptr, BubbleBorder::TOP_LEFT) {} |
| +BubbleDialogDelegateView::BubbleDialogDelegateView() |
|
msw
2016/02/22 21:43:56
nit: reorder to match decl (ditto for other ctor)
Evan Stade
2016/02/22 22:58:23
Done.
|
| + : BubbleDialogDelegateView(nullptr, BubbleBorder::TOP_LEFT) {} |
| -BubbleDelegateView::BubbleDelegateView(View* anchor_view, |
| - BubbleBorder::Arrow arrow) |
| +BubbleDialogDelegateView::BubbleDialogDelegateView(View* anchor_view, |
| + BubbleBorder::Arrow arrow) |
| : close_on_esc_(true), |
| close_on_deactivate_(true), |
| anchor_view_storage_id_(ViewStorage::GetInstance()->CreateStorageID()), |
| @@ -76,7 +79,7 @@ BubbleDelegateView::BubbleDelegateView(View* anchor_view, |
| UpdateColorsFromTheme(GetNativeTheme()); |
| } |
| -BubbleDelegateView::~BubbleDelegateView() { |
| +BubbleDialogDelegateView::~BubbleDialogDelegateView() { |
| if (GetWidget()) |
| GetWidget()->RemoveObserver(this); |
| SetLayoutManager(NULL); |
| @@ -84,7 +87,8 @@ BubbleDelegateView::~BubbleDelegateView() { |
| } |
| // static |
| -Widget* BubbleDelegateView::CreateBubble(BubbleDelegateView* bubble_delegate) { |
| +Widget* BubbleDialogDelegateView::CreateBubble( |
| + BubbleDialogDelegateView* bubble_delegate) { |
| bubble_delegate->Init(); |
| // Get the latest anchor widget from the anchor view at bubble creation time. |
| bubble_delegate->SetAnchorView(bubble_delegate->GetAnchorView()); |
| @@ -106,19 +110,17 @@ Widget* BubbleDelegateView::CreateBubble(BubbleDelegateView* bubble_delegate) { |
| return bubble_widget; |
| } |
| -BubbleDelegateView* BubbleDelegateView::AsBubbleDelegate() { |
| - return this; |
| -} |
| - |
| -bool BubbleDelegateView::ShouldShowCloseButton() const { |
| +bool BubbleDialogDelegateView::ShouldShowCloseButton() const { |
| return false; |
| } |
| -View* BubbleDelegateView::GetContentsView() { |
| - return this; |
| +ClientView* BubbleDialogDelegateView::CreateClientView(Widget* widget) { |
| + DialogClientView* client = new DialogClientView(widget, GetContentsView()); |
| + client->set_button_row_insets(gfx::Insets()); |
|
msw
2016/02/22 21:43:56
Why do we want empty insets here?
Evan Stade
2016/02/22 22:58:23
Dialogs don't inset the client view at all. Bubble
msw
2016/02/22 23:24:57
Acknowledged.
|
| + return client; |
| } |
| -NonClientFrameView* BubbleDelegateView::CreateNonClientFrameView( |
| +NonClientFrameView* BubbleDialogDelegateView::CreateNonClientFrameView( |
| Widget* widget) { |
| BubbleFrameView* frame = new BubbleFrameView( |
| gfx::Insets(kPanelVertMargin, kPanelHorizMargin, 0, kPanelHorizMargin), |
| @@ -136,15 +138,15 @@ NonClientFrameView* BubbleDelegateView::CreateNonClientFrameView( |
| return frame; |
| } |
| -void BubbleDelegateView::GetAccessibleState(ui::AXViewState* state) { |
| +void BubbleDialogDelegateView::GetAccessibleState(ui::AXViewState* state) { |
| state->role = ui::AX_ROLE_DIALOG; |
| } |
| -const char* BubbleDelegateView::GetClassName() const { |
| +const char* BubbleDialogDelegateView::GetClassName() const { |
| return kViewClassName; |
| } |
| -void BubbleDelegateView::OnWidgetClosing(Widget* widget) { |
| +void BubbleDialogDelegateView::OnWidgetClosing(Widget* widget) { |
| DCHECK(GetBubbleFrameView()); |
| if (widget == GetWidget() && close_reason_ == CloseReason::UNKNOWN && |
| GetBubbleFrameView()->close_button_clicked()) { |
| @@ -152,13 +154,13 @@ void BubbleDelegateView::OnWidgetClosing(Widget* widget) { |
| } |
| } |
| -void BubbleDelegateView::OnWidgetDestroying(Widget* widget) { |
| +void BubbleDialogDelegateView::OnWidgetDestroying(Widget* widget) { |
| if (anchor_widget() == widget) |
| SetAnchorView(NULL); |
| } |
| -void BubbleDelegateView::OnWidgetVisibilityChanging(Widget* widget, |
| - bool visible) { |
| +void BubbleDialogDelegateView::OnWidgetVisibilityChanging(Widget* widget, |
| + bool visible) { |
| #if defined(OS_WIN) |
| // On Windows we need to handle this before the bubble is visible or hidden. |
| // Please see the comment on the OnWidgetVisibilityChanging function. On |
| @@ -167,15 +169,15 @@ void BubbleDelegateView::OnWidgetVisibilityChanging(Widget* widget, |
| #endif |
| } |
| -void BubbleDelegateView::OnWidgetVisibilityChanged(Widget* widget, |
| - bool visible) { |
| +void BubbleDialogDelegateView::OnWidgetVisibilityChanged(Widget* widget, |
| + bool visible) { |
| #if !defined(OS_WIN) |
| HandleVisibilityChanged(widget, visible); |
| #endif |
| } |
| -void BubbleDelegateView::OnWidgetActivationChanged(Widget* widget, |
| - bool active) { |
| +void BubbleDialogDelegateView::OnWidgetActivationChanged(Widget* widget, |
| + bool active) { |
| if (close_on_deactivate() && widget == GetWidget() && !active) { |
| if (close_reason_ == CloseReason::UNKNOWN) |
| close_reason_ = CloseReason::DEACTIVATION; |
| @@ -183,17 +185,18 @@ void BubbleDelegateView::OnWidgetActivationChanged(Widget* widget, |
| } |
| } |
| -void BubbleDelegateView::OnWidgetBoundsChanged(Widget* widget, |
| - const gfx::Rect& new_bounds) { |
| +void BubbleDialogDelegateView::OnWidgetBoundsChanged( |
| + Widget* widget, |
| + const gfx::Rect& new_bounds) { |
| if (GetBubbleFrameView() && anchor_widget() == widget) |
| SizeToContents(); |
| } |
| -View* BubbleDelegateView::GetAnchorView() const { |
| +View* BubbleDialogDelegateView::GetAnchorView() const { |
| return ViewStorage::GetInstance()->RetrieveView(anchor_view_storage_id_); |
| } |
| -gfx::Rect BubbleDelegateView::GetAnchorRect() const { |
| +gfx::Rect BubbleDialogDelegateView::GetAnchorRect() const { |
| if (!GetAnchorView()) |
| return anchor_rect_; |
| @@ -202,35 +205,32 @@ gfx::Rect BubbleDelegateView::GetAnchorRect() const { |
| return anchor_rect_; |
| } |
| -void BubbleDelegateView::OnBeforeBubbleWidgetInit(Widget::InitParams* params, |
| - Widget* widget) const { |
| -} |
| - |
| -scoped_ptr<View> BubbleDelegateView::CreateFootnoteView() { |
| - return nullptr; |
| -} |
| +void BubbleDialogDelegateView::OnBeforeBubbleWidgetInit( |
| + Widget::InitParams* params, |
| + Widget* widget) const {} |
| -void BubbleDelegateView::UseCompactMargins() { |
| +void BubbleDialogDelegateView::UseCompactMargins() { |
| const int kCompactMargin = 6; |
| margins_.Set(kCompactMargin, kCompactMargin, kCompactMargin, kCompactMargin); |
| } |
| -void BubbleDelegateView::SetAlignment(BubbleBorder::BubbleAlignment alignment) { |
| +void BubbleDialogDelegateView::SetAlignment( |
| + BubbleBorder::BubbleAlignment alignment) { |
| GetBubbleFrameView()->bubble_border()->set_alignment(alignment); |
| SizeToContents(); |
| } |
| -void BubbleDelegateView::SetArrowPaintType( |
| +void BubbleDialogDelegateView::SetArrowPaintType( |
| BubbleBorder::ArrowPaintType paint_type) { |
| GetBubbleFrameView()->bubble_border()->set_paint_arrow(paint_type); |
| SizeToContents(); |
| } |
| -void BubbleDelegateView::OnAnchorBoundsChanged() { |
| +void BubbleDialogDelegateView::OnAnchorBoundsChanged() { |
| SizeToContents(); |
| } |
| -bool BubbleDelegateView::AcceleratorPressed( |
| +bool BubbleDialogDelegateView::AcceleratorPressed( |
| const ui::Accelerator& accelerator) { |
| if (!close_on_esc() || accelerator.key_code() != ui::VKEY_ESCAPE) |
| return false; |
| @@ -239,13 +239,14 @@ bool BubbleDelegateView::AcceleratorPressed( |
| return true; |
| } |
| -void BubbleDelegateView::OnNativeThemeChanged(const ui::NativeTheme* theme) { |
| +void BubbleDialogDelegateView::OnNativeThemeChanged( |
| + const ui::NativeTheme* theme) { |
| UpdateColorsFromTheme(theme); |
| } |
| -void BubbleDelegateView::Init() {} |
| +void BubbleDialogDelegateView::Init() {} |
| -void BubbleDelegateView::SetAnchorView(View* anchor_view) { |
| +void BubbleDialogDelegateView::SetAnchorView(View* anchor_view) { |
| // When the anchor view gets set the associated anchor widget might |
| // change as well. |
| if (!anchor_view || anchor_widget() != anchor_view->GetWidget()) { |
| @@ -275,37 +276,38 @@ void BubbleDelegateView::SetAnchorView(View* anchor_view) { |
| OnAnchorBoundsChanged(); |
| } |
| -void BubbleDelegateView::SetAnchorRect(const gfx::Rect& rect) { |
| +void BubbleDialogDelegateView::SetAnchorRect(const gfx::Rect& rect) { |
| anchor_rect_ = rect; |
| if (GetWidget()) |
| OnAnchorBoundsChanged(); |
| } |
| -void BubbleDelegateView::SizeToContents() { |
| +void BubbleDialogDelegateView::SizeToContents() { |
| GetWidget()->SetBounds(GetBubbleBounds()); |
| } |
| -BubbleFrameView* BubbleDelegateView::GetBubbleFrameView() const { |
| +BubbleFrameView* BubbleDialogDelegateView::GetBubbleFrameView() const { |
| const NonClientView* view = |
| GetWidget() ? GetWidget()->non_client_view() : NULL; |
| return view ? static_cast<BubbleFrameView*>(view->frame_view()) : NULL; |
| } |
| -gfx::Rect BubbleDelegateView::GetBubbleBounds() { |
| +gfx::Rect BubbleDialogDelegateView::GetBubbleBounds() { |
| // The argument rect has its origin at the bubble's arrow anchor point; |
| // its size is the preferred size of the bubble's client view (this view). |
| bool anchor_minimized = anchor_widget() && anchor_widget()->IsMinimized(); |
| - return GetBubbleFrameView()->GetUpdatedWindowBounds(GetAnchorRect(), |
| - GetPreferredSize(), adjust_if_offscreen_ && !anchor_minimized); |
| + return GetBubbleFrameView()->GetUpdatedWindowBounds( |
| + GetAnchorRect(), GetWidget()->client_view()->GetPreferredSize(), |
| + adjust_if_offscreen_ && !anchor_minimized); |
| } |
| -const gfx::FontList& BubbleDelegateView::GetTitleFontList() const { |
| +const gfx::FontList& BubbleDialogDelegateView::GetTitleFontList() const { |
| ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
| return rb.GetFontList(ui::ResourceBundle::MediumFont); |
| } |
| - |
| -void BubbleDelegateView::UpdateColorsFromTheme(const ui::NativeTheme* theme) { |
| +void BubbleDialogDelegateView::UpdateColorsFromTheme( |
| + const ui::NativeTheme* theme) { |
| if (!color_explicitly_set_) |
| color_ = theme->GetSystemColor(ui::NativeTheme::kColorId_BubbleBackground); |
| set_background(Background::CreateSolidBackground(color())); |
| @@ -314,7 +316,8 @@ void BubbleDelegateView::UpdateColorsFromTheme(const ui::NativeTheme* theme) { |
| frame_view->bubble_border()->set_background_color(color()); |
| } |
| -void BubbleDelegateView::HandleVisibilityChanged(Widget* widget, bool visible) { |
| +void BubbleDialogDelegateView::HandleVisibilityChanged(Widget* widget, |
| + bool visible) { |
| if (widget == GetWidget() && anchor_widget() && |
| anchor_widget()->GetTopLevelWidget()) { |
| if (visible) |