diff options
author | Matthias Hopf <mhopf@suse.de> | 2008-12-04 16:28:40 +0100 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2008-12-09 20:56:57 -0800 |
commit | 97e8a75ce3c70e7a83028b256b6884084f5e196b (patch) | |
tree | f6bd04e75f5d89dcdd4dfd620297a4a0d690ded9 | |
parent | 6189f0832ecd6930608f5b253e534bb104174694 (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.c | 23 |
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 |