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 6305830688da5c1d9d7c7ffb1e3fde280370ed7e..53b397cd85a4c1cb4b483bb88d9e0f8cb3a62694 100644 |
--- a/ui/ozone/platform/dri/screen_manager.cc |
+++ b/ui/ozone/platform/dri/screen_manager.cc |
@@ -65,6 +65,7 @@ ScreenManager::ScreenManager(DriWrapper* dri, |
} |
ScreenManager::~ScreenManager() { |
+ DCHECK_EQ(0u, observers_.size()); |
} |
void ScreenManager::AddDisplayController(DriWrapper* dri, |
@@ -89,8 +90,11 @@ void ScreenManager::RemoveDisplayController(uint32_t crtc) { |
if (it != controllers_.end()) { |
bool is_mirrored = (*it)->IsMirrored(); |
(*it)->RemoveCrtc(crtc); |
- if (!is_mirrored) |
+ if (!is_mirrored) { |
+ FOR_EACH_OBSERVER(DisplayChangeObserver, observers_, |
+ OnDisplayRemoved(*it)); |
controllers_.erase(it); |
+ } |
} |
} |
@@ -105,7 +109,6 @@ bool ScreenManager::ConfigureDisplayController(uint32_t crtc, |
<< ") doesn't exist."; |
HardwareDisplayController* controller = *it; |
- controller = *it; |
// 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()) && |
@@ -119,6 +122,8 @@ bool ScreenManager::ConfigureDisplayController(uint32_t crtc, |
return HandleMirrorMode(it, mirror, crtc, connector); |
} |
+ FOR_EACH_OBSERVER(DisplayChangeObserver, observers_, |
+ OnDisplayChanged(controller)); |
// Just re-enable the controller to re-use the current state. |
return controller->Enable(); |
} |
@@ -159,7 +164,7 @@ bool ScreenManager::DisableDisplayController(uint32_t crtc) { |
return false; |
} |
-base::WeakPtr<HardwareDisplayController> ScreenManager::GetDisplayController( |
+HardwareDisplayController* ScreenManager::GetDisplayController( |
const gfx::Rect& bounds) { |
// TODO(dnicoara): Remove hack once TestScreen uses a simple Ozone display |
// configuration reader and ScreenManager is called from there to create the |
@@ -170,9 +175,17 @@ base::WeakPtr<HardwareDisplayController> ScreenManager::GetDisplayController( |
HardwareDisplayControllers::iterator it = |
FindActiveDisplayControllerByLocation(bounds); |
if (it != controllers_.end()) |
- return (*it)->AsWeakPtr(); |
+ return *it; |
+ |
+ return nullptr; |
+} |
+ |
+void ScreenManager::AddObserver(DisplayChangeObserver* observer) { |
+ observers_.AddObserver(observer); |
+} |
- return base::WeakPtr<HardwareDisplayController>(); |
+void ScreenManager::RemoveObserver(DisplayChangeObserver* observer) { |
+ observers_.RemoveObserver(observer); |
} |
ScreenManager::HardwareDisplayControllers::iterator |
@@ -244,6 +257,8 @@ bool ScreenManager::ModesetDisplayController( |
return false; |
} |
+ FOR_EACH_OBSERVER(DisplayChangeObserver, observers_, |
+ OnDisplayChanged(controller)); |
return true; |
} |
@@ -254,6 +269,10 @@ bool ScreenManager::HandleMirrorMode( |
uint32_t connector) { |
(*mirror)->AddCrtc((*original)->RemoveCrtc(crtc)); |
if ((*mirror)->Enable()) { |
+ FOR_EACH_OBSERVER(DisplayChangeObserver, observers_, |
+ OnDisplayRemoved(*original)); |
+ FOR_EACH_OBSERVER(DisplayChangeObserver, observers_, |
+ OnDisplayChanged(*mirror)); |
controllers_.erase(original); |
return true; |
} |