Chromium Code Reviews| Index: ui/views/mus/screen_mus.cc |
| diff --git a/ui/views/mus/screen_mus.cc b/ui/views/mus/screen_mus.cc |
| index 265bfbb2bbbfa8da322d297e5b44af9c1cc0b620..557f88884c65674a78e79299104eae96d4cdc632 100644 |
| --- a/ui/views/mus/screen_mus.cc |
| +++ b/ui/views/mus/screen_mus.cc |
| @@ -34,10 +34,10 @@ struct TypeConverter<views::WindowManagerFrameValues, |
| namespace views { |
| +using Type = display::DisplayList::Type; |
| + |
| ScreenMus::ScreenMus(ScreenMusDelegate* delegate) |
| - : delegate_(delegate), |
| - display_manager_observer_binding_(this) { |
| -} |
| + : delegate_(delegate), display_manager_observer_binding_(this) {} |
| ScreenMus::~ScreenMus() {} |
| @@ -61,8 +61,7 @@ void ScreenMus::Init(service_manager::Connector* connector) { |
| // In this case we install a default display and assume the process is |
| // going to exit shortly so that the real value doesn't matter. |
| display_list()->AddDisplay( |
| - display::Display(0xFFFFFFFF, gfx::Rect(0, 0, 801, 802)), |
| - display::DisplayList::Type::PRIMARY); |
| + display::Display(0xFFFFFFFF, gfx::Rect(0, 0, 801, 802)), Type::PRIMARY); |
| } |
| } |
| @@ -95,16 +94,17 @@ gfx::NativeWindow ScreenMus::GetWindowAtScreenPoint(const gfx::Point& point) { |
| return aura_window; |
| } |
| -void ScreenMus::OnDisplays(mojo::Array<ui::mojom::WsDisplayPtr> ws_displays) { |
| - // This should only be called once from Init() before any observers have been |
| - // added. |
| +void ScreenMus::OnDisplays(mojo::Array<ui::mojom::WsDisplayPtr> ws_displays, |
| + int64_t primary_display_id, |
| + int64_t internal_display_id) { |
| + // This should only be called once when ScreenMus is added as an observer. |
| DCHECK(display_list()->displays().empty()); |
| + |
| for (size_t i = 0; i < ws_displays.size(); ++i) { |
| - const bool is_primary = ws_displays[i]->is_primary; |
| - display_list()->AddDisplay(ws_displays[i]->display, |
| - is_primary |
| - ? display::DisplayList::Type::PRIMARY |
| - : display::DisplayList::Type::NOT_PRIMARY); |
| + const display::Display& display = ws_displays[i]->display; |
| + const bool is_primary = display.id() == primary_display_id; |
| + display_list()->AddDisplay(display, |
| + is_primary ? Type::PRIMARY : Type::NOT_PRIMARY); |
| if (is_primary) { |
| // TODO(sky): Make WindowManagerFrameValues per display. |
| WindowManagerFrameValues frame_values = |
| @@ -113,14 +113,20 @@ void ScreenMus::OnDisplays(mojo::Array<ui::mojom::WsDisplayPtr> ws_displays) { |
| WindowManagerFrameValues::SetInstance(frame_values); |
| } |
| } |
| + |
|
sky
2016/10/28 17:08:47
DCHECK found primary display?
kylechar
2016/10/28 19:40:37
Done.
|
| + if (internal_display_id != display::Display::kInvalidDisplayID) |
| + display::Display::SetInternalDisplayId(internal_display_id); |
| + |
| DCHECK(!display_list()->displays().empty()); |
| } |
| void ScreenMus::OnDisplaysChanged( |
| mojo::Array<ui::mojom::WsDisplayPtr> ws_displays) { |
| for (size_t i = 0; i < ws_displays.size(); ++i) { |
| - const bool is_primary = ws_displays[i]->is_primary; |
| - ProcessDisplayChanged(ws_displays[i]->display, is_primary); |
| + const display::Display& display = ws_displays[i]->display; |
| + const bool is_primary = |
| + display.id() == display_list()->GetPrimaryDisplayIterator()->id(); |
| + ProcessDisplayChanged(display, is_primary); |
| if (is_primary) { |
| WindowManagerFrameValues frame_values = |
| ws_displays[i] |
| @@ -132,8 +138,18 @@ void ScreenMus::OnDisplaysChanged( |
| } |
| } |
| -void ScreenMus::OnDisplayRemoved(int64_t id) { |
| - display_list()->RemoveDisplay(id); |
| +void ScreenMus::OnDisplayRemoved(int64_t display_id) { |
| + display_list()->RemoveDisplay(display_id); |
| +} |
| + |
| +void ScreenMus::OnPrimaryDisplayChanged(int64_t primary_display_id) { |
| + // TODO(kylechar): DisplayList would need to change to handle having no |
| + // primary display. |
| + if (primary_display_id == display::Display::kInvalidDisplayID) |
| + return; |
| + |
| + ProcessDisplayChanged(*display_list()->FindDisplayById(primary_display_id), |
| + true); |
| } |
| } // namespace views |