clone output should use primary output's fb to restore mode

Signed-off-by: Xiong Zhang <xiong.y.zh...@intel.com>
---
 src/compositor-drm.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index 0b9ab45..a9d2ab5 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -2476,9 +2476,14 @@ drm_compositor_set_modes(struct drm_compositor 
*compositor)
        struct drm_output *output;
        struct drm_mode *drm_mode;
        int ret;
+       uint32_t fb_id;
+       struct drm_output *primary_output;
 
        wl_list_for_each(output, &compositor->base.output_list, base.link) {
-               if (!output->current) {
+               /* only in extend mode or primary output in clone mode */
+               if (((compositor->base.multiscreen_mode == 
WESTON_MULTISCREEN_EXTEND) ||
+                       (&output->base == compositor->base.primary_output)) &&
+                        (!output->current)) {
                        /* If something that would cause the output to
                         * switch mode happened while in another vt, we
                         * might not have a current drm_fb. In that case,
@@ -2489,8 +2494,15 @@ drm_compositor_set_modes(struct drm_compositor 
*compositor)
                }
 
                drm_mode = (struct drm_mode *) output->base.current;
+               if ((compositor->base.multiscreen_mode == 
WESTON_MULTISCREEN_EXTEND) ||
+                       (&output->base == compositor->base.primary_output))
+                       fb_id = output->current->fb_id;
+               else {
+                       primary_output = (struct drm_output 
*)compositor->base.primary_output;
+                       fb_id = primary_output->current->fb_id;
+               }
                ret = drmModeSetCrtc(compositor->drm.fd, output->crtc_id,
-                                    output->current->fb_id, 0, 0,
+                                    fb_id, 0, 0,
                                     &output->connector_id, 1,
                                     &drm_mode->mode_info);
                if (ret < 0) {
-- 
1.8.3.2

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to