Index: ui/ozone/platform/dri/screen_manager.cc |
diff --git a/ui/ozone/platform/dri/screen_manager.cc b/ui/ozone/platform/dri/screen_manager.cc |
index d4d0ddba113cfe80c271412e4865f2080d566f20..6305830688da5c1d9d7c7ffb1e3fde280370ed7e 100644 |
--- a/ui/ozone/platform/dri/screen_manager.cc |
+++ b/ui/ozone/platform/dri/screen_manager.cc |
@@ -109,8 +109,19 @@ bool ScreenManager::ConfigureDisplayController(uint32_t crtc, |
// If nothing changed just enable the controller. Note, we perform an exact |
// comparison on the mode since the refresh rate may have changed. |
if (SameMode(mode, controller->get_mode()) && |
- origin == controller->origin() && !controller->IsDisabled()) |
+ origin == controller->origin()) { |
+ if (controller->IsDisabled()) { |
+ HardwareDisplayControllers::iterator mirror = |
+ FindActiveDisplayControllerByLocation(modeset_bounds); |
+ // If there is an active controller at the same location then start mirror |
+ // mode. |
+ if (mirror != controllers_.end()) |
+ return HandleMirrorMode(it, mirror, crtc, connector); |
+ } |
+ |
+ // Just re-enable the controller to re-use the current state. |
return controller->Enable(); |
+ } |
// Either the mode or the location of the display changed, so exit mirror |
// mode and configure the display independently. If the caller still wants |