summaryrefslogtreecommitdiffstats
path: root/ui/app_list
diff options
context:
space:
mode:
authorcalamity <calamity@chromium.org>2015-03-02 17:39:50 -0800
committerCommit bot <commit-bot@chromium.org>2015-03-03 01:40:36 +0000
commita4e2242b75647b641e6d2190b01cde7c9c5233c8 (patch)
tree32805b313f72c65340dbe011ab1812bb3b331962 /ui/app_list
parent5f1263bb318f072343f59dec4b310a522c80b9a2 (diff)
downloadchromium_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.cc29
-rw-r--r--ui/app_list/views/app_list_view.h1
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_|.