summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ash/drag_drop/drag_drop_controller.cc2
-rw-r--r--ash/drag_drop/drag_drop_tracker.cc9
-rw-r--r--ash/drag_drop/drag_drop_tracker.h11
-rw-r--r--ash/drag_drop/drag_drop_tracker_unittest.cc60
4 files changed, 42 insertions, 40 deletions
diff --git a/ash/drag_drop/drag_drop_controller.cc b/ash/drag_drop/drag_drop_controller.cc
index acecc81..01788dd 100644
--- a/ash/drag_drop/drag_drop_controller.cc
+++ b/ash/drag_drop/drag_drop_controller.cc
@@ -62,7 +62,7 @@ int DragDropController::StartDragAndDrop(const ui::OSExchangeData& data,
int operation) {
DCHECK(!IsDragDropInProgress());
- drag_drop_tracker_.reset(new DragDropTracker(root_window));
+ drag_drop_tracker_.reset(new DragDropTracker);
drag_data_ = &data;
drag_operation_ = operation;
diff --git a/ash/drag_drop/drag_drop_tracker.cc b/ash/drag_drop/drag_drop_tracker.cc
index 7fa0537..f0bb206 100644
--- a/ash/drag_drop/drag_drop_tracker.cc
+++ b/ash/drag_drop/drag_drop_tracker.cc
@@ -14,14 +14,11 @@
namespace {
// Creates a window for capturing drag events.
-aura::Window* CreateCaptureWindow(aura::RootWindow* root_window) {
+aura::Window* CreateCaptureWindow() {
aura::Window* window = new aura::Window(NULL);
window->SetType(aura::client::WINDOW_TYPE_NORMAL);
window->Init(ui::LAYER_NOT_DRAWN);
window->SetParent(NULL);
- window->SetBoundsInScreen(gfx::Rect(root_window->GetBoundsInScreen().origin(),
- gfx::Size()),
- gfx::Screen::GetDisplayNearestWindow(root_window));
window->Show();
return window;
}
@@ -31,8 +28,8 @@ aura::Window* CreateCaptureWindow(aura::RootWindow* root_window) {
namespace ash {
namespace internal {
-DragDropTracker::DragDropTracker(aura::RootWindow* root_window)
- : capture_window_(CreateCaptureWindow(root_window)) {
+DragDropTracker::DragDropTracker()
+ : capture_window_(CreateCaptureWindow()) {
capture_window_->SetCapture();
}
diff --git a/ash/drag_drop/drag_drop_tracker.h b/ash/drag_drop/drag_drop_tracker.h
index 220cc12..56b6309 100644
--- a/ash/drag_drop/drag_drop_tracker.h
+++ b/ash/drag_drop/drag_drop_tracker.h
@@ -11,7 +11,6 @@
#include "ui/base/events/event.h"
namespace aura {
-class RootWindow;
class Window;
}
@@ -25,15 +24,15 @@ namespace internal {
// is supported for now.
class ASH_EXPORT DragDropTracker {
public:
- explicit DragDropTracker(aura::RootWindow* root_window);
+ DragDropTracker();
~DragDropTracker();
- // Gets the target located at |event| in the coordinates of the root window
- // given to the constructor.
+ // Gets the target located at |event| in the coordinates of the active root
+ // window.
aura::Window* GetTarget(const ui::LocatedEvent& event);
- // Converts the locations of |event| in the coordinates of the root window
- // given to the constructor to the ones in |target|'s coordinates.
+ // Converts the locations of |event| in the coordinates of the active root
+ // window to the ones in |target|'s coordinates.
// Caller takes ownership of the returned object.
ui::MouseEvent* ConvertMouseEvent(aura::Window* target,
const ui::MouseEvent& event);
diff --git a/ash/drag_drop/drag_drop_tracker_unittest.cc b/ash/drag_drop/drag_drop_tracker_unittest.cc
index 4175c6b..dfefe82 100644
--- a/ash/drag_drop/drag_drop_tracker_unittest.cc
+++ b/ash/drag_drop/drag_drop_tracker_unittest.cc
@@ -32,10 +32,9 @@ class DragDropTrackerTest : public test::AshTestBase {
parent);
}
- static aura::Window* GetTarget(aura::RootWindow* root_window,
- const gfx::Point& location) {
+ static aura::Window* GetTarget(const gfx::Point& location) {
scoped_ptr<internal::DragDropTracker> tracker(
- new internal::DragDropTracker(root_window));
+ new internal::DragDropTracker);
ui::MouseEvent e(ui::ET_MOUSE_DRAGGED,
location,
location,
@@ -44,11 +43,10 @@ class DragDropTrackerTest : public test::AshTestBase {
return target;
}
- static ui::MouseEvent* ConvertMouseEvent(aura::RootWindow* root_window,
- aura::Window* target,
+ static ui::MouseEvent* ConvertMouseEvent(aura::Window* target,
const ui::MouseEvent& event) {
scoped_ptr<internal::DragDropTracker> tracker(
- new internal::DragDropTracker(root_window));
+ new internal::DragDropTracker);
ui::MouseEvent* converted = tracker->ConvertMouseEvent(target, event);
return converted;
}
@@ -78,41 +76,47 @@ TEST_F(DragDropTrackerTest, MAYBE_GetTarget) {
CreateTestWindow(gfx::Rect(100, 100, 100, 100), NULL));
window1->Show();
- // Start tracking from the RootWindow0 and check the point on RootWindow0 that
+ // Make RootWindow0 active so that capture window is parented to it.
+ Shell::GetInstance()->set_active_root_window(root_windows[0]);
+
+ // Start tracking from the RootWindow1 and check the point on RootWindow0 that
// |window0| covers.
- EXPECT_EQ(window0.get(), GetTarget(root_windows[0], gfx::Point(50, 50)));
+ EXPECT_EQ(window0.get(), GetTarget(gfx::Point(50, 50)));
// Start tracking from the RootWindow0 and check the point on RootWindow0 that
// neither |window0| nor |window1| covers.
- EXPECT_NE(window0.get(), GetTarget(root_windows[0], gfx::Point(150, 150)));
- EXPECT_NE(window1.get(), GetTarget(root_windows[0], gfx::Point(150, 150)));
+ EXPECT_NE(window0.get(), GetTarget(gfx::Point(150, 150)));
+ EXPECT_NE(window1.get(), GetTarget(gfx::Point(150, 150)));
// Start tracking from the RootWindow0 and check the point on RootWindow1 that
// |window1| covers.
- EXPECT_EQ(window1.get(), GetTarget(root_windows[0], gfx::Point(350, 150)));
+ EXPECT_EQ(window1.get(), GetTarget(gfx::Point(350, 150)));
// Start tracking from the RootWindow0 and check the point on RootWindow1 that
// neither |window0| nor |window1| covers.
- EXPECT_NE(window0.get(), GetTarget(root_windows[0], gfx::Point(50, 250)));
- EXPECT_NE(window1.get(), GetTarget(root_windows[0], gfx::Point(50, 250)));
+ EXPECT_NE(window0.get(), GetTarget(gfx::Point(50, 250)));
+ EXPECT_NE(window1.get(), GetTarget(gfx::Point(50, 250)));
+
+ // Make RootWindow1 active so that capture window is parented to it.
+ Shell::GetInstance()->set_active_root_window(root_windows[1]);
// Start tracking from the RootWindow1 and check the point on RootWindow0 that
// |window0| covers.
- EXPECT_EQ(window0.get(), GetTarget(root_windows[1], gfx::Point(-150, 50)));
+ EXPECT_EQ(window0.get(), GetTarget(gfx::Point(-150, 50)));
// Start tracking from the RootWindow1 and check the point on RootWindow0 that
// neither |window0| nor |window1| covers.
- EXPECT_NE(window0.get(), GetTarget(root_windows[1], gfx::Point(150, -50)));
- EXPECT_NE(window1.get(), GetTarget(root_windows[1], gfx::Point(150, -50)));
+ EXPECT_NE(window0.get(), GetTarget(gfx::Point(150, -50)));
+ EXPECT_NE(window1.get(), GetTarget(gfx::Point(150, -50)));
// Start tracking from the RootWindow1 and check the point on RootWindow1 that
// |window1| covers.
- EXPECT_EQ(window1.get(), GetTarget(root_windows[1], gfx::Point(150, 150)));
+ EXPECT_EQ(window1.get(), GetTarget(gfx::Point(150, 150)));
// Start tracking from the RootWindow1 and check the point on RootWindow1 that
// neither |window0| nor |window1| covers.
- EXPECT_NE(window0.get(), GetTarget(root_windows[1], gfx::Point(50, 50)));
- EXPECT_NE(window1.get(), GetTarget(root_windows[1], gfx::Point(50, 50)));
+ EXPECT_NE(window0.get(), GetTarget(gfx::Point(50, 50)));
+ EXPECT_NE(window1.get(), GetTarget(gfx::Point(50, 50)));
}
// TODO(mazda): Remove this once ash/wm/coordinate_conversion.h supports
@@ -137,14 +141,16 @@ TEST_F(DragDropTrackerTest, MAYBE_ConvertMouseEvent) {
CreateTestWindow(gfx::Rect(100, 100, 100, 100), NULL));
window1->Show();
+ // Make RootWindow0 active so that capture window is parented to it.
+ Shell::GetInstance()->set_active_root_window(root_windows[0]);
+
// Start tracking from the RootWindow0 and converts the mouse event into
// |window0|'s coodinates.
ui::MouseEvent original00(ui::ET_MOUSE_DRAGGED,
gfx::Point(50, 50),
gfx::Point(50, 50),
ui::EF_NONE);
- scoped_ptr<ui::MouseEvent> converted00(ConvertMouseEvent(root_windows[0],
- window0.get(),
+ scoped_ptr<ui::MouseEvent> converted00(ConvertMouseEvent(window0.get(),
original00));
EXPECT_EQ(original00.type(), converted00->type());
EXPECT_EQ("50,50", converted00->location().ToString());
@@ -157,22 +163,23 @@ TEST_F(DragDropTrackerTest, MAYBE_ConvertMouseEvent) {
gfx::Point(350, 150),
gfx::Point(350, 150),
ui::EF_NONE);
- scoped_ptr<ui::MouseEvent> converted01(ConvertMouseEvent(root_windows[0],
- window1.get(),
+ scoped_ptr<ui::MouseEvent> converted01(ConvertMouseEvent(window1.get(),
original01));
EXPECT_EQ(original01.type(), converted01->type());
EXPECT_EQ("50,50", converted01->location().ToString());
EXPECT_EQ("150,150", converted01->root_location().ToString());
EXPECT_EQ(original01.flags(), converted01->flags());
+ // Make RootWindow1 active so that capture window is parented to it.
+ Shell::GetInstance()->set_active_root_window(root_windows[1]);
+
// Start tracking from the RootWindow1 and converts the mouse event into
// |window0|'s coodinates.
ui::MouseEvent original10(ui::ET_MOUSE_DRAGGED,
gfx::Point(-150, 50),
gfx::Point(-150, 50),
ui::EF_NONE);
- scoped_ptr<ui::MouseEvent> converted10(ConvertMouseEvent(root_windows[1],
- window0.get(),
+ scoped_ptr<ui::MouseEvent> converted10(ConvertMouseEvent(window0.get(),
original10));
EXPECT_EQ(original10.type(), converted10->type());
EXPECT_EQ("50,50", converted10->location().ToString());
@@ -185,8 +192,7 @@ TEST_F(DragDropTrackerTest, MAYBE_ConvertMouseEvent) {
gfx::Point(150, 150),
gfx::Point(150, 150),
ui::EF_NONE);
- scoped_ptr<ui::MouseEvent> converted11(ConvertMouseEvent(root_windows[1],
- window1.get(),
+ scoped_ptr<ui::MouseEvent> converted11(ConvertMouseEvent(window1.get(),
original11));
EXPECT_EQ(original11.type(), converted11->type());
EXPECT_EQ("50,50", converted11->location().ToString());