Signed-off-by: Xiong Zhang <[email protected]>
---
 src/compositor-drm.c | 28 ++++++++++++++++++++++++----
 1 file changed, 24 insertions(+), 4 deletions(-)

diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index de777b3..58a0efa 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -2376,7 +2376,7 @@ drm_destroy(struct weston_compositor *ec)
 static void
 drm_compositor_set_modes(struct drm_compositor *compositor)
 {
-       struct drm_output *output;
+       struct drm_output *output, *clone_output;
 
        wl_list_for_each(output, &compositor->base.output_list, base.link) {
                if (!output->current) {
@@ -2390,16 +2390,33 @@ drm_compositor_set_modes(struct drm_compositor 
*compositor)
                }
 
                drm_output_set_mode(output, output->current->fb_id);
+
+               /* Set mode for all associated clone outputs. */
+               wl_list_for_each(clone_output, &output->base.clone_output_list,
+                                base.link)
+                       drm_output_set_mode(clone_output,
+                                       clone_output->current->fb_id);
        }
 }
 
 static void
+drm_output_clear_cursor(struct drm_output *output)
+{
+       struct drm_compositor *ec =
+               (struct drm_compositor *)output->base.compositor;
+
+       output->base.repaint_needed = 0;
+       drmModeSetCursor(ec->drm.fd, output->crtc_id, 0, 0, 0);
+
+}
+
+static void
 session_notify(struct wl_listener *listener, void *data)
 {
        struct weston_compositor *compositor = data;
        struct drm_compositor *ec = data;
        struct drm_sprite *sprite;
-       struct drm_output *output;
+       struct drm_output *output, *clone;
 
        if (ec->base.session_active) {
                weston_log("activating session\n");
@@ -2423,8 +2440,11 @@ session_notify(struct wl_listener *listener, void *data)
                 * pending frame callbacks. */
 
                wl_list_for_each(output, &ec->base.output_list, base.link) {
-                       output->base.repaint_needed = 0;
-                       drmModeSetCursor(ec->drm.fd, output->crtc_id, 0, 0, 0);
+                       drm_output_clear_cursor(output);
+
+                       wl_list_for_each(clone, &output->base.clone_output_list,
+                                        base.link)
+                               drm_output_clear_cursor(clone);
                }
 
                output = container_of(ec->base.output_list.next,
-- 
1.8.3.2

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to