xserver: Branch 'server-1.6-branch' - 10 commits

Keith Packard keithp at kemper.freedesktop.org
Sun Jul 26 13:57:07 PDT 2009


 Xext/saver.c                |    8 +++----
 Xext/security.c             |    4 +--
 Xext/shape.c                |    2 -
 Xext/sync.c                 |    2 -
 Xext/xselinux.c             |    2 -
 Xext/xtest.c                |    6 ++---
 Xi/exevents.c               |    2 -
 composite/compext.c         |   10 ++++-----
 configure.ac                |    6 ++---
 dix/cursor.c                |    8 +++----
 dix/deprecated.c            |   34 +++++++++++++++++++++++--------
 dix/dispatch.c              |   48 ++++++++++++++++++++++----------------------
 dix/dixutils.c              |    4 +--
 dix/events.c                |   12 +++++------
 dix/gc.c                    |    8 +++----
 dix/resource.c              |   39 +++++++++++++++++++++++++++++++----
 dix/window.c                |    8 +++----
 exa/exa_accel.c             |   12 ++++++++++-
 hw/xfree86/modes/xf86Crtc.c |   17 ++-------------
 include/resource.h          |   38 ++++++++++++++++++++++++++--------
 randr/rrscreen.c            |    5 ++--
 randr/rrtransform.c         |    6 ++---
 render/picture.c            |    4 +--
 render/render.c             |    8 +++----
 xfixes/cursor.c             |    4 +--
 xfixes/region.c             |    6 ++---
 26 files changed, 185 insertions(+), 118 deletions(-)

