| // 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 <vector> |
| |
| #include "examples/recipes/window_manager/window_manager.h" |
| #include "mojo/application/application_runner_chromium.h" |
| #include "mojo/public/c/system/main.h" |
| #include "mojo/public/cpp/application/application_delegate.h" |
| #include "mojo/public/cpp/application/application_impl.h" |
| #include "mojo/public/cpp/application/service_provider_impl.h" |
| #include "mojo/services/input_events/public/interfaces/input_events.mojom.h" |
| #include "mojo/services/view_manager/public/cpp/view_manager.h" |
| #include "mojo/services/view_manager/public/cpp/view_manager_delegate.h" |
| #include "services/window_manager/basic_focus_rules.h" |
| #include "services/window_manager/window_manager_app.h" |
| #include "services/window_manager/window_manager_delegate.h" |
| |
| namespace recipes { |
| namespace window_manager { |
| |
| class Main : public mojo::ApplicationDelegate, |
| public mojo::ViewManagerDelegate, |
| public ::window_manager::WindowManagerDelegate { |
| public: |
| Main() |
| : window_manager_app_( |
| new ::window_manager::WindowManagerApp(this, this)) {} |
| ~Main() override {} |
| |
| private: |
| // Overridden from mojo::ApplicationDelegate: |
| void Initialize(mojo::ApplicationImpl* impl) override { |
| window_manager_app_->Initialize(impl); |
| |
| for (size_t i = 1; i < impl->args().size(); ++i) { |
| window_manager_app_->Embed(impl->args()[i], nullptr, nullptr); |
| } |
| } |
| bool ConfigureIncomingConnection( |
| mojo::ApplicationConnection* connection) override { |
| window_manager_app_->ConfigureIncomingConnection(connection); |
| return true; |
| } |
| |
| // Overridden from mojo::ViewManagerDelegate: |
| void OnEmbed(mojo::View* root, |
| mojo::InterfaceRequest<mojo::ServiceProvider> services, |
| mojo::ServiceProviderPtr exposed_services) override { |
| window_manager_.reset(new WindowManager(root)); |
| |
| window_manager_app_->InitFocus( |
| make_scoped_ptr(new ::window_manager::BasicFocusRules(root))); |
| } |
| void OnViewManagerDisconnected(mojo::ViewManager* view_manager) override { |
| // TODO(sky): quit here? |
| } |
| |
| // Overridden from ::window_manager::WindowManagerDelegate: |
| void Embed(const mojo::String& url, |
| mojo::InterfaceRequest<mojo::ServiceProvider> services, |
| mojo::ServiceProviderPtr exposed_services) override { |
| DCHECK(window_manager_.get()); |
| mojo::View* view = window_manager_->Create(); |
| view->Embed(url, services.Pass(), exposed_services.Pass()); |
| } |
| |
| scoped_ptr<::window_manager::WindowManagerApp> window_manager_app_; |
| scoped_ptr<WindowManager> window_manager_; |
| |
| DISALLOW_COPY_AND_ASSIGN(Main); |
| }; |
| |
| } // window_manager |
| } // recipes |
| |
| MojoResult MojoMain(MojoHandle shell_handle) { |
| mojo::ApplicationRunnerChromium runner(new recipes::window_manager::Main); |
| return runner.Run(shell_handle); |
| } |