| Index: ui/app_list/views/search_result_tile_item_list_view.cc
|
| diff --git a/ui/app_list/views/search_result_tile_item_list_view.cc b/ui/app_list/views/search_result_tile_item_list_view.cc
|
| index 2a20840181d349d2428d4eca4d4608def4978200..e15e96f3f8c2c0b9717bf3d51ac571d2eb24e280 100644
|
| --- a/ui/app_list/views/search_result_tile_item_list_view.cc
|
| +++ b/ui/app_list/views/search_result_tile_item_list_view.cc
|
| @@ -9,6 +9,7 @@
|
| #include "ui/app_list/search_result.h"
|
| #include "ui/app_list/views/search_result_tile_item_view.h"
|
| #include "ui/views/background.h"
|
| +#include "ui/views/controls/textfield/textfield.h"
|
| #include "ui/views/layout/box_layout.h"
|
|
|
| namespace {
|
| @@ -21,7 +22,9 @@ const int kTileSpacing = 10;
|
|
|
| namespace app_list {
|
|
|
| -SearchResultTileItemListView::SearchResultTileItemListView() {
|
| +SearchResultTileItemListView::SearchResultTileItemListView(
|
| + views::Textfield* search_box)
|
| + : search_box_(search_box) {
|
| SetLayoutManager(
|
| new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, kTileSpacing));
|
| for (size_t i = 0; i < kNumSearchResultTiles; ++i) {
|
| @@ -72,17 +75,38 @@ bool SearchResultTileItemListView::OnKeyPressed(const ui::KeyEvent& event) {
|
| if (selected_index() >= 0 && child_at(selected_index())->OnKeyPressed(event))
|
| return true;
|
|
|
| - int selection_index = -1;
|
| + int dir = 0;
|
| + bool cursor_at_end_of_searchbox =
|
| + search_box_->GetCursorPosition() == search_box_->text().length();
|
| switch (event.key_code()) {
|
| case ui::VKEY_TAB:
|
| if (event.IsShiftDown())
|
| - selection_index = selected_index() - 1;
|
| + dir = -1;
|
| else
|
| - selection_index = selected_index() + 1;
|
| + dir = 1;
|
| + break;
|
| + case ui::VKEY_LEFT:
|
| + // The left key will not capture the key event when the selection is at
|
| + // the beginning of the list. This means that the text cursor in the
|
| + // search box will be allowed to handle the keypress. This will also
|
| + // ignore the keypress if the user has clicked somewhere in the middle of
|
| + // the searchbox.
|
| + if (cursor_at_end_of_searchbox)
|
| + dir = -1;
|
| + break;
|
| + case ui::VKEY_RIGHT:
|
| + // Only move right if the search box text cursor is at the end of the
|
| + // text.
|
| + if (cursor_at_end_of_searchbox)
|
| + dir = 1;
|
| break;
|
| default:
|
| break;
|
| }
|
| + if (dir == 0)
|
| + return false;
|
| +
|
| + int selection_index = selected_index() + dir;
|
| if (IsValidSelectionIndex(selection_index)) {
|
| SetSelectedIndex(selection_index);
|
| return true;
|
|
|