Chromium Code Reviews| Index: ash/mus/frame/move_event_handler.cc |
| diff --git a/ash/mus/frame/move_event_handler.cc b/ash/mus/frame/move_event_handler.cc |
| index b903dce5d7465a89418e7ed88a6cf6e7d0ca7f4b..d186cdc0a00847a38bfcee8ca740b459847d272a 100644 |
| --- a/ash/mus/frame/move_event_handler.cc |
| +++ b/ash/mus/frame/move_event_handler.cc |
| @@ -5,6 +5,7 @@ |
| #include "ash/mus/frame/move_event_handler.h" |
| #include "ash/mus/bridge/wm_window_mus.h" |
| +#include "base/lazy_instance.h" |
| #include "components/mus/public/cpp/window.h" |
| #include "components/mus/public/cpp/window_manager_delegate.h" |
| #include "components/mus/public/interfaces/cursor.mojom.h" |
| @@ -16,6 +17,9 @@ namespace ash { |
| namespace mus { |
| namespace { |
| +base::LazyInstance<std::map<WmWindow*, MoveEventHandler*>> g_live_handlers = |
|
sky
2016/06/24 19:42:02
Use a local property on the window to track the Mo
|
| + LAZY_INSTANCE_INITIALIZER; |
| + |
| ::mus::mojom::Cursor CursorForWindowComponent(int window_component) { |
| switch (window_component) { |
| case HTBOTTOM: |
| @@ -39,6 +43,12 @@ namespace { |
| } |
| } |
| +void OnMoveLoopCompleted(const base::Callback<void(bool success)>& end_closure, |
| + wm::WmToplevelWindowEventHandler::DragResult result) { |
| + end_closure.Run(result == |
| + wm::WmToplevelWindowEventHandler::DragResult::SUCCESS); |
| +} |
| + |
| } // namespace |
| MoveEventHandler::MoveEventHandler( |
| @@ -51,12 +61,37 @@ MoveEventHandler::MoveEventHandler( |
| toplevel_window_event_handler_(wm_window_->GetShell()) { |
| root_window_->AddObserver(this); |
| root_window_->AddPreTargetHandler(this); |
| + |
| + DCHECK(g_live_handlers.Get().find(wm_window_) == g_live_handlers.Get().end()); |
| + g_live_handlers.Get()[wm_window_] = this; |
| } |
| MoveEventHandler::~MoveEventHandler() { |
| Detach(); |
| } |
| +// static |
| +MoveEventHandler* MoveEventHandler::GetForWindow(WmWindow* wm_window) { |
| + auto it = g_live_handlers.Get().find(wm_window); |
| + if (it != g_live_handlers.Get().end()) |
| + return it->second; |
| + return nullptr; |
| +} |
| + |
| +void MoveEventHandler::AttemptToStartDrag( |
| + const gfx::Point& point_in_parent, |
| + int window_component, |
| + const base::Callback<void(bool success)>& end_closure) { |
| + toplevel_window_event_handler_.AttemptToStartDrag( |
| + wm_window_, point_in_parent, window_component, |
| + aura::client::WINDOW_MOVE_SOURCE_MOUSE, |
|
sky
2016/06/24 19:42:02
Might the source be touch?
|
| + base::Bind(&OnMoveLoopCompleted, end_closure)); |
| +} |
| + |
| +void MoveEventHandler::RevertDrag() { |
| + toplevel_window_event_handler_.RevertDrag(); |
| +} |
| + |
| void MoveEventHandler::Detach() { |
| if (!root_window_) |
| return; |
| @@ -64,6 +99,8 @@ void MoveEventHandler::Detach() { |
| root_window_->RemoveObserver(this); |
| root_window_->RemovePreTargetHandler(this); |
| root_window_ = nullptr; |
| + |
| + g_live_handlers.Get().erase(wm_window_); |
| } |
| void MoveEventHandler::OnMouseEvent(ui::MouseEvent* event) { |