| 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..0d9a30bbb89c8d82fe2957539617f22648819943 100644
|
| --- a/ui/app_list/views/app_list_view.cc
|
| +++ b/ui/app_list/views/app_list_view.cc
|
| @@ -18,16 +18,16 @@
|
| #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"
|
| #include "ui/app_list/views/apps_container_view.h"
|
| #include "ui/app_list/views/contents_view.h"
|
| #include "ui/app_list/views/custom_launcher_page_view.h"
|
| #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 +39,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 +57,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 +103,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 +123,6 @@ class SearchBoxWindowTargeter : public wm::MaskedWindowTargeter {
|
|
|
| DISALLOW_COPY_AND_ASSIGN(SearchBoxWindowTargeter);
|
| };
|
| -#endif
|
|
|
| } // namespace
|
|
|
| @@ -212,21 +190,45 @@ 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(base::MakeUnique<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 +240,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();
|
| }
|
| @@ -351,14 +348,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 +426,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 +444,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 +517,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
|
| - // 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);
|
|
|