intel-virtual-output: Disable outputs on remote displays upon shutdown
authorChris Wilson <chris@chris-wilson.co.uk>
Fri, 13 Jun 2014 18:59:16 +0000 (19:59 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Fri, 13 Jun 2014 19:00:05 +0000 (20:00 +0100)
References: https://bugs.freedesktop.org/show_bug.cgi?id=79994
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
tools/virtual.c

index 95541bd..f1a6057 100644 (file)
@@ -3054,16 +3054,36 @@ static int first_display_sibling(struct context *ctx, int i)
        return 1;
 }
 
-
 #define first_display_for_each_sibling(CTX, i) \
        for (i = first_display_first_sibling(CTX); first_display_sibling(CTX, i); i++)
 
+static void display_cleanup(struct display *display)
+{
+       Display *dpy = display->dpy;
+       int n;
+
+       XGrabServer(dpy);
+
+       res = _XRRGetScreenResourcesCurrent(dpy, display->root);
+       if (res != NULL) {
+               for (n = 0; n < res->ncrtc; n++)
+                       disable_crtc(display->dpy, res, res->crtc[n]);
+
+               XRRFreeScreenResources(res);
+       }
+
+       XUngrabServer(dpy);
+}
+
 static void context_cleanup(struct context *ctx)
 {
        Display *dpy = ctx->display->dpy;
        XRRScreenResources *res;
        int i, j;
 
+       for (i = 1; i < ctx->ndisplay; i++)
+               display_cleanup(&ctx.display[i]);
+
        res = _XRRGetScreenResourcesCurrent(dpy, ctx->display->root);
        if (res == NULL)
                return;