diff options
author | calamity <calamity@chromium.org> | 2015-03-02 17:39:50 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-03-03 01:40:36 +0000 |
commit | a4e2242b75647b641e6d2190b01cde7c9c5233c8 (patch) | |
tree | 32805b313f72c65340dbe011ab1812bb3b331962 /ui/app_list | |
parent | 5f1263bb318f072343f59dec4b310a522c80b9a2 (diff) | |
download | chromium_src-a4e2242b75647b641e6d2190b01cde7c9c5233c8.zip chromium_src-a4e2242b75647b641e6d2190b01cde7c9c5233c8.tar.gz chromium_src-a4e2242b75647b641e6d2190b01cde7c9c5233c8.tar.bz2 |
Correctly handle tab navigation in the app list.
This CL causes the app list tab navigation to correctly cycle to and from
the custom launcher page. This has been fixed by adding a SearchBoxFocusHost
which directs the focus search to the search box.
BUG=462079
Review URL: https://codereview.chromium.org/960133005
Cr-Commit-Position: refs/heads/master@{#318814}
Diffstat (limited to 'ui/app_list')
-rw-r--r-- | ui/app_list/views/app_list_view.cc | 29 | ||||
-rw-r--r-- | ui/app_list/views/app_list_view.h | 1 |
2 files changed, 30 insertions, 0 deletions
diff --git a/ui/app_list/views/app_list_view.cc b/ui/app_list/views/app_list_view.cc index c1bdb1e..216abf4 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(); diff --git a/ui/app_list/views/app_list_view.h b/ui/app_list/views/app_list_view.h index 1634cef..b62f9d35 100644 --- a/ui/app_list/views/app_list_view.h +++ b/ui/app_list/views/app_list_view.h @@ -173,6 +173,7 @@ class APP_LIST_EXPORT AppListView : public views::BubbleDelegateView, AppListMainView* app_list_main_view_; SpeechView* speech_view_; + views::View* search_box_focus_host_; // Owned by the views hierarchy. views::Widget* search_box_widget_; // Owned by the app list's widget. SearchBoxView* search_box_view_; // Owned by |search_box_widget_|. |