Chromium Code Reviews| 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..c03e92c911b5654adc39de01ad52e31e4a257732 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_); |
| + } |
| } |
| } |
| @@ -331,10 +323,27 @@ ViewportMetrics PlatformScreenOzone::MetricsFromSnapshot( |
| void PlatformScreenOzone::OnDisplayModeChanged( |
| const ui::DisplayConfigurator::DisplayStateList& displays) { |
| + int64_t old_primary_display_id = primary_display_id_; |
| + |
| ProcessRemovedDisplays(displays); |
| ProcessModifiedDisplays(displays); |
| + |
| + // If the primary display was removed try to find a new primary display. |
| + if (primary_display_id_ == Display::kInvalidDisplayID) { |
| + for (const DisplayInfo& display : cached_displays_) { |
|
sky
2016/10/28 17:08:47
Do you need to handle the case of no more displays
kylechar
2016/10/28 19:40:36
That's handled when the last primary display is ma
|
| + if (!display.removed) { |
| + primary_display_id_ = display.id; |
| + break; |
| + } |
| + } |
| + } |
| + |
| + if (old_primary_display_id != primary_display_id_) |
| + delegate_->OnPrimaryDisplayChanged(primary_display_id_); |
| + |
| UpdateCachedDisplays(); |
| AddNewDisplays(displays); |
| + |
| wait_for_display_config_update_ = false; |
| } |