New commits:
commit 87900645c22d6066fe70190ab838a687808db5c3
Author: Dave Airlie <airlied at redhat.com>
Date:   Thu Jun 11 14:21:53 2009 +1000

    xfree86: move didLock assignment down to where the function pointer is valid.
    
    crtc->funcs->lock is NULL, so it's no use calling it here. Move it down so
    it's actually defined before we use it.
    
    Introduced with 6f59a8160042ea145514fdcb410f17f33fd437c2.
    
    Tested-by: Peter Hutterer <peter.hutterer at who-t.net>
    (cherry picked from commit 0de58c88aba7ddd69b04f24ab5b2967c359aa69e)
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index aec904e..e9bde36 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -265,7 +265,6 @@ xf86CrtcSetModeTransform (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotati
 
     adjusted_mode = xf86DuplicateMode(mode);
 
-    didLock = crtc->funcs->lock (crtc);
 
     saved_mode = crtc->mode;
     saved_x = crtc->x;
@@ -295,6 +294,7 @@ xf86CrtcSetModeTransform (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotati
 	goto done;
     }
 
+    didLock = crtc->funcs->lock (crtc);
     /* Pass our mode to the outputs and the CRTC to give them a chance to
      * adjust it according to limitations or output properties, and also
      * a chance to reject the mode entirely.
commit 72c9bc64ff86999a4643663e5699a6547a9e2997
Author: Benjamin Defnet <benjamin.r.defnet at intel.com>
Date:   Wed Jun 10 21:35:48 2009 -0700

    randr: fix operation order so that rotation+transform works
    
    The matrix multiply to combine rotation and projective transforms was being
    done in the wrong order.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>
    (cherry picked from commit b2bf67b61c564a4b92a429ca9ad455403161f33a)
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/randr/rrtransform.c b/randr/rrtransform.c
index 8bdff5a..06f6298 100644
--- a/randr/rrtransform.c
+++ b/randr/rrtransform.c
@@ -251,10 +251,10 @@ RRTransformCompute (int			    x,
 #ifdef RANDR_12_INTERFACE
     if (rr_transform)
     {
-        if (!pixman_transform_multiply (transform, transform, &rr_transform->transform))
+        if (!pixman_transform_multiply (transform, &rr_transform->transform, transform))
 	    overflow = TRUE;
-	pixman_f_transform_multiply (f_transform, f_transform, &rr_transform->f_transform);
-	pixman_f_transform_multiply (f_inverse, &rr_transform->f_inverse, f_inverse);
+	pixman_f_transform_multiply (f_transform, &rr_transform->f_transform, f_transform);
+	pixman_f_transform_multiply (f_inverse, f_inverse, &rr_transform->f_inverse);
     }
 #endif
     /*
commit 7f95d18397757facafcba39e4613b2ed5047c5c4
Author: Benjamin Defnet <benjamin.r.defnet at intel.com>
Date:   Mon Jun 8 21:45:42 2009 -0700

    hw/xf86/modes: Set crtc mode/rotation/transform before calling set_mode_major
    
    This moves code out of each implementation of set_mode_major and back into
    the X server. The real feature here is that the transform is now available
    in the crtc for use by either xf86CrtcRotate or whatever the driver wants to
    do. Without this change, the transform was lost for drivers providing the
    set_mode_major interface.
    
    Note that users of this API will want to stop smashing the transformPresent
    field, and could also stop setting mode/x/y/rotation for new enough X servers,
    but there's no reason to make that change as it will break things when
    running against older X servers.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>
    Acked-by: Daniel Stone <daniel at fooishbar.org>
    (cherry picked from commit 6f59a8160042ea145514fdcb410f17f33fd437c2)
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 24e812e..aec904e 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -255,9 +255,6 @@ xf86CrtcSetModeTransform (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotati
     RRTransformRec	saved_transform;
     Bool		saved_transform_present;
 
-    if (crtc->funcs->set_mode_major)
-	return crtc->funcs->set_mode_major(crtc, mode, rotation, x, y);
-
     crtc->enabled = xf86CrtcInUse (crtc);
 
     if (!crtc->enabled)
@@ -293,6 +290,11 @@ xf86CrtcSetModeTransform (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotati
     } else
 	crtc->transformPresent = FALSE;
 
+    if (crtc->funcs->set_mode_major) {
+	ret = crtc->funcs->set_mode_major(crtc, mode, rotation, x, y);
+	goto done;
+    }
+
     /* Pass our mode to the outputs and the CRTC to give them a chance to
      * adjust it according to limitations or output properties, and also
      * a chance to reject the mode entirely.
commit abc89e2c48a88c29f49fe44d03778deab4b1a3b9
Author: Matthias Hopf <mhopf at suse.de>
Date:   Tue Mar 10 15:49:49 2009 +0100

    randr: Nuke broken set_origin shortcut
    
    Shortcut is impossible to implement this way, because we don't know for sure
    whether the crtc of an output has changed or not.
    (cherry picked from commit cadf65a6e190a8952ad3cc216dc9ea55241de91a)
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 84d3cac..24e812e 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -293,19 +293,6 @@ xf86CrtcSetModeTransform (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotati
     } else
 	crtc->transformPresent = FALSE;
 
-    if (crtc->funcs->set_origin &&
-	memcmp (mode, &saved_mode, sizeof(saved_mode)) == 0 &&
-	saved_rotation == rotation &&
-	saved_transform_present == crtc->transformPresent &&
-	(!crtc->transformPresent || RRTransformEqual(&saved_transform, &crtc->transform)))
-    {
-	if (!xf86CrtcRotate (crtc))
-		goto done;
-	crtc->funcs->set_origin (crtc, crtc->x, crtc->y);
-	ret = TRUE;
-	goto done;
-    }
-
     /* Pass our mode to the outputs and the CRTC to give them a chance to
      * adjust it according to limitations or output properties, and also
      * a chance to reject the mode entirely.
commit b1eed8970f7c5b07152dbc6b7dcc4c8504aeb67c
Author: Julien Cristau <jcristau at debian.org>
Date:   Fri May 22 09:54:38 2009 +0200

    randr: fix server crash in RRGetScreenInfo
    
    We don't return rates to randr < 1.1 clients, so don't allocate space
    for them.  This fixes a FatalError due to not all allocated space being
    used.
    
    X.Org bug#21861 <http://bugs.freedesktop.org/show_bug.cgi?id=21861>
    
    Reported-by: Guillaume Quintin <coincoin169g at gmail.com>
    Signed-off-by: Julien Cristau <jcristau at debian.org>
    (cherry picked from commit 12e725d08b4cf7dbb7f09b9ec09fa1b621156ea9)
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/randr/rrscreen.c b/randr/rrscreen.c
index dd645a9..e7eb75c 100644
--- a/randr/rrscreen.c
+++ b/randr/rrscreen.c
@@ -664,8 +664,9 @@ ProcRRGetScreenInfo (ClientPtr client)
 	rep.sizeID = pData->size;
 	rep.rate = pData->refresh;
 
-	extraLen = (rep.nSizes * sizeof (xScreenSizes) +
-		    rep.nrateEnts * sizeof (CARD16));
+	extraLen = rep.nSizes * sizeof (xScreenSizes);
+	if (has_rate)
+		extraLen += rep.nrateEnts * sizeof (CARD16);
 
 	if (extraLen)
 	{
commit 1addf6fe235f8537024140aff56dffb4738701a7
Author: Keith Packard <keithp at keithp.com>
Date:   Wed Aug 6 15:26:24 2008 -0700

    Replace dixLookupResource by dixLookupResourceBy{Type,Class}
    
    dixLookupResource attempted to automatically detect whether the caller
    wanted a lookup by-type or by-class, unfortunately, it guessed wrong for
    RT_NONE. Instead of trying to make the guess better, this patch just reverts
    the unification and creates separate functions for each operation.
    (cherry picked from commit f8dd80d13bb5313a11b38b280f8ad3e22f0a6300)
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xext/saver.c b/Xext/saver.c
index 0bdcb8b..86db7b0 100644
--- a/Xext/saver.c
+++ b/Xext/saver.c
@@ -1054,7 +1054,7 @@ ScreenSaverSetAttributes (ClientPtr client)
 	    }
             else
 	    {	
-		ret = dixLookupResource((pointer *)&pPixmap, pixID, RT_PIXMAP,
+		ret = dixLookupResourceByType((pointer *)&pPixmap, pixID, RT_PIXMAP,
 					client, DixReadAccess);
 		if (ret == Success)
 		{
@@ -1092,7 +1092,7 @@ ScreenSaverSetAttributes (ClientPtr client)
 	    }
 	    else
 	    {	
-		ret = dixLookupResource((pointer *)&pPixmap, pixID, RT_PIXMAP,
+		ret = dixLookupResourceByType((pointer *)&pPixmap, pixID, RT_PIXMAP,
 					client, DixReadAccess);
 		if (ret == Success)
 		{
@@ -1186,7 +1186,7 @@ ScreenSaverSetAttributes (ClientPtr client)
 	    break;
 	case CWColormap:
 	    cmap = (Colormap) *pVlist;
-	    ret = dixLookupResource((pointer *)&pCmap, cmap, RT_COLORMAP,
+	    ret = dixLookupResourceByType((pointer *)&pCmap, cmap, RT_COLORMAP,
 				    client, DixUseAccess);
 	    if (ret != Success)
 	    {
@@ -1210,7 +1210,7 @@ ScreenSaverSetAttributes (ClientPtr client)
 	    }
 	    else
 	    {
-		ret = dixLookupResource((pointer *)&pCursor, cursorID,
+		ret = dixLookupResourceByType((pointer *)&pCursor, cursorID,
 					RT_CURSOR, client, DixUseAccess);
 	    	if (ret != Success)
 	    	{
diff --git a/Xext/security.c b/Xext/security.c
index b9f411e..1a90a82 100644
--- a/Xext/security.c
+++ b/Xext/security.c
@@ -1023,7 +1023,7 @@ SecurityClientState(CallbackListPtr *pcbl, pointer unused, pointer calldata)
 
     case ClientStateRunning:
 	state->authId = AuthorizationIDOfClient(pci->client);
-	rc = dixLookupResource((pointer *)&pAuth, state->authId,
+	rc = dixLookupResourceByType((pointer *)&pAuth, state->authId,
 			       SecurityAuthorizationResType, serverClient,
 			       DixGetAttrAccess);
 	if (rc == Success) {
@@ -1038,7 +1038,7 @@ SecurityClientState(CallbackListPtr *pcbl, pointer unused, pointer calldata)
 
     case ClientStateGone:
     case ClientStateRetained:
-	rc = dixLookupResource((pointer *)&pAuth, state->authId,
+	rc = dixLookupResourceByType((pointer *)&pAuth, state->authId,
 			       SecurityAuthorizationResType, serverClient,
 			       DixGetAttrAccess);
 	if (rc == Success) {
diff --git a/Xext/shape.c b/Xext/shape.c
index aaef0cb..332e587 100644
--- a/Xext/shape.c
+++ b/Xext/shape.c
@@ -428,7 +428,7 @@ ProcShapeMask (client)
     if (stuff->src == None)
 	srcRgn = 0;
     else {
-	rc = dixLookupResource((pointer *)&pPixmap, stuff->src, RT_PIXMAP,
+	rc = dixLookupResourceByType((pointer *)&pPixmap, stuff->src, RT_PIXMAP,
 			       client, DixReadAccess);
         if (rc != Success)
 	    return (rc == BadValue) ? BadPixmap : rc;
diff --git a/Xext/sync.c b/Xext/sync.c
index 1b37366..424361e 100644
--- a/Xext/sync.c
+++ b/Xext/sync.c
@@ -440,7 +440,7 @@ SyncInitTrigger(client, pTrigger, counter, changes)
     {
 	if (counter == None)
 	    pCounter = NULL;
-	else if (Success != (rc = dixLookupResource((pointer *)&pCounter,
+	else if (Success != (rc = dixLookupResourceByType ((pointer *)&pCounter,
 				counter, RTCounter, client, DixReadAccess)))
 	{
 	    client->errorValue = counter;
diff --git a/Xext/xselinux.c b/Xext/xselinux.c
index 6c99c29..4f4254a 100644
--- a/Xext/xselinux.c
+++ b/Xext/xselinux.c
@@ -557,7 +557,7 @@ SELinuxLabelInitial(void)
 	SELinuxScreen(NULL, NULL, &srec);
 
 	/* Do the default colormap */
-	dixLookupResource(&unused, screenInfo.screens[i]->defColormap,
+	dixLookupResourceByType(&unused, screenInfo.screens[i]->defColormap,
 			  RT_COLORMAP, serverClient, DixCreateAccess);
     }
 }
