Index: ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc |
diff --git a/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc b/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc |
index bb29a42dfb292d4acf1240e7c79610cc54213e74..3883debb4a07f06bd12bfc522f4c80533e8944e6 100644 |
--- a/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc |
+++ b/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc |
@@ -84,15 +84,26 @@ std::vector<DisplaySnapshot_Params> DrmGpuDisplayManager::GetDisplays() { |
ScopedVector<HardwareDisplayControllerInfo> display_infos = |
GetAvailableDisplayControllerInfos(drm->get_fd()); |
for (auto* display_info : display_infos) { |
- DisplaySnapshot_Params params = |
- CreateDisplaySnapshotParams(display_info, drm->get_fd(), index++); |
+ auto it = std::find_if( |
+ old_displays.begin(), old_displays.end(), |
spang
2015/05/13 19:01:20
I'm not a fan of this.
Can you update displays_ f
dnicoara
2015/05/13 19:10:36
Hmm, it is simpler to create the std::vector<Displ
|
+ DisplayComparator(drm, display_info->crtc()->crtc_id, |
+ display_info->connector()->connector_id)); |
+ gfx::Point origin; |
+ // Because each display has its own surface, display layout isn't tracked |
+ // at the DRM level. We must keep track of the display origins otherwise |
+ // we'll lose the layout information. |
+ if (it != old_displays.end()) |
+ origin = (*it)->origin(); |
+ |
+ DisplaySnapshot_Params params = CreateDisplaySnapshotParams( |
+ display_info, drm->get_fd(), index++, origin); |
params_list.push_back(params); |
displays_.push_back( |
new DrmDisplay(screen_manager_, params.display_id, drm, |
display_info->crtc()->crtc_id, |
display_info->connector()->connector_id, |
- GetDrmModeVector(display_info->connector()))); |
+ GetDrmModeVector(display_info->connector()), origin)); |
} |
} |