Chromium Code Reviews| Index: ui/app_list/views/app_list_view.cc |
| diff --git a/ui/app_list/views/app_list_view.cc b/ui/app_list/views/app_list_view.cc |
| index 893d005bc7e824f35954000a67ff7d4c783266e1..b55c9c3f36c4189eea2a9aeb479fb27e2c3c30ab 100644 |
| --- a/ui/app_list/views/app_list_view.cc |
| +++ b/ui/app_list/views/app_list_view.cc |
| @@ -18,7 +18,6 @@ |
| #include "ui/app_list/app_list_switches.h" |
| #include "ui/app_list/app_list_view_delegate.h" |
| #include "ui/app_list/speech_ui_model.h" |
| -#include "ui/app_list/views/app_list_background.h" |
| #include "ui/app_list/views/app_list_folder_view.h" |
| #include "ui/app_list/views/app_list_main_view.h" |
| #include "ui/app_list/views/app_list_view_observer.h" |
| @@ -28,6 +27,8 @@ |
| #include "ui/app_list/views/search_box_view.h" |
| #include "ui/app_list/views/speech_view.h" |
| #include "ui/app_list/views/start_page_view.h" |
| +#include "ui/aura/window.h" |
| +#include "ui/aura/window_tree_host.h" |
| #include "ui/base/ui_base_switches.h" |
| #include "ui/compositor/layer.h" |
| #include "ui/compositor/layer_animation_observer.h" |
| @@ -39,21 +40,13 @@ |
| #include "ui/gfx/skia_util.h" |
| #include "ui/resources/grit/ui_resources.h" |
| #include "ui/views/bubble/bubble_frame_view.h" |
| +#include "ui/views/bubble/bubble_window_targeter.h" |
| #include "ui/views/controls/image_view.h" |
| #include "ui/views/controls/textfield/textfield.h" |
| #include "ui/views/layout/fill_layout.h" |
| #include "ui/views/views_delegate.h" |
| #include "ui/views/widget/widget.h" |
| - |
| -#if defined(USE_AURA) |
| -#include "ui/aura/window.h" |
| -#include "ui/aura/window_tree_host.h" |
| -#include "ui/views/bubble/bubble_window_targeter.h" |
| #include "ui/wm/core/masked_window_targeter.h" |
| -#if !defined(OS_CHROMEOS) |
| -#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h" |
| -#endif |
| -#endif // defined(USE_AURA) |
| namespace app_list { |
| @@ -65,18 +58,6 @@ const int kSpeechUIMargin = 12; |
| // The vertical position for the appearing animation of the speech UI. |
| const float kSpeechUIAppearingPosition = 12; |
| -// The distance between the arrow tip and edge of the anchor view. |
| -const int kArrowOffset = 10; |
| - |
| -// Determines whether the current environment supports shadows bubble borders. |
| -bool SupportsShadow() { |
| -#if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| - // Shadows are not supported on (non-ChromeOS) Linux. |
| - return false; |
| -#endif |
| - return true; |
| -} |
| - |
| // This view forwards the focus to the search box widget by providing it as a |
| // FocusTraversable when a focus search is provided. |
| class SearchBoxFocusHost : public views::View { |
| @@ -123,7 +104,6 @@ class AppListOverlayView : public views::View { |
| DISALLOW_COPY_AND_ASSIGN(AppListOverlayView); |
| }; |
| -#if defined(USE_AURA) |
| // An event targeter for the search box widget which will ignore events that |
| // are on the search box's shadow. |
| class SearchBoxWindowTargeter : public wm::MaskedWindowTargeter { |
| @@ -144,7 +124,6 @@ class SearchBoxWindowTargeter : public wm::MaskedWindowTargeter { |
| DISALLOW_COPY_AND_ASSIGN(SearchBoxWindowTargeter); |
| }; |
| -#endif |
| } // namespace |
| @@ -212,21 +191,46 @@ AppListView::~AppListView() { |
| RemoveAllChildViews(true); |
| } |
| -void AppListView::InitAsBubbleAtFixedLocation( |
| - gfx::NativeView parent, |
| - int initial_apps_page, |
| - const gfx::Point& anchor_point_in_screen, |
| - views::BubbleBorder::Arrow arrow, |
| - bool border_accepts_events) { |
| - SetAnchorRect(gfx::Rect(anchor_point_in_screen, gfx::Size())); |
| - // TODO(mgiuca): Inline InitAsBubbleInternal, since there is only one caller. |
| - InitAsBubbleInternal( |
| - parent, initial_apps_page, arrow, border_accepts_events, gfx::Vector2d()); |
| +void AppListView::InitAsBubble(gfx::NativeView parent, int initial_apps_page) { |
| + base::Time start_time = base::Time::Now(); |
| + |
| + InitContents(parent, initial_apps_page); |
| + |
| + AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE)); |
| + set_margins(gfx::Insets()); |
| + set_parent_window(parent); |
| + set_close_on_deactivate(false); |
| + set_shadow(views::BubbleBorder::NO_ASSETS); |
| + set_color(kContentsBackgroundColor); |
| + // This creates the app list widget. (Before this, child widgets cannot be |
| + // created.) |
| + views::BubbleDialogDelegateView::CreateBubble(this); |
| + |
| + SetBubbleArrow(views::BubbleBorder::FLOAT); |
| + // We can now create the internal widgets. |
| + InitChildWidgets(); |
| + |
| + aura::Window* window = GetWidget()->GetNativeWindow(); |
| + window->SetEventTargeter(std::unique_ptr<ui::EventTargeter>( |
|
tapted
2016/12/21 22:39:58
nit: MakeUnique?
Evan Stade
2016/12/29 17:23:12
Done.
|
| + new views::BubbleWindowTargeter(this))); |
| + |
| + const int kOverlayCornerRadius = |
| + GetBubbleFrameView()->bubble_border()->GetBorderCornerRadius(); |
| + overlay_view_ = new AppListOverlayView(kOverlayCornerRadius); |
| + overlay_view_->SetBoundsRect(GetContentsBounds()); |
| + AddChildView(overlay_view_); |
| + |
| + if (delegate_) |
| + delegate_->ViewInitialized(); |
| + |
| + UMA_HISTOGRAM_TIMES("Apps.AppListCreationTime", |
| + base::Time::Now() - start_time); |
| } |
| void AppListView::InitAsFramelessWindow(gfx::NativeView parent, |
| int initial_apps_page, |
| gfx::Rect bounds) { |
| + set_color(kContentsBackgroundColor); |
| InitContents(parent, initial_apps_page); |
| overlay_view_ = new AppListOverlayView(0 /* no corners */); |
| AddChildView(overlay_view_); |
| @@ -238,11 +242,6 @@ void AppListView::InitAsFramelessWindow(gfx::NativeView parent, |
| params.delegate = this; |
| widget->Init(params); |
| widget->SetBounds(bounds); |
| - // This needs to be set *after* Widget::Init() because |
| - // BubbleDialogDelegateView sets its own background at OnNativeThemeChanged(), |
| - // which is called in View::AddChildView() which is called at |
| - // Widget::SetContentsView() to build the views hierarchy in the widget. |
| - set_background(new AppListBackground(0)); |
| InitChildWidgets(); |
| } |
| @@ -294,7 +293,7 @@ void AppListView::SetAppListOverlayVisible(bool visible) { |
| settings.AddObserver(animation_observer_.get()); |
| } |
| - const float kOverlayFadeInMilliseconds = 125; |
| + const float kOverlayFadeInMilliseconds = 1250; |
|
msw
2016/12/20 19:16:10
Revert this
Evan Stade
2016/12/29 17:23:12
Done.
|
| settings.SetTransitionDuration( |
| base::TimeDelta::FromMilliseconds(kOverlayFadeInMilliseconds)); |
| @@ -351,14 +350,6 @@ void AppListView::SetProfileByPath(const base::FilePath& profile_path) { |
| app_list_main_view_->ModelChanged(); |
| } |
| -void AppListView::AddObserver(AppListViewObserver* observer) { |
| - observers_.AddObserver(observer); |
| -} |
| - |
| -void AppListView::RemoveObserver(AppListViewObserver* observer) { |
| - observers_.RemoveObserver(observer); |
| -} |
| - |
| PaginationModel* AppListView::GetAppsPaginationModel() { |
| return app_list_main_view_->contents_view() |
| ->apps_container_view() |
| @@ -437,93 +428,14 @@ void AppListView::InitChildWidgets() { |
| search_box_widget_->SetFocusTraversableParent( |
| GetWidget()->GetFocusTraversable()); |
| -#if defined(USE_AURA) |
| // Mouse events on the search box shadow should not be captured. |
| aura::Window* window = search_box_widget_->GetNativeWindow(); |
| - window->SetEventTargeter(std::unique_ptr<ui::EventTargeter>( |
| - new SearchBoxWindowTargeter(search_box_view_))); |
| -#endif |
| + window->SetEventTargeter( |
| + base::MakeUnique<SearchBoxWindowTargeter>(search_box_view_)); |
| app_list_main_view_->contents_view()->Layout(); |
| } |
| -void AppListView::InitAsBubbleInternal(gfx::NativeView parent, |
| - int initial_apps_page, |
| - views::BubbleBorder::Arrow arrow, |
| - bool border_accepts_events, |
| - const gfx::Vector2d& anchor_offset) { |
| - base::Time start_time = base::Time::Now(); |
| - |
| - InitContents(parent, initial_apps_page); |
| - |
| - AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE)); |
| - set_color(kContentsBackgroundColor); |
| - set_margins(gfx::Insets()); |
| - set_parent_window(parent); |
| - set_close_on_deactivate(false); |
| - set_anchor_view_insets(gfx::Insets(kArrowOffset + anchor_offset.y(), |
| - kArrowOffset + anchor_offset.x(), |
| - kArrowOffset - anchor_offset.y(), |
| - kArrowOffset - anchor_offset.x())); |
| - set_border_accepts_events(border_accepts_events); |
| - set_shadow(SupportsShadow() ? views::BubbleBorder::BIG_SHADOW |
| - : views::BubbleBorder::NO_SHADOW_OPAQUE_BORDER); |
| - |
| - { |
| - // TODO(tapted): Remove ScopedTracker below once crbug.com/431326 is fixed. |
| - tracked_objects::ScopedTracker tracking_profile( |
| - FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| - "431326 views::BubbleDialogDelegateView::CreateBubble()")); |
| - |
| - // This creates the app list widget. (Before this, child widgets cannot be |
| - // created.) |
| - views::BubbleDialogDelegateView::CreateBubble(this); |
| - } |
| - |
| - SetBubbleArrow(arrow); |
| - |
| - // We can now create the internal widgets. |
| - InitChildWidgets(); |
| - |
| -#if defined(USE_AURA) |
| - aura::Window* window = GetWidget()->GetNativeWindow(); |
| - window->layer()->SetMasksToBounds(true); |
| - GetBubbleFrameView()->set_background(new AppListBackground( |
| - GetBubbleFrameView()->bubble_border()->GetBorderCornerRadius())); |
| - set_background(NULL); |
| - window->SetEventTargeter(std::unique_ptr<ui::EventTargeter>( |
| - new views::BubbleWindowTargeter(this))); |
| -#else |
| - set_background(new AppListBackground( |
| - GetBubbleFrameView()->bubble_border()->GetBorderCornerRadius())); |
| - |
| - // On non-aura the bubble has two widgets, and it's possible for the border |
| - // to be shown independently in odd situations. Explicitly hide the bubble |
| - // widget to ensure that any WM_WINDOWPOSCHANGED messages triggered by the |
| - // window manager do not have the SWP_SHOWWINDOW flag set which would cause |
| - // the border to be shown. See http://crbug.com/231687 . |
| - GetWidget()->Hide(); |
| -#endif |
| - |
| - // On platforms that don't support a shadow, the rounded border of the app |
| - // list is constructed _inside_ the view, so a rectangular background goes |
| - // over the border in the rounded corners. To fix this, give the background a |
| - // corner radius 1px smaller than the outer border, so it just reaches but |
| - // doesn't cover it. |
| - const int kOverlayCornerRadius = |
| - GetBubbleFrameView()->bubble_border()->GetBorderCornerRadius(); |
| - overlay_view_ = |
| - new AppListOverlayView(kOverlayCornerRadius - (SupportsShadow() ? 0 : 1)); |
| - overlay_view_->SetBoundsRect(GetContentsBounds()); |
| - AddChildView(overlay_view_); |
| - |
| - if (delegate_) |
| - delegate_->ViewInitialized(); |
| - |
| - UMA_HISTOGRAM_TIMES("Apps.AppListCreationTime", |
| - base::Time::Now() - start_time); |
| -} |
| - |
| void AppListView::OnBeforeBubbleWidgetInit( |
| views::Widget::InitParams* params, |
| views::Widget* widget) const { |
| @@ -534,18 +446,8 @@ void AppListView::OnBeforeBubbleWidgetInit( |
| views_delegate->native_widget_factory().Run(*params, widget); |
| } |
| } |
| -#if defined(USE_AURA) && !defined(OS_CHROMEOS) |
| - if (!params->native_widget && delegate_ && delegate_->ForceNativeDesktop()) |
| - params->native_widget = new views::DesktopNativeWidgetAura(widget); |
| -#endif |
| -#if defined(OS_LINUX) |
| - // Set up a custom WM_CLASS for the app launcher window. This allows task |
| - // switchers in X11 environments to distinguish it from main browser windows. |
| - params->wm_class_name = kAppListWMClass; |
| - // Show the window in the taskbar, even though it is a bubble, which would not |
| - // normally be shown. |
| - params->force_show_in_taskbar = true; |
| -#endif |
| + // Apply a WM-provided shadow (see ui/wm/core/). |
| + params->shadow_type = views::Widget::InitParams::SHADOW_TYPE_DROP; |
| } |
| int AppListView::GetDialogButtons() const { |
| @@ -617,16 +519,6 @@ void AppListView::OnWidgetDestroying(views::Widget* widget) { |
| delegate_->ViewClosing(); |
| } |
| -void AppListView::OnWidgetActivationChanged(views::Widget* widget, |
| - bool active) { |
| - // Do not called inherited function as the bubble delegate auto close |
|
tapted
2016/12/21 22:39:58
So long as you've checked that clicking outside th
Evan Stade
2016/12/29 17:23:12
it does still close. Not the easiest thing to trac
|
| - // functionality is not used. |
| - if (widget == GetWidget()) { |
| - for (auto& observer : observers_) |
| - observer.OnActivationChanged(widget, active); |
| - } |
| -} |
| - |
| void AppListView::OnWidgetVisibilityChanged(views::Widget* widget, |
| bool visible) { |
| BubbleDialogDelegateView::OnWidgetVisibilityChanged(widget, visible); |