| Index: services/ui/display/platform_screen_ozone.cc
|
| diff --git a/services/ui/display/platform_screen_ozone.cc b/services/ui/display/platform_screen_ozone.cc
|
| index 127fcd8f90ff2b9eb9f541e49c1b074d00587fb7..3a9433d18359257a14f0e81140c148a1920dd9c7 100644
|
| --- a/services/ui/display/platform_screen_ozone.cc
|
| +++ b/services/ui/display/platform_screen_ozone.cc
|
| @@ -164,7 +164,7 @@ void PlatformScreenOzone::SwapPrimaryDisplay() {
|
| primary_display_id_ = cached_displays_[primary_display_index + 1].id;
|
| }
|
|
|
| - // TODO(kylechar): Update ws::DisplayManager.
|
| + delegate_->OnPrimaryDisplayChanged(primary_display_id_);
|
| }
|
|
|
| void PlatformScreenOzone::SetDisplayWorkArea(int64_t display_id,
|
| @@ -210,16 +210,6 @@ void PlatformScreenOzone::ProcessRemovedDisplays(
|
| primary_display_id_ = Display::kInvalidDisplayID;
|
| }
|
| }
|
| -
|
| - // If the primary display was removed find a new primary display id.
|
| - if (primary_display_id_ == Display::kInvalidDisplayID) {
|
| - for (const DisplayInfo& display : cached_displays_) {
|
| - if (!display.removed) {
|
| - primary_display_id_ = display.id;
|
| - break;
|
| - }
|
| - }
|
| - }
|
| }
|
|
|
| void PlatformScreenOzone::ProcessModifiedDisplays(
|
| @@ -279,10 +269,6 @@ void PlatformScreenOzone::AddNewDisplays(
|
| if (GetCachedDisplayIterator(id) != cached_displays_.end())
|
| continue;
|
|
|
| - // If we have no primary display then this one should be it.
|
| - if (primary_display_id_ == Display::kInvalidDisplayID)
|
| - primary_display_id_ = id;
|
| -
|
| DisplayInfo display_info;
|
| display_info.id = snapshot->display_id();
|
| display_info.metrics = MetricsFromSnapshot(*snapshot, next_display_origin_);
|
| @@ -299,6 +285,12 @@ void PlatformScreenOzone::AddNewDisplays(
|
|
|
| cached_displays_.push_back(display_info);
|
| delegate_->OnDisplayAdded(display_info.id, display_info.metrics);
|
| +
|
| + // If we have no primary display then this one should be it.
|
| + if (primary_display_id_ == Display::kInvalidDisplayID) {
|
| + primary_display_id_ = id;
|
| + delegate_->OnPrimaryDisplayChanged(primary_display_id_);
|
| + }
|
| }
|
| }
|
|
|
| @@ -333,8 +325,22 @@ void PlatformScreenOzone::OnDisplayModeChanged(
|
| const ui::DisplayConfigurator::DisplayStateList& displays) {
|
| ProcessRemovedDisplays(displays);
|
| ProcessModifiedDisplays(displays);
|
| +
|
| + // If the primary display is marked as removed we'll try to find a new primary
|
| + // display and update the delegate before removing the old primary display.
|
| + if (primary_display_id_ == Display::kInvalidDisplayID) {
|
| + for (const DisplayInfo& display : cached_displays_) {
|
| + if (!display.removed) {
|
| + primary_display_id_ = display.id;
|
| + delegate_->OnPrimaryDisplayChanged(primary_display_id_);
|
| + break;
|
| + }
|
| + }
|
| + }
|
| +
|
| UpdateCachedDisplays();
|
| AddNewDisplays(displays);
|
| +
|
| wait_for_display_config_update_ = false;
|
| }
|
|
|
|
|