diff --git a/Xext/xtest.c b/Xext/xtest.c
index 3ff02ed..9cfe8ca 100644
--- a/Xext/xtest.c
+++ b/Xext/xtest.c
@@ -124,8 +124,8 @@ ProcXTestCompareCursor(client)
     else if (stuff->cursor == XTestCurrentCursor)
         pCursor = GetSpriteCursor(ptr);
     else {
-        rc = dixLookupResource((pointer *)&pCursor, stuff->cursor, RT_CURSOR,
-                client, DixReadAccess);
+        rc = dixLookupResourceByType((pointer *)&pCursor, stuff->cursor, RT_CURSOR,
+				     client, DixReadAccess);
         if (rc != Success)
         {
             client->errorValue = stuff->cursor;
@@ -158,7 +158,7 @@ ProcXTestFakeInput(client)
     int numValuators = 0;
     int firstValuator = 0;
     EventListPtr events;
-    int nevents;
+    int nevents = 0;
     int i;
     int base = 0;
     int flags = 0;
diff --git a/Xi/exevents.c b/Xi/exevents.c
index 398a26b..0bb84f8 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -1349,7 +1349,7 @@ GrabButton(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode,
     if (rcursor == None)
 	cursor = NullCursor;
     else {
-	rc = dixLookupResource((pointer *)&cursor, rcursor, RT_CURSOR,
+	rc = dixLookupResourceByType((pointer *)&cursor, rcursor, RT_CURSOR,
 			       client, DixUseAccess);
 	if (rc != Success)
 	{
diff --git a/composite/compext.c b/composite/compext.c
index c154402..4fff20e 100644
--- a/composite/compext.c
+++ b/composite/compext.c
@@ -144,7 +144,7 @@ ProcCompositeRedirectWindow (ClientPtr client)
     REQUEST(xCompositeRedirectWindowReq);
 
     REQUEST_SIZE_MATCH(xCompositeRedirectWindowReq);
-    rc = dixLookupResource((pointer *)&pWin, stuff->window, RT_WINDOW, client,
+    rc = dixLookupResourceByType((pointer *)&pWin, stuff->window, RT_WINDOW, client,
 			   DixSetAttrAccess|DixManageAccess|DixBlendAccess);
     if (rc != Success)
     {
@@ -162,7 +162,7 @@ ProcCompositeRedirectSubwindows (ClientPtr client)
     REQUEST(xCompositeRedirectSubwindowsReq);
 
     REQUEST_SIZE_MATCH(xCompositeRedirectSubwindowsReq);
-    rc = dixLookupResource((pointer *)&pWin, stuff->window, RT_WINDOW, client,
+    rc = dixLookupResourceByType((pointer *)&pWin, stuff->window, RT_WINDOW, client,
 			   DixSetAttrAccess|DixManageAccess|DixBlendAccess);
     if (rc != Success)
     {
@@ -214,7 +214,7 @@ ProcCompositeCreateRegionFromBorderClip (ClientPtr client)
     REQUEST(xCompositeCreateRegionFromBorderClipReq);
 
     REQUEST_SIZE_MATCH(xCompositeCreateRegionFromBorderClipReq);
-    rc = dixLookupResource((pointer *)&pWin, stuff->window, RT_WINDOW, client,
+    rc = dixLookupResourceByType((pointer *)&pWin, stuff->window, RT_WINDOW, client,
 			   DixGetAttrAccess);
     if (rc != Success)
     {
@@ -250,7 +250,7 @@ ProcCompositeNameWindowPixmap (ClientPtr client)
     REQUEST(xCompositeNameWindowPixmapReq);
 
     REQUEST_SIZE_MATCH(xCompositeNameWindowPixmapReq);
-    rc = dixLookupResource((pointer *)&pWin, stuff->window, RT_WINDOW, client,
+    rc = dixLookupResourceByType((pointer *)&pWin, stuff->window, RT_WINDOW, client,
 			   DixGetAttrAccess);
     if (rc != Success)
     {
@@ -298,7 +298,7 @@ ProcCompositeGetOverlayWindow (ClientPtr client)
     int rc;
 
     REQUEST_SIZE_MATCH(xCompositeGetOverlayWindowReq);
-    rc = dixLookupResource((pointer *)&pWin, stuff->window, RT_WINDOW, client,
+    rc = dixLookupResourceByType((pointer *)&pWin, stuff->window, RT_WINDOW, client,
 			   DixGetAttrAccess);
     if (rc != Success)
     {
diff --git a/dix/cursor.c b/dix/cursor.c
index 81540fd..0017c66 100644
--- a/dix/cursor.c
+++ b/dix/cursor.c
@@ -298,15 +298,15 @@ AllocGlyphCursor(Font source, unsigned sourceChar, Font mask, unsigned maskChar,
     GlyphSharePtr pShare;
     DeviceIntPtr pDev;
 
-    rc = dixLookupResource((pointer *)&sourcefont, source, RT_FONT, client,
-			   DixUseAccess);
+    rc = dixLookupResourceByType((pointer *)&sourcefont, source, RT_FONT, client,
+				 DixUseAccess);
     if (rc != Success)
     {
 	client->errorValue = source;
 	return (rc == BadValue) ? BadFont : rc;
     }
-    rc = dixLookupResource((pointer *)&maskfont, mask, RT_FONT, client,
-			   DixUseAccess);
+    rc = dixLookupResourceByType((pointer *)&maskfont, mask, RT_FONT, client,
+				 DixUseAccess);
     if (rc != Success && mask != None)
     {
 	client->errorValue = mask;
diff --git a/dix/deprecated.c b/dix/deprecated.c
index 2bb8119..4e20d60 100644
--- a/dix/deprecated.c
+++ b/dix/deprecated.c
@@ -115,48 +115,66 @@ LookupClient(XID id, ClientPtr client)
     return (i == Success) ? pClient : NULL;
 }
 
-/* replaced by dixLookupResource */
+/* replaced by dixLookupResourceByType */
 _X_EXPORT pointer
 SecurityLookupIDByType(ClientPtr client, XID id, RESTYPE rtype,
 		       Mask access_mode)
 {
     pointer retval;
-    int i = dixLookupResource(&retval, id, rtype, client, access_mode);
+    int i = dixLookupResourceByType(&retval, id, rtype, client, access_mode);
     static int warn = 1;
     if (warn > 0 && --warn)
 	ErrorF("Warning: LookupIDByType()/SecurityLookupIDByType() "
 	       "are deprecated.  Please convert your driver/module "
-	       "to use dixLookupResource().\n");
+	       "to use dixLookupResourceByType().\n");
     return (i == Success) ? retval : NULL;
 }
 
-/* replaced by dixLookupResource */
+/* replaced by dixLookupResourceByClass */
 _X_EXPORT pointer
 SecurityLookupIDByClass(ClientPtr client, XID id, RESTYPE classes,
 			Mask access_mode)
 {
     pointer retval;
-    int i = dixLookupResource(&retval, id, classes, client, access_mode);
+    int i = dixLookupResourceByClass(&retval, id, classes, client, access_mode);
     static int warn = 1;
     if (warn > 0 && --warn)
 	ErrorF("Warning: LookupIDByClass()/SecurityLookupIDByClass() "
 	       "are deprecated.  Please convert your driver/module "
-	       "to use dixLookupResource().\n");
+	       "to use dixLookupResourceByClass().\n");
     return (i == Success) ? retval : NULL;
 }
 
-/* replaced by dixLookupResource */
+/* replaced by dixLookupResourceByType */
 _X_EXPORT pointer
 LookupIDByType(XID id, RESTYPE rtype)
 {
     return SecurityLookupIDByType(NullClient, id, rtype, DixUnknownAccess);
 }
 
-/* replaced by dixLookupResource */
+/* replaced by dixLookupResourceByClass */
 _X_EXPORT pointer
 LookupIDByClass(XID id, RESTYPE classes)
 {
     return SecurityLookupIDByClass(NullClient, id, classes, DixUnknownAccess);
 }
 
+/* replaced by dixLookupResourceBy{Type,Class} */
+_X_EXPORT int
+dixLookupResource (pointer *result, XID id, RESTYPE rtype,
+		   ClientPtr client, Mask mode)
+{
+    Bool istype = ((rtype & TypeMask) && (rtype != RC_ANY)) || (rtype == RT_NONE);
+
+    static int warn = 1;
+    if (warn > 0 && --warn)
+	ErrorF("Warning: dixLookupResource() "
+	       "is deprecated.  Please convert your driver/module "
+	       "to use dixLookupResourceByType/dixLookupResourceByClass().\n");
+    if (istype)
+	return dixLookupResourceByType (result, id, rtype, client, mode);
+    else
+	return dixLookupResourceByClass (result, id, rtype, client, mode);
+}
+
 /* end deprecated functions */
diff --git a/dix/dispatch.c b/dix/dispatch.c
index 66f8f79..1ca08b6 100644
--- a/dix/dispatch.c
+++ b/dix/dispatch.c
@@ -1119,11 +1119,11 @@ ProcQueryFont(ClientPtr client)
     REQUEST_SIZE_MATCH(xResourceReq);
 
     client->errorValue = stuff->id;		/* EITHER font or gc */
-    rc = dixLookupResource((pointer *)&pFont, stuff->id, RT_FONT, client,
-			   DixGetAttrAccess);
+    rc = dixLookupResourceByType((pointer *)&pFont, stuff->id, RT_FONT, client,
+				 DixGetAttrAccess);
     if (rc == BadValue) {
-	rc = dixLookupResource((pointer *)&pGC, stuff->id, RT_GC, client,
-			       DixGetAttrAccess);
+	rc = dixLookupResourceByType((pointer *)&pGC, stuff->id, RT_GC, client,
+				     DixGetAttrAccess);
 	if (rc == Success)
 	    pFont = pGC->font;
     }
@@ -1177,10 +1177,10 @@ ProcQueryTextExtents(ClientPtr client)
     REQUEST_AT_LEAST_SIZE(xQueryTextExtentsReq);
         
     client->errorValue = stuff->fid;		/* EITHER font or gc */
-    rc = dixLookupResource((pointer *)&pFont, stuff->fid, RT_FONT, client,
-			   DixGetAttrAccess);
+    rc = dixLookupResourceByType((pointer *)&pFont, stuff->fid, RT_FONT, client,
+				 DixGetAttrAccess);
     if (rc == BadValue) {
-	rc = dixLookupResource((pointer *)&pGC, stuff->fid, RT_GC, client,
+	rc = dixLookupResourceByType((pointer *)&pGC, stuff->fid, RT_GC, client,
 			       DixGetAttrAccess);
 	if (rc == Success)
 	    pFont = pGC->font;
@@ -1325,7 +1325,7 @@ ProcFreePixmap(ClientPtr client)
     REQUEST(xResourceReq);
     REQUEST_SIZE_MATCH(xResourceReq);
 
-    rc = dixLookupResource((pointer *)&pMap, stuff->id, RT_PIXMAP, client,
+    rc = dixLookupResourceByType((pointer *)&pMap, stuff->id, RT_PIXMAP, client,
 			   DixDestroyAccess);
     if (rc == Success)
     {
@@ -2271,7 +2271,7 @@ ProcFreeColormap(ClientPtr client)
     REQUEST(xResourceReq);
 
     REQUEST_SIZE_MATCH(xResourceReq);
-    rc = dixLookupResource((pointer *)&pmap, stuff->id, RT_COLORMAP, client,
+    rc = dixLookupResourceByType((pointer *)&pmap, stuff->id, RT_COLORMAP, client,
 			   DixDestroyAccess);
     if (rc == Success)
     {
@@ -2299,7 +2299,7 @@ ProcCopyColormapAndFree(ClientPtr client)
     REQUEST_SIZE_MATCH(xCopyColormapAndFreeReq);
     mid = stuff->mid;
     LEGAL_NEW_RESOURCE(mid, client);
-    rc = dixLookupResource((pointer *)&pSrcMap, stuff->srcCmap, RT_COLORMAP,
+    rc = dixLookupResourceByType((pointer *)&pSrcMap, stuff->srcCmap, RT_COLORMAP,
 			   client, DixReadAccess|DixRemoveAccess);
     if (rc == Success)
     {
@@ -2324,7 +2324,7 @@ ProcInstallColormap(ClientPtr client)
     REQUEST(xResourceReq);
     REQUEST_SIZE_MATCH(xResourceReq);
 
-    rc = dixLookupResource((pointer *)&pcmp, stuff->id, RT_COLORMAP, client,
+    rc = dixLookupResourceByType((pointer *)&pcmp, stuff->id, RT_COLORMAP, client,
 			   DixInstallAccess);
     if (rc != Success)
 	goto out;
@@ -2349,7 +2349,7 @@ ProcUninstallColormap(ClientPtr client)
     REQUEST(xResourceReq);
     REQUEST_SIZE_MATCH(xResourceReq);
 
-    rc = dixLookupResource((pointer *)&pcmp, stuff->id, RT_COLORMAP, client,
+    rc = dixLookupResourceByType((pointer *)&pcmp, stuff->id, RT_COLORMAP, client,
 			   DixUninstallAccess);
     if (rc != Success)
 	goto out;
@@ -2416,7 +2416,7 @@ ProcAllocColor (ClientPtr client)
     REQUEST(xAllocColorReq);
 
     REQUEST_SIZE_MATCH(xAllocColorReq);
-    rc = dixLookupResource((pointer *)&pmap, stuff->cmap, RT_COLORMAP, client,
+    rc = dixLookupResourceByType((pointer *)&pmap, stuff->cmap, RT_COLORMAP, client,
 			   DixAddAccess);
     if (rc == Success)
     {
@@ -2457,7 +2457,7 @@ ProcAllocNamedColor (ClientPtr client)
     REQUEST(xAllocNamedColorReq);
 
     REQUEST_FIXED_SIZE(xAllocNamedColorReq, stuff->nbytes);
-    rc = dixLookupResource((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client,
+    rc = dixLookupResourceByType((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client,
 			   DixAddAccess);
     if (rc == Success)
     {
@@ -2508,7 +2508,7 @@ ProcAllocColorCells (ClientPtr client)
     REQUEST(xAllocColorCellsReq);
 
     REQUEST_SIZE_MATCH(xAllocColorCellsReq);
-    rc = dixLookupResource((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client,
+    rc = dixLookupResourceByType((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client,
 			   DixAddAccess);
     if (rc == Success)
     {
@@ -2575,7 +2575,7 @@ ProcAllocColorPlanes(ClientPtr client)
     REQUEST(xAllocColorPlanesReq);
 
     REQUEST_SIZE_MATCH(xAllocColorPlanesReq);
-    rc = dixLookupResource((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client,
+    rc = dixLookupResourceByType((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client,
 			   DixAddAccess);
     if (rc == Success)
     {
@@ -2640,7 +2640,7 @@ ProcFreeColors(ClientPtr client)
     REQUEST(xFreeColorsReq);
 
     REQUEST_AT_LEAST_SIZE(xFreeColorsReq);
-    rc = dixLookupResource((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client,
+    rc = dixLookupResourceByType((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client,
 			   DixRemoveAccess);
     if (rc == Success)
     {
@@ -2675,7 +2675,7 @@ ProcStoreColors (ClientPtr client)
     REQUEST(xStoreColorsReq);
 
     REQUEST_AT_LEAST_SIZE(xStoreColorsReq);
-    rc = dixLookupResource((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client,
+    rc = dixLookupResourceByType((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client,
 			   DixWriteAccess);
     if (rc == Success)
     {
@@ -2709,7 +2709,7 @@ ProcStoreNamedColor (ClientPtr client)
     REQUEST(xStoreNamedColorReq);
 
     REQUEST_FIXED_SIZE(xStoreNamedColorReq, stuff->nbytes);
-    rc = dixLookupResource((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client,
+    rc = dixLookupResourceByType((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client,
 			   DixWriteAccess);
     if (rc == Success)
     {
@@ -2743,7 +2743,7 @@ ProcQueryColors(ClientPtr client)
     REQUEST(xQueryColorsReq);
 
     REQUEST_AT_LEAST_SIZE(xQueryColorsReq);
-    rc = dixLookupResource((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client,
+    rc = dixLookupResourceByType((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client,
 			   DixReadAccess);
     if (rc == Success)
     {
@@ -2795,7 +2795,7 @@ ProcLookupColor(ClientPtr client)
     REQUEST(xLookupColorReq);
 
     REQUEST_FIXED_SIZE(xLookupColorReq, stuff->nbytes);
-    rc = dixLookupResource((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client,
+    rc = dixLookupResourceByType((pointer *)&pcmp, stuff->cmap, RT_COLORMAP, client,
 			   DixReadAccess);
     if (rc == Success)
     {
@@ -2844,14 +2844,14 @@ ProcCreateCursor (ClientPtr client)
     REQUEST_SIZE_MATCH(xCreateCursorReq);
     LEGAL_NEW_RESOURCE(stuff->cid, client);
 
-    rc = dixLookupResource((pointer *)&src, stuff->source, RT_PIXMAP, client,
+    rc = dixLookupResourceByType((pointer *)&src, stuff->source, RT_PIXMAP, client,
 			   DixReadAccess);
     if (rc != Success) {
 	client->errorValue = stuff->source;
 	return (rc == BadValue) ? BadPixmap : rc;
     }
 
-    rc = dixLookupResource((pointer *)&msk, stuff->mask, RT_PIXMAP, client,
+    rc = dixLookupResourceByType((pointer *)&msk, stuff->mask, RT_PIXMAP, client,
 			   DixReadAccess);
     if (rc != Success)
     {
@@ -2949,7 +2949,7 @@ ProcFreeCursor (ClientPtr client)
     REQUEST(xResourceReq);
 
     REQUEST_SIZE_MATCH(xResourceReq);
-    rc = dixLookupResource((pointer *)&pCursor, stuff->id, RT_CURSOR, client,
+    rc = dixLookupResourceByType((pointer *)&pCursor, stuff->id, RT_CURSOR, client,
 			   DixDestroyAccess);
     if (rc == Success) 
     {
diff --git a/dix/dixutils.c b/dix/dixutils.c
index 340564e..66e5bc5 100644
--- a/dix/dixutils.c
+++ b/dix/dixutils.c
@@ -216,7 +216,7 @@ dixLookupDrawable(DrawablePtr *pDraw, XID id, ClientPtr client,
     if (id == INVALID)
 	return BadDrawable;
 
-    rc = dixLookupResource((pointer *)&pTmp, id, RC_DRAWABLE, client, access);
+    rc = dixLookupResourceByClass((pointer *)&pTmp, id, RC_DRAWABLE, client, access);
 
     if (rc == BadValue)
 	return BadDrawable;
@@ -259,7 +259,7 @@ dixLookupClient(ClientPtr *pClient, XID rid, ClientPtr client, Mask access)
     if (!clientIndex || !clients[clientIndex] || (rid & SERVER_BIT))
 	goto bad;
 
-    rc = dixLookupResource(&pRes, rid, RC_ANY, client, DixGetAttrAccess);
+    rc = dixLookupResourceByClass(&pRes, rid, RC_ANY, client, DixGetAttrAccess);
     if (rc != Success)
 	goto bad;
 
diff --git a/dix/events.c b/dix/events.c
index 5388a16..1786827 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -4445,7 +4445,7 @@ ProcGrabPointer(ClientPtr client)
 	cursor = NullCursor;
     else
     {
-	rc = dixLookupResource((pointer *)&cursor, stuff->cursor, RT_CURSOR,
+	rc = dixLookupResourceByType((pointer *)&cursor, stuff->cursor, RT_CURSOR,
 			       client, DixUseAccess);
 	if (rc != Success)
 	{
@@ -4545,8 +4545,8 @@ ProcChangeActivePointerGrab(ClientPtr client)
 	newCursor = NullCursor;
     else
     {
-	int rc = dixLookupResource((pointer *)&newCursor, stuff->cursor,
-				   RT_CURSOR, client, DixUseAccess);
+	int rc = dixLookupResourceByType((pointer *)&newCursor, stuff->cursor,
+					 RT_CURSOR, client, DixUseAccess);
 	if (rc != Success)
 	{
 	    client->errorValue = stuff->cursor;
@@ -5146,7 +5146,7 @@ ProcGrabButton(ClientPtr client)
 	cursor = NullCursor;
     else
     {
-	rc = dixLookupResource((pointer *)&cursor, stuff->cursor, RT_CURSOR,
+	rc = dixLookupResourceByType((pointer *)&cursor, stuff->cursor, RT_CURSOR,
 			       client, DixUseAccess);
 	if (rc != Success)
 	if (!cursor)
@@ -5396,7 +5396,7 @@ ProcRecolorCursor(ClientPtr client)
     REQUEST(xRecolorCursorReq);
 
     REQUEST_SIZE_MATCH(xRecolorCursorReq);
-    rc = dixLookupResource((pointer *)&pCursor, stuff->cursor, RT_CURSOR,
+    rc = dixLookupResourceByType((pointer *)&pCursor, stuff->cursor, RT_CURSOR,
 			   client, DixWriteAccess);
     if (rc != Success)
     {
diff --git a/dix/gc.c b/dix/gc.c
index b925694..44bfe8b 100644
--- a/dix/gc.c
+++ b/dix/gc.c
@@ -273,7 +273,7 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
 		else
 		{
 		    NEXTVAL(XID, newpix);
-		    rc = dixLookupResource((pointer *)&pPixmap, newpix,
+		    rc = dixLookupResourceByType((pointer *)&pPixmap, newpix,
 					   RT_PIXMAP, client, DixReadAccess);
 		}
 		if (rc == Success)
@@ -310,7 +310,7 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
 		else
 		{
 		    NEXTVAL(XID, newstipple)
-		    rc = dixLookupResource((pointer *)&pPixmap, newstipple,
+		    rc = dixLookupResourceByType((pointer *)&pPixmap, newstipple,
 					   RT_PIXMAP, client, DixReadAccess);
 		}
 		if (rc == Success)
@@ -353,7 +353,7 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
 		else
 		{
 		    NEXTVAL(XID, newfont)
-		    rc = dixLookupResource((pointer *)&pFont, newfont,
+		    rc = dixLookupResourceByType((pointer *)&pFont, newfont,
 					   RT_FONT, client, DixUseAccess);
 		}
 		if (rc == Success)
@@ -420,7 +420,7 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
 			pPixmap = NullPixmap;
 		    }
 		    else {
-			rc = dixLookupResource((pointer *)&pPixmap, pid,
+			rc = dixLookupResourceByType((pointer *)&pPixmap, pid,
 					       RT_PIXMAP, client,
 					       DixReadAccess);
 			if (rc != Success) {
diff --git a/dix/resource.c b/dix/resource.c
index 7b0441e..7b133ca 100644
--- a/dix/resource.c
+++ b/dix/resource.c
@@ -846,11 +846,10 @@ LegalNewID(XID id, ClientPtr client)
 }
 
 _X_EXPORT int
-dixLookupResource(pointer *result, XID id, RESTYPE rtype,
-		  ClientPtr client, Mask mode)
+dixLookupResourceByType(pointer *result, XID id, RESTYPE rtype,
+			ClientPtr client, Mask mode)
 {
     int cid = CLIENT_ID(id);
-    int istype = (rtype & TypeMask) && (rtype != RC_ANY);
     ResourcePtr res = NULL;
 
     *result = NULL;
@@ -859,8 +858,38 @@ dixLookupResource(pointer *result, XID id, RESTYPE rtype,
 	res = clientTable[cid].resources[Hash(cid, id)];
 
 	for (; res; res = res->next)
-	    if ((res->id == id) && ((istype && res->type == rtype) ||
-				    (!istype && res->type & rtype)))
+	    if (res->id == id && res->type == rtype)
+		break;
+    }
+    if (!res)
+	return BadValue;
+
+    if (client) {
+	client->errorValue = id;
+	cid = XaceHook(XACE_RESOURCE_ACCESS, client, id, res->type,
+		       res->value, RT_NONE, NULL, mode);
+	if (cid != Success)
+	    return cid;
+    }
+
+    *result = res->value;
+    return Success;
+}
+
+_X_EXPORT int
+dixLookupResourceByClass(pointer *result, XID id, RESTYPE rclass,
+			 ClientPtr client, Mask mode)
+{
+    int cid = CLIENT_ID(id);
+    ResourcePtr res = NULL;
+
+    *result = NULL;
+
+    if ((cid < MAXCLIENTS) && clientTable[cid].buckets) {
+	res = clientTable[cid].resources[Hash(cid, id)];
+
+	for (; res; res = res->next)
+	    if (res->id == id && (res->type & rclass))
 		break;
     }
     if (!res)
diff --git a/dix/window.c b/dix/window.c
index c19990a..a9d00f9 100644
--- a/dix/window.c
+++ b/dix/window.c
@@ -1068,7 +1068,7 @@ ChangeWindowAttributes(WindowPtr pWin, Mask vmask, XID *vlist, ClientPtr client)
 	    }
 	    else
 	    {	
-		rc = dixLookupResource((pointer *)&pPixmap, pixID, RT_PIXMAP,
+		rc = dixLookupResourceByType((pointer *)&pPixmap, pixID, RT_PIXMAP,
 				       client, DixReadAccess);
 		if (rc == Success)
 		{
@@ -1128,7 +1128,7 @@ ChangeWindowAttributes(WindowPtr pWin, Mask vmask, XID *vlist, ClientPtr client)
 		    pixID = pWin->parent->border.pixmap->drawable.id;
 		}
 	    }
-	    rc = dixLookupResource((pointer *)&pPixmap, pixID, RT_PIXMAP,
+	    rc = dixLookupResourceByType((pointer *)&pPixmap, pixID, RT_PIXMAP,
 				   client, DixReadAccess);
 	    if (rc == Success)
 	    {
@@ -1290,7 +1290,7 @@ ChangeWindowAttributes(WindowPtr pWin, Mask vmask, XID *vlist, ClientPtr client)
 		error = BadMatch;
 		goto PatchUp;
 	    }
-	    rc = dixLookupResource((pointer *)&pCmap, cmap, RT_COLORMAP,
+	    rc = dixLookupResourceByType((pointer *)&pCmap, cmap, RT_COLORMAP,
 				   client, DixUseAccess);
 	    if (rc != Success)
 	    {
@@ -1366,7 +1366,7 @@ ChangeWindowAttributes(WindowPtr pWin, Mask vmask, XID *vlist, ClientPtr client)
 	    }
 	    else
 	    {
-		rc = dixLookupResource((pointer *)&pCursor, cursorID,
+		rc = dixLookupResourceByType((pointer *)&pCursor, cursorID,
 				       RT_CURSOR, client, DixUseAccess);
 		if (rc != Success)
 		{
diff --git a/include/resource.h b/include/resource.h
index b8105d4..9b5792e 100644
--- a/include/resource.h
+++ b/include/resource.h
@@ -218,13 +218,20 @@ extern pointer LookupClientResourceComplex(
     FindComplexResType func,
     pointer cdata);
 
-extern int dixLookupResource(
+extern int dixLookupResourceByType(
     pointer *result,
     XID id,
     RESTYPE rtype,
     ClientPtr client,
     Mask access_mode);
 
+extern int dixLookupResourceByClass(
+    pointer *result,
+    XID id,
+    RESTYPE rclass,
+    ClientPtr client,
+    Mask access_mode);
+
 extern void GetXIDRange(
     int /*client*/,
     Bool /*server*/,
@@ -244,29 +251,42 @@ extern RESTYPE TypeMask;
  * Please use the noted replacements instead.
  */
 
-/* replaced by dixLookupResource */
+#ifdef __GNUC__
+#define X_DEPRECATED __attribute__((deprecated))
+#else
+#define X_DEPRECATED
+#endif
+
+/* replaced by dixLookupResourceByType or dixLookupResourceByClass */
+extern int dixLookupResource(
+    pointer *result,
+    XID id,
+    RESTYPE rtype,
+    ClientPtr client,
+    Mask access_mode) X_DEPRECATED;
+
 extern pointer SecurityLookupIDByType(
     ClientPtr client,
     XID id,
     RESTYPE rtype,
-    Mask access_mode);
+    Mask access_mode) X_DEPRECATED;
 
-/* replaced by dixLookupResource */
+/* replaced by dixLookupResourceByClass */
 extern pointer SecurityLookupIDByClass(
     ClientPtr client,
     XID id,
     RESTYPE classes,
-    Mask access_mode);
+    Mask access_mode) X_DEPRECATED;
 
-/* replaced by dixLookupResource */
+/* replaced by dixLookupResourceByType */
 extern pointer LookupIDByType(
     XID id,
-    RESTYPE rtype);
+    RESTYPE rtype) X_DEPRECATED;
 
-/* replaced by dixLookupResource */
+/* replaced by dixLookupResourceByClass */
 extern pointer LookupIDByClass(
     XID id,
-    RESTYPE classes);
+    RESTYPE classes) X_DEPRECATED;
 
 #endif /* RESOURCE_H */
 
diff --git a/render/picture.c b/render/picture.c
index d672ebc..9567387 100644
--- a/render/picture.c
+++ b/render/picture.c
@@ -1070,7 +1070,7 @@ ChangePicture (PicturePtr	pPicture,
 			pAlpha = 0;
 		    else
 		    {
-			error = dixLookupResource((pointer *)&pAlpha, pid,
+			error = dixLookupResourceByType((pointer *)&pAlpha, pid,
 						  PictureType, client,
 						  DixReadAccess);
 			if (error != Success)
@@ -1131,7 +1131,7 @@ ChangePicture (PicturePtr	pPicture,
 		    else
 		    {
 			clipType = CT_PIXMAP;
-			error = dixLookupResource((pointer *)&pPixmap, pid,
+			error = dixLookupResourceByType((pointer *)&pPixmap, pid,
 						  RT_PIXMAP, client,
 						  DixReadAccess);
 			if (error != Success)
diff --git a/render/render.c b/render/render.c
index 7cb93bd..e3d76d2 100644
--- a/render/render.c
+++ b/render/render.c
@@ -1009,7 +1009,7 @@ ProcRenderReferenceGlyphSet (ClientPtr client)
 
     LEGAL_NEW_RESOURCE(stuff->gsid, client);
 
-    rc = dixLookupResource((pointer *)&glyphSet, stuff->existing, GlyphSetType,
+    rc = dixLookupResourceByType((pointer *)&glyphSet, stuff->existing, GlyphSetType,
 			   client, DixGetAttrAccess);
     if (rc != Success)
     {
@@ -1033,7 +1033,7 @@ ProcRenderFreeGlyphSet (ClientPtr client)
     REQUEST(xRenderFreeGlyphSetReq);
 
     REQUEST_SIZE_MATCH(xRenderFreeGlyphSetReq);
-    rc = dixLookupResource((pointer *)&glyphSet, stuff->glyphset, GlyphSetType,
+    rc = dixLookupResourceByType((pointer *)&glyphSet, stuff->glyphset, GlyphSetType,
 			   client, DixDestroyAccess);
     if (rc != Success)
     {
@@ -1072,7 +1072,7 @@ ProcRenderAddGlyphs (ClientPtr client)
     CARD32	    component_alpha;
 
     REQUEST_AT_LEAST_SIZE(xRenderAddGlyphsReq);
-    err = dixLookupResource((pointer *)&glyphSet, stuff->glyphset, GlyphSetType,
+    err = dixLookupResourceByType((pointer *)&glyphSet, stuff->glyphset, GlyphSetType,
 			    client, DixAddAccess);
     if (err != Success)
     {
@@ -1262,7 +1262,7 @@ ProcRenderFreeGlyphs (ClientPtr client)
     CARD32	    glyph;
 
     REQUEST_AT_LEAST_SIZE(xRenderFreeGlyphsReq);
-    rc = dixLookupResource((pointer *)&glyphSet, stuff->glyphset, GlyphSetType,
+    rc = dixLookupResourceByType((pointer *)&glyphSet, stuff->glyphset, GlyphSetType,
 			   client, DixRemoveAccess);
     if (rc != Success)
     {
diff --git a/xfixes/cursor.c b/xfixes/cursor.c
index 2c584f9..02ff1fd 100644
--- a/xfixes/cursor.c
+++ b/xfixes/cursor.c
@@ -863,7 +863,7 @@ ProcXFixesHideCursor (ClientPtr client)
 
     REQUEST_SIZE_MATCH (xXFixesHideCursorReq);
 
-    ret = dixLookupResource((pointer *)&pWin, stuff->window, RT_WINDOW,
+    ret = dixLookupResourceByType((pointer *)&pWin, stuff->window, RT_WINDOW,
 			    client, DixGetAttrAccess);
     if (ret != Success) {
 	client->errorValue = stuff->window;
@@ -921,7 +921,7 @@ ProcXFixesShowCursor (ClientPtr client)
 
     REQUEST_SIZE_MATCH (xXFixesShowCursorReq);
 
-    rc = dixLookupResource((pointer *)&pWin, stuff->window, RT_WINDOW,
+    rc = dixLookupResourceByType((pointer *)&pWin, stuff->window, RT_WINDOW,
 			   client, DixGetAttrAccess);
     if (rc != Success) {
 	client->errorValue = stuff->window;
diff --git a/xfixes/region.c b/xfixes/region.c
index cac24b5..2ab98fc 100644
--- a/xfixes/region.c
+++ b/xfixes/region.c
@@ -115,7 +115,7 @@ ProcXFixesCreateRegionFromBitmap (ClientPtr client)
     REQUEST_SIZE_MATCH (xXFixesCreateRegionFromBitmapReq);
     LEGAL_NEW_RESOURCE (stuff->region, client);
 
-    rc = dixLookupResource((pointer *)&pPixmap, stuff->bitmap, RT_PIXMAP,
+    rc = dixLookupResourceByType((pointer *)&pPixmap, stuff->bitmap, RT_PIXMAP,
 			   client, DixReadAccess);
     if (rc != Success)
     {
@@ -160,7 +160,7 @@ ProcXFixesCreateRegionFromWindow (ClientPtr client)
     
     REQUEST_SIZE_MATCH (xXFixesCreateRegionFromWindowReq);
     LEGAL_NEW_RESOURCE (stuff->region, client);
-    rc = dixLookupResource((pointer *)&pWin, stuff->window, RT_WINDOW,
+    rc = dixLookupResourceByType((pointer *)&pWin, stuff->window, RT_WINDOW,
 			   client, DixGetAttrAccess);
     if (rc != Success)
     {
@@ -682,7 +682,7 @@ ProcXFixesSetWindowShapeRegion (ClientPtr client)
     REQUEST(xXFixesSetWindowShapeRegionReq);
 
     REQUEST_SIZE_MATCH(xXFixesSetWindowShapeRegionReq);
-    rc = dixLookupResource((pointer *)&pWin, stuff->dest, RT_WINDOW,
+    rc = dixLookupResourceByType((pointer *)&pWin, stuff->dest, RT_WINDOW,
 			   client, DixSetAttrAccess);
     if (rc != Success)
     {
commit c838a03e891a6fcd2f7b71f727c1b93f7c26e7a7
Author: Robert Noland <rnoland at 2hip.net>
Date:   Wed Apr 15 12:06:19 2009 -0500

    One = is more than adequate here.  Make is sh safe.
    (cherry picked from commit b3e3154cce47add97f5561088036ce3b9e7dc937)
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index d75c467..e0e9b30 100644
--- a/configure.ac
+++ b/configure.ac
@@ -870,7 +870,7 @@ case "$DRI2,$HAVE_DRI2PROTO" in
 		DRI2=yes
 		;;
 esac
-AM_CONDITIONAL(DRI2, test "x$DRI2" == xyes)
+AM_CONDITIONAL(DRI2, test "x$DRI2" = xyes)
 
 if test "x$DRI" = xyes || test "x$DRI2" = xyes; then
 	PKG_CHECK_MODULES([LIBDRM], [libdrm >= 2.3.0])
@@ -897,7 +897,7 @@ if test "x$DRI2" = xyes; then
 		DRI2_AIGLX=no
 	fi
 fi
-AM_CONDITIONAL(DRI2_AIGLX, test "x$DRI2_AIGLX" == xyes)
+AM_CONDITIONAL(DRI2_AIGLX, test "x$DRI2_AIGLX" = xyes)
 
 
 AM_CONDITIONAL(XINERAMA, [test "x$XINERAMA" = xyes])
commit 68cb38bed65c49716104eeb345c4b1b85a4b15bc
Author: Rémi Cardona <remi at gentoo.org>
Date:   Fri Jul 3 10:51:50 2009 +0200

    configure: libXinerama isn't needed anymore
    
    since libXinerama commit 90d4d23bf2e94721149ddc0a80093b10a82e8845 and
    xineramaproto commit 21477147613c28c968b5e1eb9d8aea7017dd399d, the
    server no longer needs libXinerama.
    
    Signed-off-by: Rémi Cardona <remi at gentoo.org>
    (cherry picked from commit 2c69deb92e11542f615df0f24fdc03e3b4415475)
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index 71cc30c..d75c467 100644
--- a/configure.ac
+++ b/configure.ac
@@ -904,7 +904,7 @@ AM_CONDITIONAL(XINERAMA, [test "x$XINERAMA" = xyes])
 if test "x$XINERAMA" = xyes; then
 	AC_DEFINE(XINERAMA, 1, [Support Xinerama extension])
 	AC_DEFINE(PANORAMIX, 1, [Internal define for Xinerama])
-	REQUIRED_MODULES="$REQUIRED_MODULES xineramaproto xinerama"
+	REQUIRED_MODULES="$REQUIRED_MODULES xineramaproto"
 fi
 
 AM_CONDITIONAL(XACE, [test "x$XACE" = xyes])
commit ec60f4ca65dbc25f9a40636f5280b1a1ec68407f
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Fri Jul 10 20:06:02 2009 +0200

    EXA: Only pass CT_YXBANDED to RECTS_TO_REGION() if that is really true.
    
    Fixes http://bugs.freedesktop.org/show_bug.cgi?id=22642 .
    (cherry picked from commit 35758544813f156eaac28844e693b2a28f6de316)
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/exa/exa_accel.c b/exa/exa_accel.c
index a50696d..dac6e6c 100644
--- a/exa/exa_accel.c
+++ b/exa/exa_accel.c
@@ -415,6 +415,7 @@ exaCopyNtoN (DrawablePtr    pSrcDrawable,
 
     if (rects) {
 	int i;
+	int ordering;
 
 	for (i = 0; i < nbox; i++) {
 	    rects[i].x = pbox[i].x1 + dx + src_off_x;
@@ -423,7 +424,16 @@ exaCopyNtoN (DrawablePtr    pSrcDrawable,
 	    rects[i].height = pbox[i].y2 - pbox[i].y1;
 	}
 
-	srcregion  = RECTS_TO_REGION(pScreen, nbox, rects, CT_YXBANDED);
+	/* This must match the miRegionCopy() logic for reversing rect order */
+	if (nbox == 1 || (dx > 0 && dy > 0) ||
+	    (pDstDrawable != pSrcDrawable &&
+	     (pDstDrawable->type != DRAWABLE_WINDOW ||
+	      pSrcDrawable->type != DRAWABLE_WINDOW)))
+	    ordering = CT_YXBANDED;
+	else
+	    ordering = CT_UNSORTED;
+
+	srcregion  = RECTS_TO_REGION(pScreen, nbox, rects, ordering);
 	xfree(rects);
 
 	if (!pGC || !exaGCReadsDestination(pDstDrawable, pGC->planemask,
commit b10c4fe343d2339bae4736793939e44a6befaf88
Author: Kim Woelders <kim at woelders.dk>
Date:   Sat Jul 11 18:55:17 2009 +0200

    Fix key repeat problem.
    
    Signed-off-by: Kim Woelders <kim at woelders.dk>

diff --git a/dix/events.c b/dix/events.c
index f15c460..5388a16 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -1161,7 +1161,7 @@ EnqueueEvent(xEvent *xE, DeviceIntPtr device, int count)
 #ifdef XKB
     /* Fix for key repeating bug. */
     if (device->key != NULL && device->key->xkbInfo != NULL &&
-	xE->u.u.type == KeyRelease)
+	(xE->u.u.type == KeyRelease || xE->u.u.type == DeviceKeyRelease))
 	AccessXCancelRepeatKey(device->key->xkbInfo, xE->u.u.detail);
 #endif
 


More information about the xorg-commit mailing list