Index: ash/display/screen_ash.cc |
diff --git a/ash/display/screen_ash.cc b/ash/display/screen_ash.cc |
index a0707b678bcc690c33acc11513f1d3e60ba933b6..3dbde43e10c9d7294e792b10e5cb06717f400841 100644 |
--- a/ash/display/screen_ash.cc |
+++ b/ash/display/screen_ash.cc |
@@ -24,13 +24,17 @@ namespace ash { |
namespace { |
+// We need to keep this in order for unittests to tell if |
+// the object in display::Screen::GetScreenByType is for shutdown. |
+display::Screen* screen_for_shutdown = nullptr; |
+ |
DisplayManager* GetDisplayManager() { |
return Shell::GetInstance()->display_manager(); |
} |
class ScreenForShutdown : public display::Screen { |
public: |
- explicit ScreenForShutdown(ScreenAsh* screen_ash) |
+ explicit ScreenForShutdown(display::Screen* screen_ash) |
: display_list_(screen_ash->GetAllDisplays()), |
primary_display_(screen_ash->GetPrimaryDisplay()) {} |
@@ -80,22 +84,6 @@ ScreenAsh::ScreenAsh() {} |
ScreenAsh::~ScreenAsh() {} |
-void ScreenAsh::NotifyMetricsChanged(const display::Display& display, |
- uint32_t metrics) { |
- FOR_EACH_OBSERVER(display::DisplayObserver, observers_, |
- OnDisplayMetricsChanged(display, metrics)); |
-} |
- |
-void ScreenAsh::NotifyDisplayAdded(const display::Display& display) { |
- FOR_EACH_OBSERVER(display::DisplayObserver, observers_, |
- OnDisplayAdded(display)); |
-} |
- |
-void ScreenAsh::NotifyDisplayRemoved(const display::Display& display) { |
- FOR_EACH_OBSERVER(display::DisplayObserver, observers_, |
- OnDisplayRemoved(display)); |
-} |
- |
gfx::Point ScreenAsh::GetCursorScreenPoint() { |
return aura::Env::GetInstance()->last_mouse_location(); |
} |
@@ -180,15 +168,31 @@ display::Display ScreenAsh::GetPrimaryDisplay() const { |
} |
void ScreenAsh::AddObserver(display::DisplayObserver* observer) { |
- observers_.AddObserver(observer); |
+ GetDisplayManager()->AddObserver(observer); |
} |
void ScreenAsh::RemoveObserver(display::DisplayObserver* observer) { |
- observers_.RemoveObserver(observer); |
+ GetDisplayManager()->RemoveObserver(observer); |
+} |
+ |
+// static |
+DisplayManager* ScreenAsh::CreateDisplayManager() { |
+ std::unique_ptr<ScreenAsh> screen(new ScreenAsh); |
+ |
+ display::Screen* current = display::Screen::GetScreen(); |
+ // If there is no native, or the native was for shutdown, |
+ // use ash's screen. |
+ if (!current || current == screen_for_shutdown) |
+ display::Screen::SetScreenInstance(screen.get()); |
+ return new DisplayManager(std::move(screen)); |
} |
-display::Screen* ScreenAsh::CloneForShutdown() { |
- return new ScreenForShutdown(this); |
+// static |
+void ScreenAsh::CreateScreenForShutdown() { |
+ delete screen_for_shutdown; |
+ // fix this up... |
+ screen_for_shutdown = new ScreenForShutdown(display::Screen::GetScreen()); |
+ display::Screen::SetScreenInstance(screen_for_shutdown); |
} |
} // namespace ash |