xserver: Branch 'xorg-server-1.6-apple' - 23 commits

Jeremy Huddleston jeremyhu at kemper.freedesktop.org
Wed Aug 5 16:17:56 PDT 2009


 Xext/saver.c                     |    8 ++--
 Xext/security.c                  |    4 +-
 Xext/shape.c                     |    2 -
 Xext/sync.c                      |    2 -
 Xext/xselinux.c                  |    6 ++-
 Xext/xtest.c                     |    6 +--
 Xi/exevents.c                    |    2 -
 composite/compext.c              |   10 ++---
 config/hal.c                     |   37 ++++++++++++++-------
 configure.ac                     |   12 +++---
 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 +--------
 hw/xfree86/modes/xf86EdidModes.c |    5 ++
 hw/xquartz/GL/indirect.c         |    7 ++++
 hw/xquartz/X11Application.m      |   68 ++++++++++++++++++++++-----------------
 hw/xquartz/quartzAudio.c         |   40 +++-------------------
 hw/xquartz/quartzAudio.h         |    3 -
 hw/xquartz/quartzKeyboard.c      |    2 -
 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 +--
 33 files changed, 276 insertions(+), 199 deletions(-)

New commits:
commit f37a5f54791d11d8623f2b544faddc6db1d1e279
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Tue Aug 4 02:53:17 2009 -0700

    XQuartz: AIGLX: Provide empty __glXAquaDrawableResize to avoid crashing in DoMakeCurrent
    (cherry picked from commit 60a1d2c2764f2f02c0751940a264588717afce79)

diff --git a/hw/xquartz/GL/indirect.c b/hw/xquartz/GL/indirect.c
index de8b946..f080067 100644
--- a/hw/xquartz/GL/indirect.c
+++ b/hw/xquartz/GL/indirect.c
@@ -391,6 +391,12 @@ static int __glXAquaContextForceCurrent(__GLXcontext *baseContext)
 
 /* Drawing surface notification callbacks */
 
