blob: fb193d8b4ff9b6234f55f21f7e4a0b23d71bece7 [file] [log] [blame]
// Copyright 2014 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 "sky/tools/debugger/focus_rules.h"
namespace sky {
FocusRules::FocusRules(mojo::WindowManagerApp* window_manager_app,
mojo::View* content)
: content_(content),
window_manager_app_(window_manager_app) {
}
FocusRules::~FocusRules() {
}
bool FocusRules::IsToplevelWindow(aura::Window* window) const {
return mojo::WindowManagerApp::GetViewForWindow(window)->parent() == content_;
}
bool FocusRules::CanActivateWindow(aura::Window* window) const {
return mojo::WindowManagerApp::GetViewForWindow(window)->parent() == content_;
}
bool FocusRules::CanFocusWindow(aura::Window* window) const {
return true;
}
aura::Window* FocusRules::GetToplevelWindow(aura::Window* window) const {
mojo::View* view = mojo::WindowManagerApp::GetViewForWindow(window);
while (view->parent() != content_) {
view = view->parent();
if (!view)
return NULL;
}
return window_manager_app_->GetWindowForViewId(view->id());
}
aura::Window* FocusRules::GetActivatableWindow(aura::Window* window) const {
return GetToplevelWindow(window);
}
aura::Window* FocusRules::GetFocusableWindow(aura::Window* window) const {
return window;
}
aura::Window* FocusRules::GetNextActivatableWindow(aura::Window* ignore) const {
aura::Window* activatable = GetActivatableWindow(ignore);
const aura::Window::Windows& children = activatable->parent()->children();
for (aura::Window::Windows::const_reverse_iterator it = children.rbegin();
it != children.rend(); ++it) {
if (*it != ignore)
return *it;
}
return NULL;
}
} // namespace sky