diff -u xorg-server-1.11.4/debian/changelog xorg-server-1.11.4/debian/changelog --- xorg-server-1.11.4/debian/changelog +++ xorg-server-1.11.4/debian/changelog @@ -1,3 +1,10 @@ +xorg-server (2:1.11.4-0ubuntu10.11) precise-proposed; urgency=low + + * debian/patches/238-xrandr-fix-panning.patch: disable CRTC cursor + confinement when panning is enabled. (LP: #883319) + + -- Marc Deslauriers Thu, 20 Dec 2012 10:52:41 -0500 + xorg-server (2:1.11.4-0ubuntu10.10) precise-proposed; urgency=low * Add 237-dix-set-the-device-transformation-matrix.patch: Fix pointer diff -u xorg-server-1.11.4/debian/patches/series xorg-server-1.11.4/debian/patches/series --- xorg-server-1.11.4/debian/patches/series +++ xorg-server-1.11.4/debian/patches/series @@ -57,0 +58 @@ +238-xrandr-fix-panning.patch only in patch2: unchanged: --- xorg-server-1.11.4.orig/debian/patches/238-xrandr-fix-panning.patch +++ xorg-server-1.11.4/debian/patches/238-xrandr-fix-panning.patch @@ -0,0 +1,129 @@ +Description: disable CRTC cursor confinement when panning is enabled +Origin: backport, http://cgit.freedesktop.org/xorg/xserver/commit/?id=1bf81af4a6be1113bcc3b940ab264d5c9e0f0c5d +Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/883319 +Bug: https://bugs.freedesktop.org/show_bug.cgi?id=39949 + +Index: xorg-server-1.11.4/hw/xfree86/modes/xf86RandR12.c +=================================================================== +--- xorg-server-1.11.4.orig/hw/xfree86/modes/xf86RandR12.c 2012-12-20 10:46:57.594909196 -0500 ++++ xorg-server-1.11.4/hw/xfree86/modes/xf86RandR12.c 2012-12-20 10:52:27.706917648 -0500 +@@ -60,6 +60,9 @@ + * See https://bugs.freedesktop.org/show_bug.cgi?id=21554 + */ + xf86EnterVTProc *orig_EnterVT; ++ ++ Bool panning; ++ ConstrainCursorHarderProcPtr orig_ConstrainCursorHarder; + } XF86RandRInfoRec, *XF86RandRInfoPtr; + + #ifdef RANDR_12_INTERFACE +@@ -678,6 +681,10 @@ + return TRUE; + } + ++#define PANNING_ENABLED(crtc) \ ++ ((crtc)->panningTotalArea.x2 > (crtc)->panningTotalArea.x1 || \ ++ (crtc)->panningTotalArea.y2 > (crtc)->panningTotalArea.y1) ++ + static Bool + xf86RandR12ScreenSetSize (ScreenPtr pScreen, + CARD16 width, +@@ -691,6 +698,7 @@ + WindowPtr pRoot = pScreen->root; + PixmapPtr pScrnPix; + Bool ret = FALSE; ++ Bool panning = FALSE; + int c; + + if (xf86RandR12Key) { +@@ -711,8 +719,7 @@ + /* Update panning information */ + for (c = 0; c < config->num_crtc; c++) { + xf86CrtcPtr crtc = config->crtc[c]; +- if (crtc->panningTotalArea.x2 > crtc->panningTotalArea.x1 || +- crtc->panningTotalArea.y2 > crtc->panningTotalArea.y1) { ++ if (PANNING_ENABLED (crtc)) { + if (crtc->panningTotalArea.x2 > crtc->panningTrackingArea.x1) + crtc->panningTotalArea.x2 += width - pScreen->width; + if (crtc->panningTotalArea.y2 > crtc->panningTrackingArea.y1) +@@ -723,6 +730,7 @@ + crtc->panningTrackingArea.y2 += height - pScreen->height; + xf86RandR13VerifyPanningArea (crtc, width, height); + xf86RandR13Pan (crtc, randrp->pointerX, randrp->pointerY); ++ panning = TRUE; + } + } + +@@ -930,6 +938,7 @@ + randrp = XF86RANDRINFO(pScreen); + #if RANDR_12_INTERFACE + xf86Screens[pScreen->myNum]->EnterVT = randrp->orig_EnterVT; ++ pScreen->ConstrainCursorHarder = randrp->orig_ConstrainCursorHarder; + #endif + + free(randrp); +@@ -1234,6 +1243,7 @@ + } + xf86RandR13VerifyPanningArea (crtc, pScreen->width, pScreen->height); + xf86RandR13Pan (crtc, randrp->pointerX, randrp->pointerY); ++ randrp->panning = PANNING_ENABLED (crtc); + /* + * Save the last successful setting for EnterVT + */ +@@ -1667,7 +1677,7 @@ + BoxRec oldTotalArea; + BoxRec oldTrackingArea; + INT16 oldBorder[4]; +- ++ Bool oldPanning = randrp->panning; + + if (crtc->version < 2) + return FALSE; +@@ -1685,12 +1695,14 @@ + + if (xf86RandR13VerifyPanningArea (crtc, pScreen->width, pScreen->height)) { + xf86RandR13Pan (crtc, randrp->pointerX, randrp->pointerY); ++ randrp->panning = PANNING_ENABLED (crtc); + 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)); ++ randrp->panning = oldPanning; + return FALSE; + } + } +@@ -1775,6 +1787,21 @@ + return RRGetInfo (pScreen, TRUE); /* force a re-probe of outputs and notify clients about changes */ + } + ++static void ++xf86RandR13ConstrainCursorHarder(DeviceIntPtr dev, ScreenPtr screen, int mode, int *x, int *y) ++{ ++ XF86RandRInfoPtr randrp = XF86RANDRINFO(screen); ++ ++ if (randrp->panning) ++ return; ++ ++ if (randrp->orig_ConstrainCursorHarder) { ++ screen->ConstrainCursorHarder = randrp->orig_ConstrainCursorHarder; ++ screen->ConstrainCursorHarder(dev, screen, mode, x, y); ++ screen->ConstrainCursorHarder = xf86RandR13ConstrainCursorHarder; ++ } ++} ++ + static Bool + xf86RandR12Init12 (ScreenPtr pScreen) + { +@@ -1803,6 +1830,10 @@ + randrp->orig_EnterVT = pScrn->EnterVT; + pScrn->EnterVT = xf86RandR12EnterVT; + ++ randrp->panning = FALSE; ++ randrp->orig_ConstrainCursorHarder = pScreen->ConstrainCursorHarder; ++ pScreen->ConstrainCursorHarder = xf86RandR13ConstrainCursorHarder; ++ + if (!xf86RandR12CreateObjects12 (pScreen)) + return FALSE; +