| 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 c1bdb1edb175a75e3b73c46b380c1638611d966b..216abf4d4505b16a46ee4977aada5e6bc56ef716 100644
|
| --- a/ui/app_list/views/app_list_view.cc
|
| +++ b/ui/app_list/views/app_list_view.cc
|
| @@ -83,6 +83,25 @@ bool SupportsShadow() {
|
| 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 {
|
| + public:
|
| + explicit SearchBoxFocusHost(views::Widget* search_box_widget)
|
| + : search_box_widget_(search_box_widget) {}
|
| +
|
| + ~SearchBoxFocusHost() override {}
|
| +
|
| + views::FocusTraversable* GetFocusTraversable() override {
|
| + return search_box_widget_;
|
| + }
|
| +
|
| + private:
|
| + views::Widget* search_box_widget_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(SearchBoxFocusHost);
|
| +};
|
| +
|
| // The view for the App List overlay, which appears as a white rounded
|
| // rectangle with the given radius.
|
| class AppListOverlayView : public views::View {
|
| @@ -182,6 +201,7 @@ AppListView::AppListView(AppListViewDelegate* delegate)
|
| : delegate_(delegate),
|
| app_list_main_view_(nullptr),
|
| speech_view_(nullptr),
|
| + search_box_focus_host_(nullptr),
|
| search_box_widget_(nullptr),
|
| search_box_view_(nullptr),
|
| overlay_view_(nullptr),
|
| @@ -463,6 +483,15 @@ void AppListView::InitChildWidgets() {
|
| search_box_widget_->Init(search_box_widget_params);
|
| search_box_widget_->SetContentsView(search_box_view_);
|
|
|
| + // The search box will not naturally receive focus by itself (because it is in
|
| + // a separate widget). Create this SearchBoxFocusHost in the main widget to
|
| + // forward the focus search into to the search box.
|
| + search_box_focus_host_ = new SearchBoxFocusHost(search_box_widget_);
|
| + AddChildView(search_box_focus_host_);
|
| + search_box_widget_->SetFocusTraversableParentView(search_box_focus_host_);
|
| + 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();
|
|
|