diff options
author | Jacob Dufault <jdufault@google.com> | 2016-01-29 11:26:31 -0800 |
---|---|---|
committer | Jacob Dufault <jdufault@google.com> | 2016-01-29 19:27:57 +0000 |
commit | 93d6912f4ef5d930be93e12569f87ea9382f82f3 (patch) | |
tree | 29790a88b460dec5e991ba9937abee81bc742149 /ash | |
parent | 7ad6e6ea05a79d87714a00c9ba69e6de2aad963b (diff) | |
download | chromium_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.cc | 4 | ||||
-rw-r--r-- | ash/display/display_manager.cc | 18 | ||||
-rw-r--r-- | ash/display/display_manager.h | 2 | ||||
-rw-r--r-- | ash/display/extended_mouse_warp_controller.cc | 43 | ||||
-rw-r--r-- | ash/display/extended_mouse_warp_controller.h | 27 | ||||
-rw-r--r-- | ash/display/extended_mouse_warp_controller_unittest.cc | 156 | ||||
-rw-r--r-- | ash/display/window_tree_host_manager.cc | 7 |
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); } |