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 52aa4607f472b70d1244bc1d50212707476ce8d1..92c25ebec03938bc2654f014a6f95a5aa9dd066e 100644 |
--- a/services/ui/display/platform_screen_ozone.cc |
+++ b/services/ui/display/platform_screen_ozone.cc |
@@ -35,6 +35,8 @@ std::unique_ptr<PlatformScreen> PlatformScreen::Create() { |
PlatformScreenOzone::PlatformScreenOzone() {} |
PlatformScreenOzone::~PlatformScreenOzone() { |
+ // We are shutting down and don't want anymore changes to virtual displays. |
+ virtual_display_controller_ = nullptr; |
display_configurator_.RemoveObserver(this); |
} |
@@ -46,24 +48,20 @@ void PlatformScreenOzone::Init(PlatformScreenDelegate* delegate) { |
DCHECK(delegate); |
delegate_ = delegate; |
+ std::unique_ptr<ui::NativeDisplayDelegate> native_display_delegate = |
+ ui::OzonePlatform::GetInstance()->CreateNativeDisplayDelegate(); |
+ |
+ if (!base::SysInfo::IsRunningOnChromeOS()) { |
+ virtual_display_controller_ = |
+ native_display_delegate->GetVirtualDisplayController(); |
+ } |
+ |
// We want display configuration to happen even off device to keep the control |
// flow similar. |
display_configurator_.set_configure_display(true); |
display_configurator_.AddObserver(this); |
- display_configurator_.Init( |
- ui::OzonePlatform::GetInstance()->CreateNativeDisplayDelegate(), false); |
- |
- if (base::SysInfo::IsRunningOnChromeOS()) { |
- display_configurator_.ForceInitialConfigure(kChromeOsBootColor); |
- } else { |
- if (base::CommandLine::ForCurrentProcess()->HasSwitch("multi-display")) { |
- // This really doesn't work properly. Use at your own risk. |
- display_configurator_.AddVirtualDisplay(gfx::Size(800, 800)); |
- display_configurator_.AddVirtualDisplay(gfx::Size(800, 800)); |
- } else { |
- display_configurator_.AddVirtualDisplay(gfx::Size(1024, 768)); |
- } |
- } |
+ display_configurator_.Init(std::move(native_display_delegate), false); |
+ display_configurator_.ForceInitialConfigure(kChromeOsBootColor); |
} |
int64_t PlatformScreenOzone::GetPrimaryDisplayId() const { |
@@ -71,14 +69,15 @@ int64_t PlatformScreenOzone::GetPrimaryDisplayId() const { |
} |
void PlatformScreenOzone::ToggleVirtualDisplay() { |
- if (base::SysInfo::IsRunningOnChromeOS()) |
+ if (!virtual_display_controller_) |
return; |
- // TODO(kylechar): Convert to use VirtualDisplayDelegate once landed. |
if (cached_displays_.size() == 1) { |
- display_configurator_.AddVirtualDisplay(cached_displays_[0].bounds.size()); |
+ virtual_display_controller_->AddVirtualDisplay( |
+ cached_displays_[0].bounds.size()); |
} else if (cached_displays_.size() > 1) { |
- display_configurator_.RemoveVirtualDisplay(cached_displays_.back().id); |
+ virtual_display_controller_->RemoveVirtualDisplay( |
+ cached_displays_.back().id); |
} else { |
NOTREACHED(); |
} |