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

Unified Diff: ash/mus/frame/move_event_handler.cc

Issue 2099513003: mus: Use the new drag API to implement tab dragging in chrome. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@dragging-part-1
Patch Set: Integrate win compile fix Created 4 years, 6 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: 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) {

Powered by Google App Engine
This is Rietveld 408576698