| Index: mojo/examples/wm_flow/wm/wm.cc
|
| diff --git a/mojo/examples/wm_flow/wm/wm.cc b/mojo/examples/wm_flow/wm/wm.cc
|
| index bf4cafc7bafda143846822f1a6eaf2145650155b..f1f23e648e1561e14e8f618f39206df8085925a3 100644
|
| --- a/mojo/examples/wm_flow/wm/wm.cc
|
| +++ b/mojo/examples/wm_flow/wm/wm.cc
|
| @@ -2,6 +2,8 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +#include <vector>
|
| +
|
| #include "mojo/application/application_runner_chromium.h"
|
| #include "mojo/examples/wm_flow/wm/frame_controller.h"
|
| #include "mojo/public/c/system/main.h"
|
| @@ -15,9 +17,75 @@
|
| #include "mojo/services/public/interfaces/input_events/input_events.mojom.h"
|
| #include "mojo/services/window_manager/window_manager_app.h"
|
| #include "mojo/views/views_init.h"
|
| +#include "ui/aura/window.h"
|
| +#include "ui/wm/core/focus_rules.h"
|
| +#include "ui/wm/public/activation_client.h"
|
|
|
| namespace examples {
|
|
|
| +namespace {
|
| +
|
| +class WMFocusRules : public wm::FocusRules {
|
| + public:
|
| + WMFocusRules(mojo::WindowManagerApp* window_manager_app,
|
| + mojo::View* window_container)
|
| + : window_container_(window_container),
|
| + window_manager_app_(window_manager_app) {}
|
| + virtual ~WMFocusRules() {}
|
| +
|
| + private:
|
| + // Overridden from wm::FocusRules:
|
| + virtual bool IsToplevelWindow(aura::Window* window) const MOJO_OVERRIDE {
|
| + return mojo::WindowManagerApp::GetViewForWindow(window)->parent() ==
|
| + window_container_;
|
| + }
|
| + virtual bool CanActivateWindow(aura::Window* window) const MOJO_OVERRIDE {
|
| + return mojo::WindowManagerApp::GetViewForWindow(window)->parent() ==
|
| + window_container_;
|
| + }
|
| + virtual bool CanFocusWindow(aura::Window* window) const MOJO_OVERRIDE {
|
| + return true;
|
| + }
|
| + virtual aura::Window* GetToplevelWindow(
|
| + aura::Window* window) const MOJO_OVERRIDE {
|
| + mojo::View* view = mojo::WindowManagerApp::GetViewForWindow(window);
|
| + while (view->parent() != window_container_) {
|
| + view = view->parent();
|
| + // Unparented hierarchy, there is no "top level" window.
|
| + if (!view)
|
| + return NULL;
|
| + }
|
| +
|
| + return window_manager_app_->GetWindowForViewId(view->id());
|
| + }
|
| + virtual aura::Window* GetActivatableWindow(
|
| + aura::Window* window) const MOJO_OVERRIDE {
|
| + return GetToplevelWindow(window);
|
| + }
|
| + virtual aura::Window* GetFocusableWindow(
|
| + aura::Window* window) const MOJO_OVERRIDE {
|
| + return window;
|
| + }
|
| + virtual aura::Window* GetNextActivatableWindow(
|
| + aura::Window* ignore) const MOJO_OVERRIDE {
|
| + 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;
|
| + }
|
| +
|
| + mojo::View* window_container_;
|
| + mojo::WindowManagerApp* window_manager_app_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(WMFocusRules);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| class SimpleWM : public mojo::ApplicationDelegate,
|
| public mojo::ViewManagerDelegate,
|
| public mojo::WindowManagerDelegate,
|
| @@ -55,6 +123,8 @@ class SimpleWM : public mojo::ApplicationDelegate,
|
| window_container_->SetBounds(root_->bounds());
|
| root_->AddChild(window_container_);
|
|
|
| + window_manager_app_->InitFocus(new WMFocusRules(window_manager_app_.get(),
|
| + window_container_));
|
| }
|
| virtual void OnViewManagerDisconnected(
|
| mojo::ViewManager* view_manager) MOJO_OVERRIDE {
|
| @@ -105,7 +175,10 @@ class SimpleWM : public mojo::ApplicationDelegate,
|
| frame_view->SetBounds(gfx::Rect(next_window_origin_, gfx::Size(400, 400)));
|
| next_window_origin_.Offset(50, 50);
|
|
|
| - new FrameController(frame_view, app_view);
|
| + aura::client::ActivationClient* client = aura::client::GetActivationClient(
|
| + window_manager_app_->host()->window());
|
| + new FrameController(frame_view, app_view, client,
|
| + window_manager_app_.get());
|
| return frame_view;
|
| }
|
|
|
|
|