diff -ru xorg-server-1.11.4.orig/randr/randr.c xorg-server-1.11.4/randr/randr.c --- xorg-server-1.11.4.orig/randr/randr.c 2011-04-03 23:19:50.000000000 -0400 +++ xorg-server-1.11.4/randr/randr.c 2012-01-31 14:51:35.000000000 -0500 @@ -270,8 +270,6 @@ wrap (pScrPriv, pScreen, CloseScreen, RRCloseScreen); - pScreen->ConstrainCursorHarder = RRConstrainCursorHarder; - pScrPriv->numOutputs = 0; pScrPriv->outputs = NULL; pScrPriv->numCrtcs = 0; diff -ru xorg-server-1.11.4.orig/randr/randrstr.h xorg-server-1.11.4/randr/randrstr.h --- xorg-server-1.11.4.orig/randr/randrstr.h 2011-04-03 23:19:50.000000000 -0400 +++ xorg-server-1.11.4/randr/randrstr.h 2012-01-31 14:51:35.000000000 -0500 @@ -297,7 +297,6 @@ int rate; int size; #endif - Bool discontiguous; } rrScrPrivRec, *rrScrPrivPtr; extern _X_EXPORT DevPrivateKeyRec rrPrivKeyRec; @@ -701,9 +700,6 @@ int ProcRRSetPanning (ClientPtr client); -void -RRConstrainCursorHarder (DeviceIntPtr, ScreenPtr, int, int *, int *); - /* rrdispatch.c */ extern _X_EXPORT Bool RRClientKnowsRates (ClientPtr pClient); diff -ru xorg-server-1.11.4.orig/randr/rrcrtc.c xorg-server-1.11.4/randr/rrcrtc.c --- xorg-server-1.11.4.orig/randr/rrcrtc.c 2011-12-17 23:44:54.000000000 -0500 +++ xorg-server-1.11.4/randr/rrcrtc.c 2012-01-31 14:51:46.000000000 -0500 @@ -1,6 +1,5 @@ /* * Copyright © 2006 Keith Packard - * Copyright 2010 Red Hat, Inc * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -23,7 +22,6 @@ #include "randrstr.h" #include "swaprep.h" -#include "mipointer.h" RESTYPE RRCrtcType; @@ -294,92 +292,6 @@ return FALSE; } -static void -crtc_bounds(RRCrtcPtr crtc, int *left, int *right, int *top, int *bottom) -{ - *left = crtc->x; - *top = crtc->y; - - switch (crtc->rotation) { - case RR_Rotate_0: - case RR_Rotate_180: - default: - *right = crtc->x + crtc->mode->mode.width; - *bottom = crtc->y + crtc->mode->mode.height; - return; - case RR_Rotate_90: - case RR_Rotate_270: - *right = crtc->x + crtc->mode->mode.height; - *bottom = crtc->y + crtc->mode->mode.width; - return; - } -} - -/* overlapping counts as adjacent */ -static Bool -crtcs_adjacent(const RRCrtcPtr a, const RRCrtcPtr b) -{ - /* left, right, top, bottom... */ - int al, ar, at, ab; - int bl, br, bt, bb; - int cl, cr, ct, cb; /* the overlap, if any */ - - crtc_bounds(a, &al, &ar, &at, &ab); - crtc_bounds(b, &bl, &br, &bt, &bb); - - cl = max(al, bl); - cr = min(ar, br); - ct = max(at, bt); - cb = min(ab, bb); - - return (cl <= cr) && (ct <= cb); -} - -/* Depth-first search and mark all CRTCs reachable from cur */ -static void -mark_crtcs (rrScrPrivPtr pScrPriv, int *reachable, int cur) -{ - int i; - reachable[cur] = TRUE; - for (i = 0; i < pScrPriv->numCrtcs; ++i) { - if (reachable[i] || !pScrPriv->crtcs[i]->mode) - continue; - if (crtcs_adjacent(pScrPriv->crtcs[cur], pScrPriv->crtcs[i])) - mark_crtcs(pScrPriv, reachable, i); - } -} - -static void -RRComputeContiguity (ScreenPtr pScreen) -{ - rrScrPriv(pScreen); - Bool discontiguous = TRUE; - int i, n = pScrPriv->numCrtcs; - - int *reachable = calloc(n, sizeof(int)); - if (!reachable) - goto out; - - /* Find first enabled CRTC and start search for reachable CRTCs from it */ - for (i = 0; i < n; ++i) { - if (pScrPriv->crtcs[i]->mode) { - mark_crtcs(pScrPriv, reachable, i); - break; - } - } - - /* Check that all enabled CRTCs were marked as reachable */ - for (i = 0; i < n; ++i) - if (pScrPriv->crtcs[i]->mode && !reachable[i]) - goto out; - - discontiguous = FALSE; - -out: - free(reachable); - pScrPriv->discontiguous = discontiguous; -} - /* * Request that the Crtc be reconfigured */ @@ -394,7 +306,6 @@ { ScreenPtr pScreen = crtc->pScreen; Bool ret = FALSE; - Bool recompute = TRUE; rrScrPriv(pScreen); /* See if nothing changed */ @@ -407,7 +318,6 @@ !RRCrtcPendingProperties (crtc) && !RRCrtcPendingTransform (crtc)) { - recompute = FALSE; ret = TRUE; } else @@ -471,10 +381,6 @@ RRPostPendingProperties (outputs[o]); } } - - if (recompute) - RRComputeContiguity(pScreen); - return ret; } @@ -1443,55 +1349,3 @@ free(reply); return Success; } - -void -RRConstrainCursorHarder(DeviceIntPtr pDev, ScreenPtr pScreen, int mode, int *x, int *y) -{ - rrScrPriv (pScreen); - int i; - - /* intentional dead space -> let it float */ - if (pScrPriv->discontiguous) - return; - - /* if we're moving inside a crtc, we're fine */ - for (i = 0; i < pScrPriv->numCrtcs; i++) { - RRCrtcPtr crtc = pScrPriv->crtcs[i]; - - int left, right, top, bottom; - - if (!crtc->mode) - continue; - - crtc_bounds(crtc, &left, &right, &top, &bottom); - - if ((*x >= left) && (*x < right) && (*y >= top) && (*y < bottom)) - return; - } - - /* if we're trying to escape, clamp to the CRTC we're coming from */ - for (i = 0; i < pScrPriv->numCrtcs; i++) { - RRCrtcPtr crtc = pScrPriv->crtcs[i]; - int nx, ny; - int left, right, top, bottom; - - if (!crtc->mode) - continue; - - crtc_bounds(crtc, &left, &right, &top, &bottom); - miPointerGetPosition(pDev, &nx, &ny); - - if ((nx >= left) && (nx < right) && (ny >= top) && (ny < bottom)) { - if (*x < left) - *x = left; - if (*x >= right) - *x = right - 1; - if (*y < top) - *y = top; - if (*y >= bottom) - *y = bottom - 1; - - return; - } - } -}