Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(496)

Unified Diff: ui/app_list/views/start_page_view.cc

Issue 730343008: Add keyboard navigation for start page tiles in experimental app list. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@move_search_box_widget_layout
Patch Set: address_comments Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/app_list/views/start_page_view.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/app_list/views/start_page_view.cc
diff --git a/ui/app_list/views/start_page_view.cc b/ui/app_list/views/start_page_view.cc
index 45fa3942a7a693b80a87f86d47ce25bd1d1d726a..e9ab1de1c4ea60dd73999db1f5e1afbb0fa1e6c1 100644
--- a/ui/app_list/views/start_page_view.cc
+++ b/ui/app_list/views/start_page_view.cc
@@ -147,6 +147,7 @@ TileItemView* StartPageView::all_apps_button() const {
void StartPageView::OnShow() {
DCHECK(app_list_main_view_->contents_view()->ShouldShowCustomPageClickzone());
UpdateCustomPageClickzoneVisibility();
+ ClearSelectedIndex();
}
void StartPageView::OnHide() {
@@ -166,6 +167,48 @@ void StartPageView::Layout() {
tiles_container_->SetBoundsRect(bounds);
}
+bool StartPageView::OnKeyPressed(const ui::KeyEvent& event) {
+ if (selected_index() >= 0 &&
+ tiles_container_->child_at(selected_index())->OnKeyPressed(event))
+ return true;
+
+ int dir = 0;
+ switch (event.key_code()) {
+ case ui::VKEY_LEFT:
+ dir = -1;
+ break;
+ case ui::VKEY_RIGHT:
+ dir = 1;
+ break;
+ case ui::VKEY_DOWN:
+ // Down selects the first tile if nothing is selected.
+ if (!IsValidSelectionIndex(selected_index()))
+ dir = 1;
+ break;
+ case ui::VKEY_TAB:
+ dir = event.IsShiftDown() ? -1 : 1;
+ break;
+ default:
+ break;
+ }
+
+ if (dir == 0)
+ return false;
+
+ if (!IsValidSelectionIndex(selected_index())) {
+ SetSelectedIndex(dir == -1 ? num_results() - 1 : 0);
+ return true;
+ }
+
+ int selection_index = selected_index() + dir;
+ if (IsValidSelectionIndex(selection_index)) {
+ SetSelectedIndex(selection_index);
+ return true;
+ }
+
+ return false;
+}
+
void StartPageView::OnContainerSelected(bool from_bottom) {
}
@@ -204,10 +247,22 @@ int StartPageView::Update() {
tiles_container_->Layout();
Layout();
- return display_results.size();
+ // Add 1 to the results size to account for the all apps button.
+ return display_results.size() + 1;
}
void StartPageView::UpdateSelectedIndex(int old_selected, int new_selected) {
+ if (old_selected >= 0) {
+ tiles_container_->child_at(old_selected)->set_background(nullptr);
+ tiles_container_->child_at(old_selected)->SchedulePaint();
+ }
+
+ if (new_selected >= 0) {
+ tiles_container_->child_at(new_selected)
+ ->set_background(
+ views::Background::CreateSolidBackground(kSelectedColor));
+ tiles_container_->child_at(new_selected)->SchedulePaint();
+ }
}
} // namespace app_list
« no previous file with comments | « ui/app_list/views/start_page_view.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698