From 2ef02833d614c42693e019a444560e84f501b5dc Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Mon, 8 Dec 2008 17:28:55 -0500 Subject: randr: Mangle compat Xinerama reply based on primary output (cherry picked from commit d7b316e82bc7051f8829b4f4a640f50ae91c2db9) --- randr/rrxinerama.c | 48 +++++++++++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/randr/rrxinerama.c b/randr/rrxinerama.c index 544666ff1..ad40a1e36 100644 --- a/randr/rrxinerama.c +++ b/randr/rrxinerama.c @@ -260,6 +260,30 @@ ProcRRXineramaIsActive(ClientPtr client) return client->noClientException; } +static void +RRXineramaWriteCrtc(ClientPtr client, RRCrtcPtr crtc) +{ + xXineramaScreenInfo scratch; + + if (RRXineramaCrtcActive (crtc)) + { + int width, height; + RRCrtcGetScanoutSize (crtc, &width, &height); + scratch.x_org = crtc->x; + scratch.y_org = crtc->y; + scratch.width = width; + scratch.height = height; + if(client->swapped) { + register int n; + swaps(&scratch.x_org, n); + swaps(&scratch.y_org, n); + swaps(&scratch.width, n); + swaps(&scratch.height, n); + } + WriteToClient(client, sz_XineramaScreenInfo, &scratch); + } +} + int ProcRRXineramaQueryScreens(ClientPtr client) { @@ -291,26 +315,16 @@ ProcRRXineramaQueryScreens(ClientPtr client) rrScrPriv(pScreen); xXineramaScreenInfo scratch; int i; + int has_primary = (pScrPriv->primaryOutput != NULL); + + if (has_primary) { + RRXineramaWriteCrtc(client, pScrPriv->primaryOutput->crtc); + } for(i = 0; i < pScrPriv->numCrtcs; i++) { RRCrtcPtr crtc = pScrPriv->crtcs[i]; - if (RRXineramaCrtcActive (crtc)) - { - int width, height; - RRCrtcGetScanoutSize (crtc, &width, &height); - scratch.x_org = crtc->x; - scratch.y_org = crtc->y; - scratch.width = width; - scratch.height = height; - if(client->swapped) { - register int n; - swaps(&scratch.x_org, n); - swaps(&scratch.y_org, n); - swaps(&scratch.width, n); - swaps(&scratch.height, n); - } - WriteToClient(client, sz_XineramaScreenInfo, (char *)&scratch); - } + if (!has_primary || (crtc != pScrPriv->primaryOutput->crtc)) + RRXineramaWriteCrtc(client, crtc); } } -- cgit v1.2.3