randr: Don't change panning parameters if verification fails.

This commit is contained in:
Matthias Hopf 2008-12-04 16:28:40 +01:00
parent 18a8bac1a1
commit 219c26ce0c

View File

@ -1327,20 +1327,35 @@ xf86RandR13SetPanning (ScreenPtr pScreen,
{
XF86RandRInfoPtr randrp = XF86RANDRINFO(pScreen);
xf86CrtcPtr crtc = randr_crtc->devPrivate;
int ret;
BoxRec oldTotalArea;
BoxRec oldTrackingArea;
INT16 oldBorder[4];
if (crtc->version < 2)
return FALSE;
memcpy (&oldTotalArea, &crtc->panningTotalArea, sizeof(BoxRec));
memcpy (&oldTrackingArea, &crtc->panningTrackingArea, sizeof(BoxRec));
memcpy (oldBorder, crtc->panningBorder, 4*sizeof(INT16));
if (totalArea)
memcpy (&crtc->panningTotalArea, totalArea, sizeof(BoxRec));
if (trackingArea)
memcpy (&crtc->panningTrackingArea, trackingArea, sizeof(BoxRec));
if (border)
memcpy (crtc->panningBorder, border, 4*sizeof(INT16));
ret = xf86RandR13VerifyPanningArea (crtc, pScreen->width, pScreen->height);
xf86RandR13Pan (crtc, randrp->pointerX, randrp->pointerY);
return ret;
if (xf86RandR13VerifyPanningArea (crtc, pScreen->width, pScreen->height)) {
xf86RandR13Pan (crtc, randrp->pointerX, randrp->pointerY);
return TRUE;
} else {
/* Restore old settings */
memcpy (&crtc->panningTotalArea, &oldTotalArea, sizeof(BoxRec));
memcpy (&crtc->panningTrackingArea, &oldTrackingArea, sizeof(BoxRec));
memcpy (crtc->panningBorder, oldBorder, 4*sizeof(INT16));
return FALSE;
}
}
static Bool