- add sources.
[platform/framework/web/crosswalk.git] / src / ash / shelf / shelf_navigator.cc
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ash/shelf/shelf_navigator.h"
6
7 #include "ash/launcher/launcher_model.h"
8
9 namespace ash {
10
11 namespace {
12
13 // Returns true if accelerator processing should skip the launcher item with
14 // the specified type.
15 bool ShouldSkip(ash::LauncherItemType type) {
16   return type == ash::TYPE_APP_LIST ||
17          type == ash::TYPE_BROWSER_SHORTCUT ||
18          type == ash::TYPE_APP_SHORTCUT ||
19          type == ash::TYPE_WINDOWED_APP;
20 }
21
22 }  // namespace
23
24 int GetNextActivatedItemIndex(const LauncherModel& model,
25                               CycleDirection direction) {
26   const ash::LauncherItems& items = model.items();
27   int item_count = model.item_count();
28   int current_index = -1;
29   int first_running = -1;
30
31   for (int i = 0; i < item_count; ++i) {
32     const ash::LauncherItem& item = items[i];
33     if (ShouldSkip(item.type))
34       continue;
35
36     if (item.status == ash::STATUS_RUNNING && first_running < 0)
37       first_running = i;
38
39     if (item.status == ash::STATUS_ACTIVE) {
40       current_index = i;
41       break;
42     }
43   }
44
45   // If nothing is active, try to active the first running item.
46   if (current_index < 0) {
47     if (first_running >= 0)
48       return first_running;
49     else
50       return -1;
51   }
52
53   int step = (direction == CYCLE_FORWARD) ? 1 : -1;
54
55   // Find the next item and activate it.
56   for (int i = (current_index + step + item_count) % item_count;
57        i != current_index; i = (i + step + item_count) % item_count) {
58     const ash::LauncherItem& item = items[i];
59     if (ShouldSkip(item.type))
60       continue;
61
62     // Skip already active item.
63     if (item.status == ash::STATUS_ACTIVE)
64       continue;
65
66     return i;
67   }
68
69   return -1;
70 }
71
72 }  // namespace ash