summaryrefslogtreecommitdiffstats
path: root/ash
diff options
context:
space:
mode:
authorJacob Dufault <jdufault@google.com>2016-01-29 11:26:31 -0800
committerJacob Dufault <jdufault@google.com>2016-01-29 19:27:57 +0000
commit93d6912f4ef5d930be93e12569f87ea9382f82f3 (patch)
tree29790a88b460dec5e991ba9937abee81bc742149 /ash
parent7ad6e6ea05a79d87714a00c9ba69e6de2aad963b (diff)
downloadchromium_src-93d6912f4ef5d930be93e12569f87ea9382f82f3.zip
chromium_src-93d6912f4ef5d930be93e12569f87ea9382f82f3.tar.gz
chromium_src-93d6912f4ef5d930be93e12569f87ea9382f82f3.tar.bz2
Fix moving the mouse between two displays after the secondary display becomes primary.
BUG=580754 Review URL: https://codereview.chromium.org/1631023002 Cr-Commit-Position: refs/heads/master@{#371566} (cherry picked from commit 3c2d523b0549c0d5139e76132da313eb2935a511) Review URL: https://codereview.chromium.org/1649063002 . Cr-Commit-Position: refs/branch-heads/2623@{#196} Cr-Branched-From: 92d77538a86529ca35f9220bd3cd512cbea1f086-refs/heads/master@{#369907}
Diffstat (limited to 'ash')
-rw-r--r--ash/content/display/screen_orientation_controller_chromeos_unittest.cc4
-rw-r--r--ash/display/display_manager.cc18
-rw-r--r--ash/display/display_manager.h2
-rw-r--r--ash/display/extended_mouse_warp_controller.cc43
-rw-r--r--ash/display/extended_mouse_warp_controller.h27
-rw-r--r--ash/display/extended_mouse_warp_controller_unittest.cc156
-rw-r--r--ash/display/window_tree_host_manager.cc7
7 files changed, 135 insertions, 122 deletions
diff --git a/ash/content/display/screen_orientation_controller_chromeos_unittest.cc b/ash/content/display/screen_orientation_controller_chromeos_unittest.cc
index b0038ed..6ce5086 100644
--- a/ash/content/display/screen_orientation_controller_chromeos_unittest.cc
+++ b/ash/content/display/screen_orientation_controller_chromeos_unittest.cc
@@ -639,8 +639,8 @@ TEST_F(ScreenOrientationControllerTest, RotateInactiveDisplay) {
// that the DisplayManager can track the |internal_display_info| as inactive
// instead of non-existent.
DisplayManager* display_manager = Shell::GetInstance()->display_manager();
- display_manager->UpdateDisplays(display_info_list_two_active);
- display_manager->UpdateDisplays(display_info_list_one_active);
+ display_manager->UpdateDisplaysWith(display_info_list_two_active);
+ display_manager->UpdateDisplaysWith(display_info_list_one_active);
test::ScopedSetInternalDisplayId set_internal(kInternalDisplayId);
diff --git a/ash/display/display_manager.cc b/ash/display/display_manager.cc
index 5d47aba..f0afd45 100644
--- a/ash/display/display_manager.cc
+++ b/ash/display/display_manager.cc
@@ -325,7 +325,7 @@ void DisplayManager::SetOverscanInsets(int64_t display_id,
}
if (update) {
AddMirrorDisplayInfoIfAny(&display_info_list);
- UpdateDisplays(display_info_list);
+ UpdateDisplaysWith(display_info_list);
} else {
display_info_[display_id].SetOverscanInsets(insets_in_dip);
}
@@ -353,7 +353,7 @@ void DisplayManager::SetDisplayRotation(int64_t display_id,
}
if (is_active) {
AddMirrorDisplayInfoIfAny(&display_info_list);
- UpdateDisplays(display_info_list);
+ UpdateDisplaysWith(display_info_list);
} else if (display_info_.find(display_id) != display_info_.end()) {
// Inactive displays can reactivate, ensure they have been updated.
display_info_[display_id].SetRotation(rotation, source);
@@ -398,7 +398,7 @@ bool DisplayManager::SetDisplayMode(int64_t display_id,
}
if (display_property_changed) {
AddMirrorDisplayInfoIfAny(&display_info_list);
- UpdateDisplays(display_info_list);
+ UpdateDisplaysWith(display_info_list);
}
if (resolution_changed && IsInUnifiedMode()) {
ReconfigureDisplays();
@@ -633,7 +633,7 @@ void DisplayManager::OnNativeDisplaysChanged(
}
#endif
- UpdateDisplays(new_display_info_list);
+ UpdateDisplaysWith(new_display_info_list);
}
void DisplayManager::UpdateDisplays() {
@@ -641,10 +641,10 @@ void DisplayManager::UpdateDisplays() {
for (const auto& display : active_display_list_)
display_info_list.push_back(GetDisplayInfo(display.id()));
AddMirrorDisplayInfoIfAny(&display_info_list);
- UpdateDisplays(display_info_list);
+ UpdateDisplaysWith(display_info_list);
}
-void DisplayManager::UpdateDisplays(
+void DisplayManager::UpdateDisplaysWith(
const std::vector<DisplayInfo>& updated_display_info_list) {
#if defined(OS_WIN)
DCHECK_EQ(1u, updated_display_info_list.size()) <<
@@ -976,7 +976,7 @@ void DisplayManager::AddRemoveDisplay() {
num_connected_displays_ = new_display_info_list.size();
mirroring_display_id_ = gfx::Display::kInvalidDisplayID;
software_mirroring_display_list_.clear();
- UpdateDisplays(new_display_info_list);
+ UpdateDisplaysWith(new_display_info_list);
}
void DisplayManager::ToggleDisplayScaleFactor() {
@@ -990,7 +990,7 @@ void DisplayManager::ToggleDisplayScaleFactor() {
new_display_info_list.push_back(display_info);
}
AddMirrorDisplayInfoIfAny(&new_display_info_list);
- UpdateDisplays(new_display_info_list);
+ UpdateDisplaysWith(new_display_info_list);
}
#if defined(OS_CHROMEOS)
@@ -1035,7 +1035,7 @@ void DisplayManager::ReconfigureDisplays() {
}
mirroring_display_id_ = gfx::Display::kInvalidDisplayID;
software_mirroring_display_list_.clear();
- UpdateDisplays(display_info_list);
+ UpdateDisplaysWith(display_info_list);
}
bool DisplayManager::UpdateDisplayBounds(int64_t display_id,
diff --git a/ash/display/display_manager.h b/ash/display/display_manager.h
index 83933bf..4392202 100644
--- a/ash/display/display_manager.h
+++ b/ash/display/display_manager.h
@@ -225,7 +225,7 @@ class ASH_EXPORT DisplayManager
const std::vector<DisplayInfo>& display_info_list);
// Updates the internal display data and notifies observers about the changes.
- void UpdateDisplays(const std::vector<DisplayInfo>& display_info_list);
+ void UpdateDisplaysWith(const std::vector<DisplayInfo>& display_info_list);
// Updates current displays using current |display_info_|.
void UpdateDisplays();
diff --git a/ash/display/extended_mouse_warp_controller.cc b/ash/display/extended_mouse_warp_controller.cc
index 8d04463..f17444b 100644
--- a/ash/display/extended_mouse_warp_controller.cc
+++ b/ash/display/extended_mouse_warp_controller.cc
@@ -52,11 +52,11 @@ ExtendedMouseWarpController::WarpRegion::WarpRegion(
int64_t b_display_id,
const gfx::Rect& a_indicator_bounds,
const gfx::Rect& b_indicator_bounds)
- : a_display_id(a_display_id),
- b_display_id(b_display_id),
- a_indicator_bounds(a_indicator_bounds),
- b_indicator_bounds(b_indicator_bounds),
- shared_display_edge_indicator(nullptr) {
+ : a_display_id_(a_display_id),
+ b_display_id_(b_display_id),
+ a_indicator_bounds_(a_indicator_bounds),
+ b_indicator_bounds_(b_indicator_bounds),
+ shared_display_edge_indicator_(nullptr) {
// Initialize edge bounds from indicator bounds.
aura::Window* a_window = GetRootWindowForDisplayId(a_display_id);
aura::Window* b_window = GetRootWindowForDisplayId(b_display_id);
@@ -64,8 +64,10 @@ ExtendedMouseWarpController::WarpRegion::WarpRegion(
AshWindowTreeHost* a_ash_host = GetRootWindowController(a_window)->ash_host();
AshWindowTreeHost* b_ash_host = GetRootWindowController(b_window)->ash_host();
- a_edge_bounds_in_native = GetNativeEdgeBounds(a_ash_host, a_indicator_bounds);
- b_edge_bounds_in_native = GetNativeEdgeBounds(b_ash_host, b_indicator_bounds);
+ a_edge_bounds_in_native_ =
+ GetNativeEdgeBounds(a_ash_host, a_indicator_bounds);
+ b_edge_bounds_in_native_ =
+ GetNativeEdgeBounds(b_ash_host, b_indicator_bounds);
}
ExtendedMouseWarpController::WarpRegion::~WarpRegion() {}
@@ -88,18 +90,21 @@ ExtendedMouseWarpController::ExtendedMouseWarpController(
drag_source != nullptr);
}
} else {
+ // Make sure to set |a| as the primary display, and |b| as the secondary
+ // display. DisplayLayout::Position is defined in terms of primary.
DisplayLayout::Position position =
display_manager->GetCurrentDisplayLayout().position;
- const gfx::Display& a = display_manager->GetDisplayAt(0);
- const gfx::Display& b = display_manager->GetDisplayAt(1);
+ const gfx::Display& a = Shell::GetScreen()->GetPrimaryDisplay();
+ const gfx::Display& b = ScreenUtil::GetSecondaryDisplay();
// TODO(oshima): Use ComputeBondary instead.
- if (position == DisplayLayout::TOP || position == DisplayLayout::BOTTOM)
+ if (position == DisplayLayout::TOP || position == DisplayLayout::BOTTOM) {
AddWarpRegion(CreateHorizontalEdgeBounds(a, b, position),
drag_source != nullptr);
- else
+ } else {
AddWarpRegion(CreateVerticalEdgeBounds(a, b, position),
drag_source != nullptr);
+ }
}
}
@@ -148,12 +153,12 @@ void ExtendedMouseWarpController::SetEnabled(bool enabled) {
void ExtendedMouseWarpController::AddWarpRegion(
scoped_ptr<WarpRegion> warp_region,
- bool drag_source) {
- if (drag_source) {
- warp_region->shared_display_edge_indicator.reset(
+ bool has_drag_source) {
+ if (has_drag_source) {
+ warp_region->shared_display_edge_indicator_.reset(
new SharedDisplayEdgeIndicator);
- warp_region->shared_display_edge_indicator->Show(
- warp_region->a_indicator_bounds, warp_region->b_indicator_bounds);
+ warp_region->shared_display_edge_indicator_->Show(
+ warp_region->a_indicator_bounds_, warp_region->b_indicator_bounds_);
}
warp_regions_.emplace_back(std::move(warp_region));
@@ -164,14 +169,14 @@ bool ExtendedMouseWarpController::WarpMouseCursorInNativeCoords(
const gfx::Point& point_in_screen,
bool update_mouse_location_now) {
for (const scoped_ptr<WarpRegion>& warp : warp_regions_) {
- bool in_a_edge = warp->a_edge_bounds_in_native.Contains(point_in_native);
- bool in_b_edge = warp->b_edge_bounds_in_native.Contains(point_in_native);
+ bool in_a_edge = warp->a_edge_bounds_in_native_.Contains(point_in_native);
+ bool in_b_edge = warp->b_edge_bounds_in_native_.Contains(point_in_native);
if (!in_a_edge && !in_b_edge)
continue;
// The mouse must move.
aura::Window* dst_window = GetRootWindowForDisplayId(
- in_a_edge ? warp->b_display_id : warp->a_display_id);
+ in_a_edge ? warp->b_display_id_ : warp->a_display_id_);
AshWindowTreeHost* target_ash_host =
GetRootWindowController(dst_window)->ash_host();
diff --git a/ash/display/extended_mouse_warp_controller.h b/ash/display/extended_mouse_warp_controller.h
index d150206..0e14878 100644
--- a/ash/display/extended_mouse_warp_controller.h
+++ b/ash/display/extended_mouse_warp_controller.h
@@ -52,7 +52,7 @@ class ASH_EXPORT ExtendedMouseWarpController : public MouseWarpController {
IndicatorBoundsTestThreeDisplays);
// Defined in header file because tests need access.
- struct WarpRegion {
+ class WarpRegion {
public:
WarpRegion(int64_t a_display_id,
int64_t b_display_id,
@@ -60,35 +60,40 @@ class ASH_EXPORT ExtendedMouseWarpController : public MouseWarpController {
const gfx::Rect& b_indicator_bounds);
~WarpRegion();
+ const gfx::Rect& a_indicator_bounds() { return a_indicator_bounds_; }
+ const gfx::Rect& b_indicator_bounds() { return b_indicator_bounds_; }
+
+ private:
+ friend class ExtendedMouseWarpController;
+
// If the mouse cursor is in |a_edge_bounds_in_native|, then it will be
// moved to |b_display_id|. Similarily, if the cursor is in
// |b_edge_bounds_in_native|, then it will be moved to |a_display_id|.
// The id for the displays. Used for warping the cursor.
- int64_t a_display_id;
- int64_t b_display_id;
+ int64_t a_display_id_;
+ int64_t b_display_id_;
- gfx::Rect a_edge_bounds_in_native;
- gfx::Rect b_edge_bounds_in_native;
+ gfx::Rect a_edge_bounds_in_native_;
+ gfx::Rect b_edge_bounds_in_native_;
// The bounds for warp hole windows. These are kept in the instance for
// testing.
- gfx::Rect a_indicator_bounds;
- gfx::Rect b_indicator_bounds;
+ gfx::Rect a_indicator_bounds_;
+ gfx::Rect b_indicator_bounds_;
// Shows the area where a window can be dragged in to/out from another
// display.
- scoped_ptr<SharedDisplayEdgeIndicator> shared_display_edge_indicator;
+ scoped_ptr<SharedDisplayEdgeIndicator> shared_display_edge_indicator_;
- private:
DISALLOW_COPY_AND_ASSIGN(WarpRegion);
};
std::vector<scoped_ptr<WarpRegion>> warp_regions_;
// Registers the WarpRegion; also displays a drag indicator on the screen if
- // |drag_source| is true.
- void AddWarpRegion(scoped_ptr<WarpRegion> region, bool drag_source);
+ // |has_drag_source| is true.
+ void AddWarpRegion(scoped_ptr<WarpRegion> region, bool has_drag_source);
// Warps the mouse cursor to an alternate root window when the
// mouse location in |event|, hits the edge of the event target's root and
diff --git a/ash/display/extended_mouse_warp_controller_unittest.cc b/ash/display/extended_mouse_warp_controller_unittest.cc
index 331ef88..342d949 100644
--- a/ash/display/extended_mouse_warp_controller_unittest.cc
+++ b/ash/display/extended_mouse_warp_controller_unittest.cc
@@ -49,14 +49,14 @@ TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestOnRight) {
ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
EXPECT_EQ(gfx::Rect(359, 16, 1, 344),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
EXPECT_EQ(gfx::Rect(360, 0, 1, 360),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
EXPECT_EQ(gfx::Rect(360, 16, 1, 344),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
EXPECT_EQ(gfx::Rect(359, 0, 1, 360),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
// Move 2nd display downwards a bit.
layout.offset = 5;
@@ -66,14 +66,14 @@ TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestOnRight) {
// the indicator's x.
ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
EXPECT_EQ(gfx::Rect(359, 16, 1, 344),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
EXPECT_EQ(gfx::Rect(360, 5, 1, 355),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
EXPECT_EQ(gfx::Rect(360, 21, 1, 339),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
EXPECT_EQ(gfx::Rect(359, 5, 1, 355),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
// Move it down further so that the shared edge is shorter than
// minimum hole size (160).
@@ -82,15 +82,15 @@ TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestOnRight) {
event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
EXPECT_EQ(gfx::Rect(359, 200, 1, 160),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
EXPECT_EQ(gfx::Rect(360, 200, 1, 160),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
EXPECT_EQ(gfx::Rect(360, 200, 1, 160),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
EXPECT_EQ(gfx::Rect(359, 200, 1, 160),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
// Now move 2nd display upwards
layout.offset = -5;
@@ -98,17 +98,17 @@ TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestOnRight) {
event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
EXPECT_EQ(gfx::Rect(359, 16, 1, 344),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
EXPECT_EQ(gfx::Rect(360, 0, 1, 360),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
// 16 px are reserved on 2nd display from top, so y must be
// (16 - 5) = 11
ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
EXPECT_EQ(gfx::Rect(360, 11, 1, 349),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
EXPECT_EQ(gfx::Rect(359, 0, 1, 360),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
event_filter()->HideSharedEdgeIndicator();
}
@@ -126,30 +126,30 @@ TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestOnLeft) {
event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
EXPECT_EQ(gfx::Rect(0, 16, 1, 344),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
EXPECT_EQ(gfx::Rect(-1, 0, 1, 360),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
EXPECT_EQ(gfx::Rect(-1, 16, 1, 344),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
EXPECT_EQ(gfx::Rect(0, 0, 1, 360),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
layout.offset = 250;
display_manager->SetLayoutForCurrentDisplays(layout);
event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
EXPECT_EQ(gfx::Rect(0, 250, 1, 110),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
EXPECT_EQ(gfx::Rect(-1, 250, 1, 110),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
EXPECT_EQ(gfx::Rect(-1, 250, 1, 110),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
EXPECT_EQ(gfx::Rect(0, 250, 1, 110),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
event_filter()->HideSharedEdgeIndicator();
}
@@ -166,30 +166,30 @@ TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestOnTopBottom) {
event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
EXPECT_EQ(gfx::Rect(0, 0, 360, 1),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
EXPECT_EQ(gfx::Rect(0, -1, 360, 1),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
EXPECT_EQ(gfx::Rect(0, -1, 360, 1),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
EXPECT_EQ(gfx::Rect(0, 0, 360, 1),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
layout.offset = 250;
display_manager->SetLayoutForCurrentDisplays(layout);
event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
EXPECT_EQ(gfx::Rect(250, 0, 110, 1),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
EXPECT_EQ(gfx::Rect(250, -1, 110, 1),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
EXPECT_EQ(gfx::Rect(250, -1, 110, 1),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
EXPECT_EQ(gfx::Rect(250, 0, 110, 1),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
layout.position = DisplayLayout::BOTTOM;
layout.offset = 0;
@@ -197,15 +197,15 @@ TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestOnTopBottom) {
event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */);
ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
EXPECT_EQ(gfx::Rect(0, 359, 360, 1),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
EXPECT_EQ(gfx::Rect(0, 360, 360, 1),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */);
ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size());
EXPECT_EQ(gfx::Rect(0, 360, 360, 1),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
EXPECT_EQ(gfx::Rect(0, 359, 360, 1),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds);
+ mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
event_filter()->HideSharedEdgeIndicator();
}
@@ -215,46 +215,54 @@ TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestThreeDisplays) {
if (!SupportsMultipleDisplays())
return;
- UpdateDisplay("360x360,700x700,1000x1000");
- aura::Window::Windows root_windows = Shell::GetAllRootWindows();
+ auto run_test = [this] {
+ aura::Window::Windows root_windows = Shell::GetAllRootWindows();
+
+ // Left most display
+ event_filter()->ShowSharedEdgeIndicator(root_windows[0]);
+ ASSERT_EQ(2U, mouse_warp_controller()->warp_regions_.size());
+ EXPECT_EQ(gfx::Rect(359, 16, 1, 344),
+ mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
+ EXPECT_EQ(gfx::Rect(360, 0, 1, 360),
+ mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
+ EXPECT_EQ(gfx::Rect(1060, 16, 1, 684),
+ mouse_warp_controller()->warp_regions_[1]->a_indicator_bounds());
+ EXPECT_EQ(gfx::Rect(1059, 0, 1, 700),
+ mouse_warp_controller()->warp_regions_[1]->b_indicator_bounds());
+
+ // Middle display
+ event_filter()->ShowSharedEdgeIndicator(root_windows[1]);
+ ASSERT_EQ(2U, mouse_warp_controller()->warp_regions_.size());
+ EXPECT_EQ(gfx::Rect(360, 16, 1, 344),
+ mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
+ EXPECT_EQ(gfx::Rect(359, 0, 1, 360),
+ mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
+ EXPECT_EQ(gfx::Rect(1059, 16, 1, 684),
+ mouse_warp_controller()->warp_regions_[1]->a_indicator_bounds());
+ EXPECT_EQ(gfx::Rect(1060, 0, 1, 700),
+ mouse_warp_controller()->warp_regions_[1]->b_indicator_bounds());
+
+ // Right most display
+ event_filter()->ShowSharedEdgeIndicator(root_windows[2]);
+ ASSERT_EQ(2U, mouse_warp_controller()->warp_regions_.size());
+ EXPECT_EQ(gfx::Rect(360, 16, 1, 344),
+ mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds());
+ EXPECT_EQ(gfx::Rect(359, 0, 1, 360),
+ mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds());
+ EXPECT_EQ(gfx::Rect(1060, 16, 1, 684),
+ mouse_warp_controller()->warp_regions_[1]->a_indicator_bounds());
+ EXPECT_EQ(gfx::Rect(1059, 0, 1, 700),
+ mouse_warp_controller()->warp_regions_[1]->b_indicator_bounds());
+
+ event_filter()->HideSharedEdgeIndicator();
+ };
- // Left most display
- event_filter()->ShowSharedEdgeIndicator(root_windows[0]);
- ASSERT_EQ(2U, mouse_warp_controller()->warp_regions_.size());
- EXPECT_EQ(gfx::Rect(359, 16, 1, 344),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds);
- EXPECT_EQ(gfx::Rect(360, 0, 1, 360),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds);
- EXPECT_EQ(gfx::Rect(1060, 16, 1, 684),
- mouse_warp_controller()->warp_regions_[1]->a_indicator_bounds);
- EXPECT_EQ(gfx::Rect(1059, 0, 1, 700),
- mouse_warp_controller()->warp_regions_[1]->b_indicator_bounds);
-
- // Middle display
- event_filter()->ShowSharedEdgeIndicator(root_windows[1]);
- ASSERT_EQ(2U, mouse_warp_controller()->warp_regions_.size());
- EXPECT_EQ(gfx::Rect(360, 16, 1, 344),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds);
- EXPECT_EQ(gfx::Rect(359, 0, 1, 360),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds);
- EXPECT_EQ(gfx::Rect(1059, 16, 1, 684),
- mouse_warp_controller()->warp_regions_[1]->a_indicator_bounds);
- EXPECT_EQ(gfx::Rect(1060, 0, 1, 700),
- mouse_warp_controller()->warp_regions_[1]->b_indicator_bounds);
-
- // Right most display
- event_filter()->ShowSharedEdgeIndicator(root_windows[2]);
- ASSERT_EQ(2U, mouse_warp_controller()->warp_regions_.size());
- EXPECT_EQ(gfx::Rect(360, 16, 1, 344),
- mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds);
- EXPECT_EQ(gfx::Rect(359, 0, 1, 360),
- mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds);
- EXPECT_EQ(gfx::Rect(1060, 16, 1, 684),
- mouse_warp_controller()->warp_regions_[1]->a_indicator_bounds);
- EXPECT_EQ(gfx::Rect(1059, 0, 1, 700),
- mouse_warp_controller()->warp_regions_[1]->b_indicator_bounds);
+ UpdateDisplay("360x360,700x700,1000x1000");
+ run_test();
- event_filter()->HideSharedEdgeIndicator();
+ UpdateDisplay("360x360,700x700,1000x1000");
+ Shell::GetInstance()->window_tree_host_manager()->SwapPrimaryDisplayForTest();
+ run_test();
}
} // namespace ash
diff --git a/ash/display/window_tree_host_manager.cc b/ash/display/window_tree_host_manager.cc
index 70dd1b9..e2d368f 100644
--- a/ash/display/window_tree_host_manager.cc
+++ b/ash/display/window_tree_host_manager.cc
@@ -529,13 +529,8 @@ void WindowTreeHostManager::SetPrimaryDisplay(
new_primary_display.GetWorkAreaInsets());
// Update the dispay manager with new display info.
- std::vector<DisplayInfo> display_info_list;
- display_info_list.push_back(
- display_manager->GetDisplayInfo(primary_display_id));
- display_info_list.push_back(
- display_manager->GetDisplayInfo(ScreenUtil::GetSecondaryDisplay().id()));
GetDisplayManager()->set_force_bounds_changed(true);
- GetDisplayManager()->UpdateDisplays(display_info_list);
+ GetDisplayManager()->UpdateDisplays();
GetDisplayManager()->set_force_bounds_changed(false);
}