summaryrefslogtreecommitdiffstats
path: root/chromium/ash/wm/ash_focus_rules.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/ash/wm/ash_focus_rules.cc')
-rw-r--r--chromium/ash/wm/ash_focus_rules.cc168
1 files changed, 0 insertions, 168 deletions
diff --git a/chromium/ash/wm/ash_focus_rules.cc b/chromium/ash/wm/ash_focus_rules.cc
deleted file mode 100644
index 453436df730..00000000000
--- a/chromium/ash/wm/ash_focus_rules.cc
+++ /dev/null
@@ -1,168 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ash/wm/ash_focus_rules.h"
-
-#include "ash/shell.h"
-#include "ash/shell_window_ids.h"
-#include "ash/wm/window_state.h"
-#include "ui/aura/window.h"
-
-namespace ash {
-namespace wm {
-namespace {
-
-// These are the list of container ids of containers which may contain windows
-// that need to be activated in the order that they should be activated.
-const int kWindowContainerIds[] = {
- internal::kShellWindowId_OverlayContainer,
- internal::kShellWindowId_LockSystemModalContainer,
- internal::kShellWindowId_SettingBubbleContainer,
- internal::kShellWindowId_LockScreenContainer,
- internal::kShellWindowId_SystemModalContainer,
- internal::kShellWindowId_AlwaysOnTopContainer,
- internal::kShellWindowId_AppListContainer,
- internal::kShellWindowId_DefaultContainer,
-
- // Docked, panel, launcher and status are intentionally checked after other
- // containers even though these layers are higher. The user expects their
- // windows to be focused before these elements.
- internal::kShellWindowId_DockedContainer,
- internal::kShellWindowId_PanelContainer,
- internal::kShellWindowId_ShelfContainer,
- internal::kShellWindowId_StatusContainer,
-};
-
-bool BelongsToContainerWithEqualOrGreaterId(const aura::Window* window,
- int container_id) {
- for (; window; window = window->parent()) {
- if (window->id() >= container_id)
- return true;
- }
- return false;
-}
-
-} // namespace
-
-////////////////////////////////////////////////////////////////////////////////
-// AshFocusRules, public:
-
-AshFocusRules::AshFocusRules() {
-}
-
-AshFocusRules::~AshFocusRules() {
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// AshFocusRules, views::corewm::FocusRules:
-
-bool AshFocusRules::SupportsChildActivation(aura::Window* window) const {
- if (window->id() == internal::kShellWindowId_DefaultContainer)
- return true;
-
- for (size_t i = 0; i < arraysize(kWindowContainerIds); i++) {
- if (window->id() == kWindowContainerIds[i])
- return true;
- }
- return false;
-}
-
-bool AshFocusRules::IsWindowConsideredVisibleForActivation(
- aura::Window* window) const {
- if (BaseFocusRules::IsWindowConsideredVisibleForActivation(window))
- return true;
-
- // Minimized windows are hidden in their minimized state, but they can always
- // be activated.
- if (wm::GetWindowState(window)->IsMinimized())
- return true;
-
- return window->TargetVisibility() && (window->parent()->id() ==
- internal::kShellWindowId_DefaultContainer || window->parent()->id() ==
- internal::kShellWindowId_LockScreenContainer);
-}
-
-bool AshFocusRules::CanActivateWindow(aura::Window* window) const {
- // Clearing activation is always permissible.
- if (!window)
- return true;
-
- if (!BaseFocusRules::CanActivateWindow(window))
- return false;
-
- if (Shell::GetInstance()->IsSystemModalWindowOpen()) {
- return BelongsToContainerWithEqualOrGreaterId(
- window, internal::kShellWindowId_SystemModalContainer);
- }
-
- return true;
-}
-
-aura::Window* AshFocusRules::GetNextActivatableWindow(
- aura::Window* ignore) const {
- DCHECK(ignore);
-
- int starting_container_index = 0;
- // If the container of the window losing focus is in the list, start from that
- // container.
- aura::Window* root = ignore->GetRootWindow();
- if (!root)
- root = Shell::GetTargetRootWindow();
- int container_count = static_cast<int>(arraysize(kWindowContainerIds));
- for (int i = 0; ignore && i < container_count; i++) {
- aura::Window* container = Shell::GetContainer(root, kWindowContainerIds[i]);
- if (container && container->Contains(ignore)) {
- starting_container_index = i;
- break;
- }
- }
-
- // Look for windows to focus in |ignore|'s container. If none are found, we
- // look in all the containers in front of |ignore|'s container, then all
- // behind.
- aura::Window* window = NULL;
- for (int i = starting_container_index; !window && i < container_count; i++)
- window = GetTopmostWindowToActivateForContainerIndex(i, ignore);
- if (!window && starting_container_index > 0) {
- for (int i = starting_container_index - 1; !window && i >= 0; i--)
- window = GetTopmostWindowToActivateForContainerIndex(i, ignore);
- }
- return window;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// AshFocusRules, private:
-
-aura::Window* AshFocusRules::GetTopmostWindowToActivateForContainerIndex(
- int index,
- aura::Window* ignore) const {
- aura::Window* window = NULL;
- aura::Window* root = ignore ? ignore->GetRootWindow() : NULL;
- aura::Window::Windows containers = Shell::GetContainersFromAllRootWindows(
- kWindowContainerIds[index], root);
- for (aura::Window::Windows::const_iterator iter = containers.begin();
- iter != containers.end() && !window; ++iter) {
- window = GetTopmostWindowToActivateInContainer((*iter), ignore);
- }
- return window;
-}
-
-aura::Window* AshFocusRules::GetTopmostWindowToActivateInContainer(
- aura::Window* container,
- aura::Window* ignore) const {
- for (aura::Window::Windows::const_reverse_iterator i =
- container->children().rbegin();
- i != container->children().rend();
- ++i) {
- WindowState* window_state = GetWindowState(*i);
- if (*i != ignore &&
- window_state->CanActivate() &&
- !window_state->IsMinimized())
- return *i;
- }
- return NULL;
-}
-
-} // namespace wm
-} // namespace ash