| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ash/wm/ash_focus_rules.h" | 5 #include "ash/wm/ash_focus_rules.h" |
| 6 | 6 |
| 7 #include "ash/shell.h" | 7 #include "ash/shell.h" |
| 8 #include "ash/shell_window_ids.h" | 8 #include "ash/shell_window_ids.h" |
| 9 #include "ash/wm/window_state.h" | 9 #include "ash/wm/window_state.h" |
| 10 #include "ui/aura/window.h" | 10 #include "ui/aura/window.h" |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 98 return true; | 98 return true; |
| 99 } | 99 } |
| 100 | 100 |
| 101 aura::Window* AshFocusRules::GetNextActivatableWindow( | 101 aura::Window* AshFocusRules::GetNextActivatableWindow( |
| 102 aura::Window* ignore) const { | 102 aura::Window* ignore) const { |
| 103 DCHECK(ignore); | 103 DCHECK(ignore); |
| 104 | 104 |
| 105 int starting_container_index = 0; | 105 int starting_container_index = 0; |
| 106 // If the container of the window losing focus is in the list, start from that | 106 // If the container of the window losing focus is in the list, start from that |
| 107 // container. | 107 // container. |
| 108 aura::RootWindow* root = ignore->GetRootWindow(); | 108 aura::Window* root = ignore->GetRootWindow(); |
| 109 if (!root) | 109 if (!root) |
| 110 root = Shell::GetTargetRootWindow(); | 110 root = Shell::GetTargetRootWindow(); |
| 111 int container_count = static_cast<int>(arraysize(kWindowContainerIds)); | 111 int container_count = static_cast<int>(arraysize(kWindowContainerIds)); |
| 112 for (int i = 0; ignore && i < container_count; i++) { | 112 for (int i = 0; ignore && i < container_count; i++) { |
| 113 aura::Window* container = Shell::GetContainer(root, kWindowContainerIds[i]); | 113 aura::Window* container = Shell::GetContainer(root, kWindowContainerIds[i]); |
| 114 if (container && container->Contains(ignore)) { | 114 if (container && container->Contains(ignore)) { |
| 115 starting_container_index = i; | 115 starting_container_index = i; |
| 116 break; | 116 break; |
| 117 } | 117 } |
| 118 } | 118 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 130 return window; | 130 return window; |
| 131 } | 131 } |
| 132 | 132 |
| 133 //////////////////////////////////////////////////////////////////////////////// | 133 //////////////////////////////////////////////////////////////////////////////// |
| 134 // AshFocusRules, private: | 134 // AshFocusRules, private: |
| 135 | 135 |
| 136 aura::Window* AshFocusRules::GetTopmostWindowToActivateForContainerIndex( | 136 aura::Window* AshFocusRules::GetTopmostWindowToActivateForContainerIndex( |
| 137 int index, | 137 int index, |
| 138 aura::Window* ignore) const { | 138 aura::Window* ignore) const { |
| 139 aura::Window* window = NULL; | 139 aura::Window* window = NULL; |
| 140 aura::RootWindow* root = ignore ? ignore->GetRootWindow() : NULL; | 140 aura::Window* root = ignore ? ignore->GetRootWindow() : NULL; |
| 141 aura::Window::Windows containers = Shell::GetContainersFromAllRootWindows( | 141 aura::Window::Windows containers = Shell::GetContainersFromAllRootWindows( |
| 142 kWindowContainerIds[index], root); | 142 kWindowContainerIds[index], root); |
| 143 for (aura::Window::Windows::const_iterator iter = containers.begin(); | 143 for (aura::Window::Windows::const_iterator iter = containers.begin(); |
| 144 iter != containers.end() && !window; ++iter) { | 144 iter != containers.end() && !window; ++iter) { |
| 145 window = GetTopmostWindowToActivateInContainer((*iter), ignore); | 145 window = GetTopmostWindowToActivateInContainer((*iter), ignore); |
| 146 } | 146 } |
| 147 return window; | 147 return window; |
| 148 } | 148 } |
| 149 | 149 |
| 150 aura::Window* AshFocusRules::GetTopmostWindowToActivateInContainer( | 150 aura::Window* AshFocusRules::GetTopmostWindowToActivateInContainer( |
| 151 aura::Window* container, | 151 aura::Window* container, |
| 152 aura::Window* ignore) const { | 152 aura::Window* ignore) const { |
| 153 for (aura::Window::Windows::const_reverse_iterator i = | 153 for (aura::Window::Windows::const_reverse_iterator i = |
| 154 container->children().rbegin(); | 154 container->children().rbegin(); |
| 155 i != container->children().rend(); | 155 i != container->children().rend(); |
| 156 ++i) { | 156 ++i) { |
| 157 WindowState* window_state = GetWindowState(*i); | 157 WindowState* window_state = GetWindowState(*i); |
| 158 if (*i != ignore && | 158 if (*i != ignore && |
| 159 window_state->CanActivate() && | 159 window_state->CanActivate() && |
| 160 !window_state->IsMinimized()) | 160 !window_state->IsMinimized()) |
| 161 return *i; | 161 return *i; |
| 162 } | 162 } |
| 163 return NULL; | 163 return NULL; |
| 164 } | 164 } |
| 165 | 165 |
| 166 } // namespace wm | 166 } // namespace wm |
| 167 } // namespace ash | 167 } // namespace ash |
| OLD | NEW |