summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Hopf <mhopf@suse.de>2008-12-04 16:28:40 +0100
committerKeith Packard <keithp@keithp.com>2008-12-09 20:56:57 -0800
commit97e8a75ce3c70e7a83028b256b6884084f5e196b (patch)
treef6bd04e75f5d89dcdd4dfd620297a4a0d690ded9
parent6189f0832ecd6930608f5b253e534bb104174694 (diff)
randr: Don't change panning parameters if verification fails.
(cherry picked from commit 219c26ce0c65625d55cfd943ec66fe94a1a0ddfd) Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--hw/xfree86/modes/xf86RandR12.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
index 0e7a5ec03..0b1dcb564 100644
--- a/hw/xfree86/modes/xf86RandR12.c
+++ b/hw/xfree86/modes/xf86RandR12.c
@@ -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