Chromium Code Reviews| Index: components/mus/example/wm/window_manager_impl.cc |
| diff --git a/components/mus/example/wm/window_manager_impl.cc b/components/mus/example/wm/window_manager_impl.cc |
| index bedbbb38b9e5a76c47a3abc7b0f94f609806ee25..68915e2eebfa27ea61144ddc2498e5b8d3835b4e 100644 |
| --- a/components/mus/example/wm/window_manager_impl.cc |
| +++ b/components/mus/example/wm/window_manager_impl.cc |
| @@ -5,17 +5,37 @@ |
| #include "components/mus/example/wm/window_manager_impl.h" |
| #include "components/mus/example/wm/container.h" |
| +#include "components/mus/example/wm/move_loop.h" |
| #include "components/mus/example/wm/window_manager_application.h" |
| #include "components/mus/public/cpp/property_type_converters.h" |
| #include "components/mus/public/cpp/types.h" |
| #include "components/mus/public/cpp/window.h" |
| #include "components/mus/public/cpp/window_property.h" |
| #include "components/mus/public/cpp/window_tree_connection.h" |
| +#include "ui/mojo/events/input_events.mojom.h" |
| + |
| +namespace { |
| + |
| +bool IsPointerEvent(const mojo::Event& event) { |
| + return event.action == mojo::EVENT_TYPE_POINTER_CANCEL || |
| + event.action == mojo::EVENT_TYPE_POINTER_DOWN || |
| + event.action == mojo::EVENT_TYPE_POINTER_MOVE || |
| + event.action == mojo::EVENT_TYPE_POINTER_UP; |
| +} |
| + |
| +} // namespace |
| WindowManagerImpl::WindowManagerImpl(WindowManagerApplication* state) |
| : state_(state) {} |
| -WindowManagerImpl::~WindowManagerImpl() {} |
| +WindowManagerImpl::~WindowManagerImpl() { |
| + mus::Window* parent = state_->GetWindowForContainer(Container::USER_WINDOWS); |
| + if (!parent) |
| + return; |
| + |
| + for (mus::Window* child : parent->children()) |
| + child->RemoveObserver(this); |
| +} |
| void WindowManagerImpl::OpenWindow(mus::mojom::WindowTreeClientPtr client) { |
| mus::Window* root = state_->root(); |
| @@ -34,6 +54,7 @@ void WindowManagerImpl::OpenWindow(mus::mojom::WindowTreeClientPtr client) { |
| state_->GetWindowForContainer(Container::USER_WINDOWS) |
| ->AddChild(child_window); |
| child_window->Embed(client.Pass()); |
| + child_window->AddObserver(this); |
|
Ben Goodger (Google)
2015/10/28 16:03:16
can be changed later (since it'll likely conflict
sky
2015/10/28 16:17:56
I think we need a windowtype enum that indicates t
|
| state_->IncrementWindowCount(); |
| } |
| @@ -81,3 +102,18 @@ void WindowManagerImpl::GetDisplays(const GetDisplaysCallback& callback) { |
| state_->root()->viewport_metrics().device_pixel_ratio; |
| callback.Run(displays.Pass()); |
| } |
| + |
| +void WindowManagerImpl::OnWindowDestroyed(mus::Window* window) { |
| + window->RemoveObserver(this); |
| +} |
| + |
| +void WindowManagerImpl::OnWindowInputEvent(mus::Window* window, |
| + const mojo::EventPtr& event) { |
| + if (move_loop_ && IsPointerEvent(*event)) { |
| + if (move_loop_->Move(*event) == MoveLoop::DONE) |
| + move_loop_.reset(); |
| + return; |
| + } |
| + if (!move_loop_ && event->action == mojo::EVENT_TYPE_POINTER_DOWN) |
| + move_loop_ = MoveLoop::Create(window, *event); |
| +} |