randr: Consider panned crtc's when calculating xinerama screen sizes.

- This will allow window managers and applications to actually use the panned area.
This commit is contained in:
Maarten Maathuis 2008-12-19 18:59:27 +01:00
parent f2d1de6c2a
commit 332d65ec7a

View File

@ -267,12 +267,26 @@ RRXineramaWriteCrtc(ClientPtr client, RRCrtcPtr crtc)
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;
ScreenPtr pScreen = crtc->pScreen;
rrScrPrivPtr pScrPriv = rrGetScrPriv(pScreen);
BoxRec panned_area;
/* Check to see if crtc is panned and return the full area when applicable. */
if (pScrPriv && pScrPriv->rrGetPanning &&
pScrPriv->rrGetPanning (pScreen, crtc, &panned_area, NULL, NULL) &&
(panned_area.x2 > panned_area.x1) && (panned_area.y2 > panned_area.y1)) {
scratch.x_org = panned_area.x1;
scratch.y_org = panned_area.y1;
scratch.width = panned_area.x2 - panned_area.x1;
scratch.height = panned_area.y2 - panned_area.y1;
} else {
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);
@ -313,7 +327,6 @@ ProcRRXineramaQueryScreens(ClientPtr client)
if(rep.number) {
rrScrPriv(pScreen);
xXineramaScreenInfo scratch;
int i;
int has_primary = (pScrPriv->primaryOutput != NULL);