+static GLboolean __glXAquaDrawableResize(__GLXdrawable *base)  {
+    // Don't remove, <rdar://problem/7114913>
+    GLAQUA_DEBUG_MSG("unimplemented glAquaDrawableResize\n");
+    return GL_TRUE;
+}
+
 static GLboolean __glXAquaDrawableSwapBuffers(__GLXdrawable *base) {
     CGLError err;
     __GLXAquaDrawable *drawable;
@@ -577,6 +583,7 @@ __glXAquaScreenCreateDrawable(__GLXscreen *screen,
   }
 
   glxPriv->base.destroy       = __glXAquaDrawableDestroy;
+  glxPriv->base.resize        = __glXAquaDrawableResize;
   glxPriv->base.swapBuffers   = __glXAquaDrawableSwapBuffers;
   glxPriv->base.copySubBuffer = NULL; /* __glXAquaDrawableCopySubBuffer; */
 
commit a7b1c99aca1970d1fb39047e7e2e68cce02bcf21
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Aug 1 22:53:45 2009 -0700

    XQuartz: Only save lastpt on mouse/tablet events
    (cherry picked from commit 552be074e5be6492df3e290e8b7d9daff1a2cb34)

diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 5d28132..6ade527 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -990,55 +990,50 @@ static inline int ensure_flag(int flags, int device_independent, int device_depe
 #endif
 
 - (void) sendX11NSEvent:(NSEvent *)e {
-    NSRect screen;
-    NSPoint location, tilt;
-    NSWindow *window;
+    NSPoint location = NSZeroPoint, tilt = NSZeroPoint;
     int ev_button, ev_type;
-    float pressure;
+    float pressure = 0.0;
     DeviceIntPtr pDev;
     int modifierFlags;
-    BOOL isTabletEvent;
-
-    static NSPoint lastpt;
-
-    /* convert location to be relative to top-left of primary display */
-    window = [e window];
-
-    isTabletEvent = ([e type] == NSTabletPoint) || 
-                    (( [e type] == NSLeftMouseDown    ||  [e type] == NSOtherMouseDown    ||  [e type] == NSRightMouseDown    ||
-                       [e type] == NSLeftMouseUp      ||  [e type] == NSOtherMouseUp      ||  [e type] == NSRightMouseUp      ||
-                       [e type] == NSLeftMouseDragged ||  [e type] == NSOtherMouseDragged ||  [e type] == NSRightMouseDragged ||
-                       [e type] == NSMouseMoved ) && ([e subtype] == NSTabletPointEventSubtype || [e subtype] == NSTabletProximityEventSubtype));
-    
-    if (window != nil)	{
-        NSRect frame = [window frame];
-        location = [e locationInWindow];
-        location.x += frame.origin.x;
-        location.y += frame.origin.y;
-        lastpt = location;
-    } else if(isTabletEvent) {
-        // NSEvents for tablets are not consistent wrt deltaXY between events, so we cannot rely on that
-        // Thus tablets will be subject to the warp-pointer bug worked around by the delta, but tablets
-        // are not normally used in cases where that bug would present itself, so this is a fair tradeoff
-        // <rdar://problem/7111003> deltaX and deltaY are incorrect for NSMouseMoved, NSTabletPointEventSubtype
-        // http://xquartz.macosforge.org/trac/ticket/288
-        location = [e locationInWindow];
-        lastpt = location;
-    } else {
-        location.x = lastpt.x + [e deltaX];
-        location.y = lastpt.y - [e deltaY];
-        lastpt = [NSEvent mouseLocation]; // [e locationInWindow] gives us the "unfixed" location when our cursor is fixed.  This bugs things like quake
+    BOOL isMouseOrTabletEvent, isTabletEvent;
+
+    isMouseOrTabletEvent =  [e type] == NSLeftMouseDown    ||  [e type] == NSOtherMouseDown    ||  [e type] == NSRightMouseDown    ||
+                            [e type] == NSLeftMouseUp      ||  [e type] == NSOtherMouseUp      ||  [e type] == NSRightMouseUp      ||
+                            [e type] == NSLeftMouseDragged ||  [e type] == NSOtherMouseDragged ||  [e type] == NSRightMouseDragged ||
+                            [e type] == NSMouseMoved       ||  [e type] == NSTabletPoint;
+
+    isTabletEvent = ([e type] == NSTabletPoint) ||
+                    (isMouseOrTabletEvent && ([e subtype] == NSTabletPointEventSubtype || [e subtype] == NSTabletProximityEventSubtype));
+
+    if(isMouseOrTabletEvent) {
+        static NSPoint lastpt;
+        NSWindow *window = [e window];
+        NSRect screen = [[[NSScreen screens] objectAtIndex:0] frame];;
+
+        if (window != nil)	{
+            NSRect frame = [window frame];
+            location = [e locationInWindow];
+            location.x += frame.origin.x;
+            location.y += frame.origin.y;
+            lastpt = location;
+        } else if(isTabletEvent) {
+            // NSEvents for tablets are not consistent wrt deltaXY between events, so we cannot rely on that
+            // Thus tablets will be subject to the warp-pointer bug worked around by the delta, but tablets
+            // are not normally used in cases where that bug would present itself, so this is a fair tradeoff
+            // <rdar://problem/7111003> deltaX and deltaY are incorrect for NSMouseMoved, NSTabletPointEventSubtype
+            // http://xquartz.macosforge.org/trac/ticket/288
+            location = [e locationInWindow];
+            lastpt = location;
+        } else {
+            location.x = lastpt.x + [e deltaX];
+            location.y = lastpt.y - [e deltaY];
+            lastpt = [e locationInWindow];
+        }
+        
+        /* Convert coordinate system */
+        location.y = (screen.origin.y + screen.size.height) - location.y;
     }
     
-    /* Convert coordinate system */
-    screen = [[[NSScreen screens] objectAtIndex:0] frame];
-    location.y = (screen.origin.y + screen.size.height) - location.y;
-    
-    /* Setup our valuators.  These will range from 0 to 1 */
-    pressure = 0;
-    tilt.x = 0.0;
-    tilt.y = 0.0;
-
     modifierFlags = [e modifierFlags];
     
 #ifdef NX_DEVICELCMDKEYMASK
commit cf5d3825631f588359cd351779a1934b209f224a
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Aug 1 12:43:14 2009 -0700

    XQuartz: Use mouseLocation rather than locationInWindow when setting lastpt
    
    I don't understand the *why* ... I just see that it works better this way for games like Quake2 through wine.  It *should* be better the other way, but somehow it's not.
    
    I guess this will go in my list of puzzles to unravel.
    (cherry picked from commit 65ae2d00e1a53f97f2ff9522406ab69d50bf3199)

diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 9d6ee71..5d28132 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -1027,7 +1027,7 @@ static inline int ensure_flag(int flags, int device_independent, int device_depe
     } else {
         location.x = lastpt.x + [e deltaX];
         location.y = lastpt.y - [e deltaY];
-        lastpt = [e locationInWindow];
+        lastpt = [NSEvent mouseLocation]; // [e locationInWindow] gives us the "unfixed" location when our cursor is fixed.  This bugs things like quake
     }
     
     /* Convert coordinate system */
commit c9cc8f2e3f0789decb77f23887e0377a363e40f5
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Aug 1 02:32:52 2009 -0700

    XQuartz: Don't use location delta for tablets since NSEvent does not give a precise delta.
    (cherry picked from commit 6c5bf756a7f5389cdfe2e43a339d7c31a3e522e9)

diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 7eadc48..9d6ee71 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -997,22 +997,37 @@ static inline int ensure_flag(int flags, int device_independent, int device_depe
     float pressure;
     DeviceIntPtr pDev;
     int modifierFlags;
+    BOOL isTabletEvent;
 
     static NSPoint lastpt;
 
     /* convert location to be relative to top-left of primary display */
     window = [e window];
 
+    isTabletEvent = ([e type] == NSTabletPoint) || 
+                    (( [e type] == NSLeftMouseDown    ||  [e type] == NSOtherMouseDown    ||  [e type] == NSRightMouseDown    ||
+                       [e type] == NSLeftMouseUp      ||  [e type] == NSOtherMouseUp      ||  [e type] == NSRightMouseUp      ||
+                       [e type] == NSLeftMouseDragged ||  [e type] == NSOtherMouseDragged ||  [e type] == NSRightMouseDragged ||
+                       [e type] == NSMouseMoved ) && ([e subtype] == NSTabletPointEventSubtype || [e subtype] == NSTabletProximityEventSubtype));
+    
     if (window != nil)	{
         NSRect frame = [window frame];
         location = [e locationInWindow];
         location.x += frame.origin.x;
         location.y += frame.origin.y;
         lastpt = location;
+    } else if(isTabletEvent) {
+        // NSEvents for tablets are not consistent wrt deltaXY between events, so we cannot rely on that
+        // Thus tablets will be subject to the warp-pointer bug worked around by the delta, but tablets
+        // are not normally used in cases where that bug would present itself, so this is a fair tradeoff
+        // <rdar://problem/7111003> deltaX and deltaY are incorrect for NSMouseMoved, NSTabletPointEventSubtype
+        // http://xquartz.macosforge.org/trac/ticket/288
+        location = [e locationInWindow];
+        lastpt = location;
     } else {
         location.x = lastpt.x + [e deltaX];
         location.y = lastpt.y - [e deltaY];
-        lastpt = [NSEvent mouseLocation];
+        lastpt = [e locationInWindow];
     }
     
     /* Convert coordinate system */
commit b88623502bfe31f3fa3cdaa9ba25ec4aa81eaa32
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Fri Jul 31 16:09:50 2009 -0700

    XQuartz: Purge redundant QuartzBell
    (cherry picked from commit de14a63d20095e1537fd74352850c734d900031d)

diff --git a/hw/xquartz/quartzAudio.c b/hw/xquartz/quartzAudio.c
index 8627588..8cf2417 100644
--- a/hw/xquartz/quartzAudio.c
+++ b/hw/xquartz/quartzAudio.c
@@ -219,6 +219,12 @@ void DDXRingBell(
     int pitch,          // pitch is Hz
     int duration )      // duration is milliseconds
 {
+    if (quartzUseSysBeep) {
+        if (volume)
+            NSBeep();
+        return;
+    }
+        
     if (quartzAudioDevice == kAudioDeviceUnknown) return;
 
     pthread_mutex_lock(&data.lock);
@@ -247,40 +253,6 @@ void DDXRingBell(
     pthread_mutex_unlock(&data.lock);
 }
 
-
-/*
- * QuartzBell
- *  Ring the bell
- */
-void QuartzBell(
-    int volume,             // volume in percent of max
-    DeviceIntPtr pDevice,
-    pointer ctrl,
-    int class )
-{
-    int pitch;              // pitch in Hz
-    int duration;           // duration in milliseconds
-
-    if (class == BellFeedbackClass) {
-        pitch = ((BellCtrl*)ctrl)->pitch;
-        duration = ((BellCtrl*)ctrl)->duration;
-    } else if (class == KbdFeedbackClass) {
-        pitch = ((KeybdCtrl*)ctrl)->bell_pitch;
-        duration = ((KeybdCtrl*)ctrl)->bell_duration;    
-    } else {
-        ErrorF("QuartzBell: bad bell class %d\n", class);
-        return;
-    }
-
-    if (quartzUseSysBeep) {
-        if (volume)
-            NSBeep();
-    } else {
-        DDXRingBell(volume, pitch, duration);
-    }
-}
-
-
 /*
  * QuartzAudioInit
  *  Prepare to play the bell with the CoreAudio API
diff --git a/hw/xquartz/quartzAudio.h b/hw/xquartz/quartzAudio.h
index c406bbc..2a78b39 100644
--- a/hw/xquartz/quartzAudio.h
+++ b/hw/xquartz/quartzAudio.h
@@ -32,9 +32,6 @@
 #ifndef _QUARTZAUDIO_H
 #define _QUARTZAUDIO_H
 
-#include "input.h"
-
 void QuartzAudioInit(void);
-void QuartzBell(int volume, DeviceIntPtr pDevice, pointer ctrl, int class);
 
 #endif
diff --git a/hw/xquartz/quartzKeyboard.c b/hw/xquartz/quartzKeyboard.c
index 261b5a5..8ef489d 100644
--- a/hw/xquartz/quartzKeyboard.c
+++ b/hw/xquartz/quartzKeyboard.c
@@ -341,7 +341,7 @@ void DarwinKeyboardInit(DeviceIntPtr pDev) {
     
     DarwinLoadKeyboardMapping(&keySyms);    
     XkbInitKeyboardDeviceStruct(pDev, &names, &keySyms, keyInfo.modMap,
-                                       QuartzBell, DarwinChangeKeyboardControl);
+                                NULL, DarwinChangeKeyboardControl);
     pthread_mutex_unlock(&keyInfo_mutex);
 
     /* Get our key repeat settings from GlobalPreferences */
commit 1bec11c732ecc8d336ea33e615d21ecd2c63a55e
Merge: 869e60d... f274e59...
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Wed Aug 5 16:15:58 2009 -0700

    Merge commit 'origin/server-1.6-branch' into xorg-server-1.6-apple

commit f274e595ed56722450f6ecebad70500c92e50c58
Author: Keith Packard <keithp at keithp.com>
Date:   Fri Jul 31 23:37:53 2009 -0700

    Bump release number to 1.6.3
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index c8aedc9..fe7978f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,12 +26,12 @@ dnl
 dnl Process this file with autoconf to create configure.
 
 AC_PREREQ(2.57)
-AC_INIT([xorg-server], 1.6.2.901, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+AC_INIT([xorg-server], 1.6.3, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
 AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([dist-bzip2 foreign])
 AM_MAINTAINER_MODE
 
-RELEASE_DATE="2009-7-26"
+RELEASE_DATE="2009-7-31"
 
 dnl this gets generated by autoheader, and thus contains all the defines.  we
 dnl don't ever actually use it, internally.
commit 55dcfdbbd6a2a4debb717b104c4b54f4a2c76fff
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Tue Jul 28 15:02:37 2009 -0700

    Remove hardcoded gcc -Wall option from configure.ac
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    (cherry picked from commit 442967c90dd9d8483a56bdc9237c49e33d619126)

diff --git a/configure.ac b/configure.ac
index 792c622..c8aedc9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -880,7 +880,7 @@ fi
 
 if test "x$DRI2" = xyes; then
 	save_CFLAGS=$CFLAGS
-	CFLAGS="$GL_CFLAGS $LIBDRM_CFLAGS -Wall"
+	CFLAGS="$GL_CFLAGS $LIBDRM_CFLAGS"
 	AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <GL/gl.h>
 #include <GL/internal/dri_interface.h>
 #ifndef __DRI_DRI2
commit 4d349b6c333449517913a5e981b4fc3155da4855
Author: Adam Jackson <ajax at redhat.com>
Date:   Fri Mar 27 15:56:15 2009 -0400

    selinux: Only activate if policy says to be an object manager
    (cherry picked from commit 283a081572d8db787c77d09e5ba6bcadebf4f7fe)

diff --git a/Xext/xselinux.c b/Xext/xselinux.c
index 4f4254a..3124eb9 100644
--- a/Xext/xselinux.c
+++ b/Xext/xselinux.c
@@ -1989,6 +1989,10 @@ SELinuxExtensionInit(INITARGS)
 	return;
     }
 
+    /* Don't init unless there's something to do */
+    if (!security_get_boolean_active("xserver_object_manager"))
+        return;
+
     /* Check SELinux mode in configuration file */
     switch(selinuxEnforcingState) {
     case SELINUX_MODE_DISABLED:
commit d0875154f4f4b751264a2f6781500e97409a499b
Author: Ben Skeggs <bskeggs at redhat.com>
Date:   Wed May 27 15:24:34 2009 +1000

    quirk: use first detailed timing as preferred for PEA prod 9003 (rh#492359)
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    (cherry picked from commit 048697ccfa31cf7f7a29afa90a2f702d43efb7d4)

diff --git a/hw/xfree86/modes/xf86EdidModes.c b/hw/xfree86/modes/xf86EdidModes.c
index 087f663..6256fda 100644
--- a/hw/xfree86/modes/xf86EdidModes.c
+++ b/hw/xfree86/modes/xf86EdidModes.c
@@ -205,6 +205,11 @@ static Bool quirk_first_detailed_preferred (int scrnIndex, xf86MonPtr DDC)
 	DDC->vendor.prod_id == 2423)
 	return TRUE;
 
+    /* Peacock Ergovision 19.  See rh#492359 */
+    if (memcmp (DDC->vendor.name, "PEA", 4) == 0 &&
+	DDC->vendor.prod_id == 9003)
+	return TRUE;
+
     return FALSE;
 }
 
commit c941479ecc2dead9c3deaee2620c9b9518c3da9a
Author: Rémi Cardona <remi at gentoo.org>
Date:   Mon Jul 27 12:07:51 2009 +0200

    config: add HAL error checks
    
    This patch simplifies error handling in the HAL code and fixes a
    segfault if libhal_find_device_by_capability() failed.
    
    Fixes http://bugs.gentoo.org/278760
    
    Based on a patch by Martin von Gagern <Martin.vGagern at gmx.net>
    
    Signed-off-by: Rémi Cardona <remi at gentoo.org>
    Acked-by: Peter Hutterer <peter.hutterer at who-t.net>
    (cherry picked from commit b1c3dc6ae226db178420e3b5f297b94afc87c94c)

diff --git a/config/hal.c b/config/hal.c
index 731d9b8..59bff66 100644
--- a/config/hal.c
+++ b/config/hal.c
@@ -474,13 +474,13 @@ connect_and_register(DBusConnection *connection, struct config_hal_info *info)
     char **devices;
     int num_devices, i;
 
+    if (info->hal_ctx)
+        return TRUE; /* already registered, pretend we did something */
+
     info->system_bus = connection;
 
     dbus_error_init(&error);
 
-    if (info->hal_ctx)
-        return TRUE; /* already registered, pretend we did something */
-
     info->hal_ctx = libhal_ctx_new();
     if (!info->hal_ctx) {
         LogMessage(X_ERROR, "config/hal: couldn't create HAL context\n");
@@ -501,7 +501,7 @@ connect_and_register(DBusConnection *connection, struct config_hal_info *info)
         LogMessage(X_ERROR, "config/hal: couldn't watch all properties: %s (%s)\n",
 		   error.name ? error.name : "unknown error",
 		   error.message ? error.message : "null");
-        goto out_ctx2;
+        goto out_ctx;
     }
     libhal_ctx_set_device_added(info->hal_ctx, device_added);
     libhal_ctx_set_device_removed(info->hal_ctx, device_removed);
@@ -509,6 +509,12 @@ connect_and_register(DBusConnection *connection, struct config_hal_info *info)
     devices = libhal_find_device_by_capability(info->hal_ctx, "input",
                                                &num_devices, &error);
     /* FIXME: Get default devices if error is set. */
+    if (dbus_error_is_set(&error)) {
+        LogMessage(X_ERROR, "config/hal: couldn't find input device: %s (%s)\n",
+		   error.name ? error.name : "unknown error",
+		   error.message ? error.message : "null");
+        goto out_ctx;
+    }
     for (i = 0; i < num_devices; i++)
         device_added(info->hal_ctx, devices[i]);
     libhal_free_string_array(devices);
@@ -517,13 +523,19 @@ connect_and_register(DBusConnection *connection, struct config_hal_info *info)
 
     return TRUE;
 
-out_ctx2:
-    if (!libhal_ctx_shutdown(info->hal_ctx, &error))
-        LogMessage(X_WARNING, "config/hal: couldn't shut down context: %s (%s)\n",
-		   error.name ? error.name : "unknown error",
-		   error.message ? error.message : "null");
 out_ctx:
-    libhal_ctx_free(info->hal_ctx);
+    dbus_error_free(&error);
+
+    if (info->hal_ctx) {
+        if (!libhal_ctx_shutdown(info->hal_ctx, &error)) {
+            LogMessage(X_WARNING, "config/hal: couldn't shut down context: %s (%s)\n",
+		       error.name ? error.name : "unknown error",
+		       error.message ? error.message : "null");
+            dbus_error_free(&error);
+        }
+        libhal_ctx_free(info->hal_ctx);
+    }
+
 out_err:
     dbus_error_free(&error);
 
commit 546f913ff5461dd93d4a0b29b24d2267557326c7
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Fri May 8 21:31:01 2009 -0700

    Don't printf NULL pointers on HAL connection error
    
    Fixes Solaris bug 6801386 Xorg core dumps on startup if hald not running
    http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6801386
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    (cherry picked from commit 1e816065e5ec3b9394dc1fa5815457a664e15fd9)

diff --git a/config/hal.c b/config/hal.c
index 36fa839..731d9b8 100644
--- a/config/hal.c
+++ b/config/hal.c
@@ -493,12 +493,14 @@ connect_and_register(DBusConnection *connection, struct config_hal_info *info)
     }
     if (!libhal_ctx_init(info->hal_ctx, &error)) {
         LogMessage(X_ERROR, "config/hal: couldn't initialise context: %s (%s)\n",
-               error.name, error.message);
+		   error.name ? error.name : "unknown error",
+		   error.message ? error.message : "null");
         goto out_ctx;
     }
     if (!libhal_device_property_watch_all(info->hal_ctx, &error)) {
         LogMessage(X_ERROR, "config/hal: couldn't watch all properties: %s (%s)\n",
-               error.name, error.message);
+		   error.name ? error.name : "unknown error",
+		   error.message ? error.message : "null");
         goto out_ctx2;
     }
     libhal_ctx_set_device_added(info->hal_ctx, device_added);
@@ -518,7 +520,8 @@ connect_and_register(DBusConnection *connection, struct config_hal_info *info)
 out_ctx2:
     if (!libhal_ctx_shutdown(info->hal_ctx, &error))
         LogMessage(X_WARNING, "config/hal: couldn't shut down context: %s (%s)\n",
-               error.name, error.message);
+		   error.name ? error.name : "unknown error",
+		   error.message ? error.message : "null");
 out_ctx:
     libhal_ctx_free(info->hal_ctx);
 out_err:
commit 155cb2f9a376d40b699a72ac3bdede71af1b518f
Author: Keith Packard <keithp at keithp.com>
Date:   Sun Jul 26 14:22:35 2009 -0700

    Bump to version 1.6.2.901 (1.6.3 RC1)
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index e0e9b30..792c622 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,12 +26,12 @@ dnl
 dnl Process this file with autoconf to create configure.
 
 AC_PREREQ(2.57)
-AC_INIT([xorg-server], 1.6.2, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+AC_INIT([xorg-server], 1.6.2.901, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
 AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([dist-bzip2 foreign])
 AM_MAINTAINER_MODE
 
-RELEASE_DATE="2009-7-7"
+RELEASE_DATE="2009-7-26"
 
 dnl this gets generated by autoheader, and thus contains all the defines.  we
 dnl don't ever actually use it, internally.
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