Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(481)

Unified Diff: mojo/services/window_manager/window_manager_app.cc

Issue 396563002: Window Manager service.. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mojo/services/window_manager/window_manager_app.cc
diff --git a/mojo/services/window_manager/window_manager_app.cc b/mojo/services/window_manager/window_manager_app.cc
new file mode 100644
index 0000000000000000000000000000000000000000..dc60fdd849b90ad63de9268e2780b75a65a2799e
--- /dev/null
+++ b/mojo/services/window_manager/window_manager_app.cc
@@ -0,0 +1,118 @@
+// 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 "mojo/services/window_manager/window_manager_app.h"
+
+#include "base/message_loop/message_loop.h"
+#include "mojo/aura/aura_init.h"
+#include "mojo/aura/window_tree_host_mojo.h"
+#include "mojo/public/cpp/application/application_connection.h"
+#include "mojo/services/public/cpp/view_manager/node.h"
+#include "mojo/services/public/cpp/view_manager/view_manager.h"
+#include "mojo/services/window_manager/window_manager_service_impl.h"
+#include "ui/wm/core/capture_controller.h"
+
+namespace mojo {
+
+////////////////////////////////////////////////////////////////////////////////
+// WindowManagerApp, public:
+
+WindowManagerApp::WindowManagerApp() : view_manager_(NULL), root_(NULL) {}
+WindowManagerApp::~WindowManagerApp() {}
+
+void WindowManagerApp::AddConnection(WindowManagerServiceImpl* connection) {
+ DCHECK(connections_.find(connection) == connections_.end());
+ connections_.insert(connection);
+}
+
+void WindowManagerApp::RemoveConnection(WindowManagerServiceImpl* connection) {
+ DCHECK(connections_.find(connection) != connections_.end());
+ connections_.erase(connection);
+}
+
+view_manager::Id WindowManagerApp::OpenWindow() {
+ view_manager::Node* node = view_manager::Node::Create(view_manager_);
+ root_->AddChild(node);
+ return node->id();
+}
+
+void WindowManagerApp::SetCapture(view_manager::Id node) {
+ capture_client_->capture_client()->SetCapture(GetWindowForNodeId(node));
+ // TODO(beng): notify connected clients that capture has changed, probably
+ // by implementing some capture-client observer.
+}
+
+bool WindowManagerApp::IsReady() const {
+ return view_manager_ && root_;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// WindowManagerApp, ApplicationDelegate implementation:
+
+void WindowManagerApp::Initialize(ApplicationImpl* impl) {
+ aura_init_.reset(new AuraInit);
+}
+
+bool WindowManagerApp::ConfigureIncomingConnection(
+ ApplicationConnection* connection) {
+ connection->AddService<WindowManagerServiceImpl>(this);
+ view_manager::ViewManager::ConfigureIncomingConnection(connection, this);
+ return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// WindowManagerApp, view_manager::ViewManagerDelegate implementation:
+
+void WindowManagerApp::OnRootAdded(view_manager::ViewManager* view_manager,
+ view_manager::Node* root) {
+ DCHECK(!view_manager_ && !root_);
+ view_manager_ = view_manager;
+ root_ = root;
+
+ window_tree_host_.reset(new WindowTreeHostMojo(root_, this));
+
+ capture_client_.reset(
+ new wm::ScopedCaptureClient(window_tree_host_->window()));
+
+ // TODO(beng): Create the universe.
+
+ for (Connections::const_iterator it = connections_.begin();
+ it != connections_.end(); ++it) {
+ (*it)->NotifyReady();
+ }
+}
+
+void WindowManagerApp::OnViewManagerDisconnected(
+ view_manager::ViewManager* view_manager) {
+ DCHECK_EQ(view_manager_, view_manager);
+ view_manager_ = NULL;
+ base::MessageLoop::current()->Quit();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// WindowManagerApp, WindowTreeHostMojoDelegate implementation:
+
+void WindowManagerApp::CompositorContentsChanged(const SkBitmap& bitmap) {
+ // We draw nothing.
+ NOTREACHED();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// WindowManagerApp, private:
+
+aura::Window* WindowManagerApp::GetWindowForNodeId(
+ view_manager::Id node) const {
+ NOTIMPLEMENTED();
+ return NULL;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// ApplicationDelegate, public:
+
+// static
+ApplicationDelegate* ApplicationDelegate::Create() {
+ return new WindowManagerApp;
+}
+
+} // namespace mojo
« no previous file with comments | « mojo/services/window_manager/window_manager_app.h ('k') | mojo/services/window_manager/window_manager_service_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698