[Xquartz-changes] xserver: Branch 'server-1.10-apple' - 120 commits

Jeremy Huddleston jeremyhu at freedesktop.org
Sun Feb 27 15:50:15 PST 2011


Rebased ref, commits from common ancestor:
commit f025a1ddd69fc6ee9e743e2ca6daaca38334cc1e
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date:   Sat Oct 30 14:55:06 2010 -0700

    configure.ac: Add -fno-strict-aliasing to CFLAGS
    
    This should address https://bugs.freedesktop.org/show_bug.cgi?id=31238
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>

diff --git a/configure.ac b/configure.ac
index 0a06391..b9516b3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -80,6 +80,12 @@ XORG_PROG_RAWCPP
 # easier overrides at build time.
 XSERVER_CFLAGS='$(CWARNFLAGS)'
 
+dnl Explicitly add -fno-strict-aliasing since this option should disappear
+dnl from util-macros CWARNFLAGS
+if  test "x$GCC" = xyes ; then
+    XSERVER_CFLAGS="$XSERVER_CFLAGS -fno-strict-aliasing"
+fi
+
 dnl Check for dtrace program (needed to build Xserver dtrace probes)
 dnl Also checks for <sys/sdt.h>, since some Linux distros have an 
 dnl ISDN trace program named dtrace
commit 62fd58650a011b88754955a12c64a3fcc3d42a71
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date:   Fri Feb 12 19:48:52 2010 -0800

    fb: Revert fb changes that broke XQuartz
    
    http://bugs.freedesktop.org/show_bug.cgi?id=26124
    
    Revert "Fix source pictures getting random transforms after 2d6a8f668342a5190cdf43b5."
    Revert "fb: Adjust transform or composite coordinates for pixman operations"
    
    http://bugs.freedesktop.org/26124
    
    This reverts commit a72c65e9176c51de95db2fdbf4c5d946a4911695.
    This reverts commit a6bd5d2e482a5aa84acb3d4932e2a166d8670ef1.
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>

diff --git a/fb/fb.h b/fb/fb.h
index 021a940..0b248e1 100644
--- a/fb/fb.h
+++ b/fb/fb.h
@@ -2079,11 +2079,8 @@ fbFillRegionSolid (DrawablePtr	pDrawable,
 		   FbBits	xor);
 
 extern _X_EXPORT pixman_image_t *
-image_from_pict (PicturePtr	pict,
-		 Bool		has_clip,
-		 int		*xoff,
-		 int		*yoff);
-
+image_from_pict (PicturePtr pict,
+		 Bool       has_clip);
 extern _X_EXPORT void free_pixman_pict (PicturePtr, pixman_image_t *);
 
 #endif /* _FB_H_ */
diff --git a/fb/fbpict.c b/fb/fbpict.c
index 7636040..af1920b 100644
--- a/fb/fbpict.c
+++ b/fb/fbpict.c
@@ -50,24 +50,19 @@ fbComposite (CARD8      op,
 	     CARD16     height)
 {
     pixman_image_t *src, *mask, *dest;
-    int src_xoff, src_yoff;
-    int msk_xoff, msk_yoff;
-    int dst_xoff, dst_yoff;
     
     miCompositeSourceValidate (pSrc, xSrc - xDst, ySrc - yDst, width, height);
     if (pMask)
 	miCompositeSourceValidate (pMask, xMask - xDst, yMask - yDst, width, height);
     
-    src = image_from_pict (pSrc, FALSE, &src_xoff, &src_yoff);
-    mask = image_from_pict (pMask, FALSE, &msk_xoff, &msk_yoff);
-    dest = image_from_pict (pDst, TRUE, &dst_xoff, &dst_yoff);
+    src = image_from_pict (pSrc, TRUE);
+    mask = image_from_pict (pMask, TRUE);
+    dest = image_from_pict (pDst, TRUE);
 
     if (src && dest && !(pMask && !mask))
     {
 	pixman_image_composite (op, src, mask, dest,
-				xSrc + src_xoff, ySrc + src_yoff,
-				xMask + msk_xoff, yMask + msk_yoff,
-				xDst + dst_xoff, yDst + dst_yoff,
+				xSrc, ySrc, xMask, yMask, xDst, yDst,
 				width, height);
     }
 
@@ -146,22 +141,22 @@ create_conical_gradient_image (PictGradient *gradient)
 
 static pixman_image_t *
 create_bits_picture (PicturePtr pict,
-		     Bool       has_clip,
-		     int	*xoff,
-		     int	*yoff)
+		     Bool       has_clip)
 {
-    PixmapPtr pixmap;
     FbBits *bits;
     FbStride stride;
-    int bpp;
+    int bpp, xoff, yoff;
     pixman_image_t *image;
     
-    fbGetDrawablePixmap (pict->pDrawable, pixmap, *xoff, *yoff);
-    fbGetPixmapBitsData(pixmap, bits, stride, bpp);
+    fbGetDrawable (pict->pDrawable, bits, stride, bpp, xoff, yoff);
+
+    bits = (FbBits*)((CARD8*)bits +
+		     (pict->pDrawable->y + yoff) * stride * sizeof(FbBits) +
+		     (pict->pDrawable->x + xoff) * (bpp / 8));
 
     image = pixman_image_create_bits (
 	pict->format,
-	pixmap->drawable.width, pixmap->drawable.height,
+	pict->pDrawable->width, pict->pDrawable->height,
 	(uint32_t *)bits, stride * sizeof (FbStride));
     
     
@@ -187,55 +182,33 @@ create_bits_picture (PicturePtr pict,
 	if (pict->clientClipType != CT_NONE)
 	    pixman_image_set_has_client_clip (image, TRUE);
 
-	if (*xoff || *yoff)
-	    pixman_region_translate (pict->pCompositeClip, *xoff, *yoff);
+	pixman_region_translate (pict->pCompositeClip, - pict->pDrawable->x, - pict->pDrawable->y);
 
 	pixman_image_set_clip_region (image, pict->pCompositeClip);
 
-	if (*xoff || *yoff)
-	    pixman_region_translate (pict->pCompositeClip, -*xoff, -*yoff);
+	pixman_region_translate (pict->pCompositeClip, pict->pDrawable->x, pict->pDrawable->y);
     }
     
     /* Indexed table */
     if (pict->pFormat->index.devPrivate)
 	pixman_image_set_indexed (image, pict->pFormat->index.devPrivate);
 
-    /* Add in drawable origin to position within the image */
-    *xoff += pict->pDrawable->x;
-    *yoff += pict->pDrawable->y;
-
     return image;
 }
 
 static pixman_image_t *
-image_from_pict_internal (PicturePtr pict, Bool has_clip, int *xoff, int *yoff, Bool is_alpha_map);
+image_from_pict_internal (PicturePtr pict, Bool has_clip, Bool is_alpha_map);
 
 static void
-set_image_properties (pixman_image_t *image, PicturePtr pict, Bool has_clip, int *xoff, int *yoff, Bool is_alpha_map)
+set_image_properties (pixman_image_t *image, PicturePtr pict, Bool is_alpha_map)
 {
     pixman_repeat_t repeat;
     pixman_filter_t filter;
     
     if (pict->transform)
     {
-	/* For source images, adjust the transform to account
-	 * for the drawable offset within the pixman image,
-	 * then set the offset to 0 as it will be used
-	 * to compute positions within the transformed image.
-	 */
-	if (!has_clip) {
-	    struct pixman_transform	adjusted;
-
-	    adjusted = *pict->transform;
-	    pixman_transform_translate(&adjusted,
-				       NULL,
-				       pixman_int_to_fixed(*xoff),
-				       pixman_int_to_fixed(*yoff));
-	    pixman_image_set_transform (image, &adjusted);
-	    *xoff = 0;
-	    *yoff = 0;
-	} else
-	    pixman_image_set_transform (image, pict->transform);
+	pixman_image_set_transform (
+	    image, (pixman_transform_t *)pict->transform);
     }
     
     switch (pict->repeatType)
@@ -265,8 +238,7 @@ set_image_properties (pixman_image_t *image, PicturePtr pict, Bool has_clip, int
      */
     if (pict->alphaMap && !is_alpha_map)
     {
-	int alpha_xoff, alpha_yoff;
-	pixman_image_t *alpha_map = image_from_pict_internal (pict->alphaMap, FALSE, &alpha_xoff, &alpha_yoff, TRUE);
+	pixman_image_t *alpha_map = image_from_pict_internal (pict->alphaMap, TRUE, TRUE);
 	
 	pixman_image_set_alpha_map (
 	    image, alpha_map, pict->alphaOrigin.x, pict->alphaOrigin.y);
@@ -299,7 +271,8 @@ set_image_properties (pixman_image_t *image, PicturePtr pict, Bool has_clip, int
 }
 
 static pixman_image_t *
-image_from_pict_internal (PicturePtr pict, Bool has_clip, int *xoff, int *yoff, Bool is_alpha_map)
+image_from_pict_internal (PicturePtr pict,
+		 Bool has_clip, Bool is_alpha_map)
 {
     pixman_image_t *image = NULL;
 
@@ -308,7 +281,7 @@ image_from_pict_internal (PicturePtr pict, Bool has_clip, int *xoff, int *yoff,
 
     if (pict->pDrawable)
     {
-	image = create_bits_picture (pict, has_clip, xoff, yoff);
+	image = create_bits_picture (pict, has_clip);
     }
     else if (pict->pSourcePict)
     {
@@ -329,19 +302,18 @@ image_from_pict_internal (PicturePtr pict, Bool has_clip, int *xoff, int *yoff,
 	    else if (sp->type == SourcePictTypeConical)
 		image = create_conical_gradient_image (gradient);
 	}
-	*xoff = *yoff = 0;
     }
     
     if (image)
-	set_image_properties (image, pict, has_clip, xoff, yoff, is_alpha_map);
+	set_image_properties (image, pict, is_alpha_map);
     
     return image;
 }
 
 pixman_image_t *
-image_from_pict (PicturePtr pict, Bool has_clip, int *xoff, int *yoff)
+image_from_pict (PicturePtr pict, Bool has_clip)
 {
-    return image_from_pict_internal (pict, has_clip, xoff, yoff, FALSE);
+    return image_from_pict_internal (pict, has_clip, FALSE);
 }
 
 void
diff --git a/fb/fbtrap.c b/fb/fbtrap.c
index c309ceb..40cffd9 100644
--- a/fb/fbtrap.c
+++ b/fb/fbtrap.c
@@ -37,8 +37,7 @@ fbAddTraps (PicturePtr	pPicture,
 	    int		ntrap,
 	    xTrap	*traps)
 {
-    int image_xoff, image_yoff;
-    pixman_image_t *image = image_from_pict (pPicture, FALSE, &image_xoff, &image_yoff);
+    pixman_image_t *image = image_from_pict (pPicture, FALSE);
 
     if (!image)
 	return;
@@ -54,8 +53,7 @@ fbRasterizeTrapezoid (PicturePtr    pPicture,
 		      int	    x_off,
 		      int	    y_off)
 {
-    int	mask_xoff, mask_yoff;
-    pixman_image_t *image = image_from_pict (pPicture, FALSE, &mask_xoff, &mask_yoff);
+    pixman_image_t *image = image_from_pict (pPicture, FALSE);
 
     if (!image)
 	return;
commit 72ef25de515e05113144a43a4c14979e3aac71a2
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date:   Fri Apr 30 13:08:25 2010 -0700

    Workaround the GC clipping problem in miPaintWindow and add some debugging output.
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>

diff --git a/mi/miexpose.c b/mi/miexpose.c
index 94258b8..4f25c23 100644
--- a/mi/miexpose.c
+++ b/mi/miexpose.c
@@ -521,6 +521,7 @@ void RootlessSetPixmapOfAncestors(WindowPtr pWin);
 void RootlessStartDrawing(WindowPtr pWin);
 void RootlessDamageRegion(WindowPtr pWin, RegionPtr prgn);
 Bool IsFramedWindow(WindowPtr pWin);
+#include "../fb/fb.h"
 #endif 
 
 void
@@ -548,24 +549,37 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
     Bool	solid = TRUE;
     DrawablePtr	drawable = &pWin->drawable;
 
+#ifdef XQUARTZ_CLIP_DEBUG
+    ErrorF("START %d BS %d (pR = %ld)\n", what, pWin->backgroundState, ParentRelative);
+    ErrorF("      Rgn: %d %d %d %d\n", prgn->extents.x1, prgn->extents.y1,
+	                               prgn->extents.x2 - prgn->extents.x1,
+	                               prgn->extents.y2 - prgn->extents.y1);
+    ErrorF("      Win: %d %d (%d %d) %d %d\n", pWin->origin.x, pWin->origin.y,
+	                                       pWin->winSize.extents.x1, pWin->winSize.extents.y1,
+	                                       pWin->winSize.extents.x2 - pWin->winSize.extents.x1,
+					       pWin->winSize.extents.y2 - pWin->winSize.extents.y1);
+    ErrorF("     Draw: %d %d %d %d\n", pWin->drawable.x, pWin->drawable.y,
+				       pWin->drawable.width, pWin->drawable.height);
+#endif
+
 #ifdef ROOTLESS
     if(!drawable || drawable->type == UNDRAWABLE_WINDOW)
 	return;
-
-    if(IsFramedWindow(pWin)) {
-        RootlessStartDrawing(pWin);
-        RootlessDamageRegion(pWin, prgn);
-    
-        if(pWin->backgroundState == ParentRelative) {
-            if((what == PW_BACKGROUND) || 
-               (what == PW_BORDER && !pWin->borderIsPixel))
-                RootlessSetPixmapOfAncestors(pWin);
-        }
-    }
 #endif
     
     if (what == PW_BACKGROUND)
     {
+#ifdef ROOTLESS
+	if(IsFramedWindow(pWin)) {
+	    RootlessStartDrawing(pWin);
+	    RootlessDamageRegion(pWin, prgn);
+
+	    if(pWin->backgroundState == ParentRelative) {
+		RootlessSetPixmapOfAncestors(pWin);
+	    }
+	}
+#endif
+
 	while (pWin->backgroundState == ParentRelative)
 	    pWin = pWin->parent;
 
@@ -587,6 +601,18 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
     {
 	PixmapPtr   pixmap;
 
+#ifdef ROOTLESS
+	if(IsFramedWindow(pWin)) {
+	    RootlessStartDrawing(pWin);
+	    RootlessDamageRegion(pWin, prgn);
+	    
+	    if(!pWin->borderIsPixel &&
+		pWin->backgroundState == ParentRelative) {
+		RootlessSetPixmapOfAncestors(pWin);
+	    }
+	}
+#endif
+
 	tile_x_off = drawable->x;
 	tile_y_off = drawable->y;
 	
@@ -595,6 +621,12 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
 	    return;
 	pixmap = (*pScreen->GetWindowPixmap) ((WindowPtr) drawable);
 	drawable = &pixmap->drawable;
+
+#ifdef XQUARTZ_CLIP_DEBUG
+	ErrorF("     Draw: %d %d %d %d\n",
+	       drawable->x, drawable->y, drawable->width, drawable->height);    
+#endif
+	
 #ifdef COMPOSITE
 	draw_x_off = pixmap->screen_x;
 	draw_y_off = pixmap->screen_y;
@@ -657,6 +689,57 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
     ChangeGC (NullClient, pGC, gcmask, gcval);
     ValidateGC (drawable, pGC);
 
+#ifdef XQUARTZ_CLIP_DEBUG
+    ErrorF("       GC: %d %d %d %d\n",
+	   pGC->pCompositeClip->extents.x1, pGC->pCompositeClip->extents.y1,
+	   pGC->pCompositeClip->extents.x2 - pGC->pCompositeClip->extents.x1,
+	   pGC->pCompositeClip->extents.y2 - pGC->pCompositeClip->extents.y1);
+#endif
+    
+#ifdef XQUARTZ
+    /* Looks like our clipping isn't set right for some reason:
+     * http://xquartz.macosforge.org/trac/ticket/290
+     */
+    if(what == PW_BORDER) {
+
+#if 0
+	if(solid) {
+#if 1
+	    fbFillRegionSolid(&pWin->drawable,
+			      prgn,
+			      0,
+			      fbReplicatePixel(fill.pixel,
+					       pWin->drawable.bitsPerPixel));
+#else
+	    fbFillRegionSolid(drawable,
+			      prgn,
+			      0,
+			      fbReplicatePixel(fill.pixel,
+					       drawable->bitsPerPixel));
+#endif
+	    return;
+	}
+#endif
+    
+	pGC->pCompositeClip->extents.x1 += prgn->extents.x1;
+	pGC->pCompositeClip->extents.y1 += prgn->extents.y1;
+	pGC->pCompositeClip->extents.x2 += prgn->extents.x1;
+	pGC->pCompositeClip->extents.y2 += prgn->extents.y1;
+	
+	if(pGC->pCompositeClip->extents.x2 > drawable->pScreen->width)
+	    pGC->pCompositeClip->extents.x2 = drawable->pScreen->width;
+	if(pGC->pCompositeClip->extents.y2 > drawable->pScreen->height)
+	    pGC->pCompositeClip->extents.y2 = drawable->pScreen->height;
+    }
+#endif
+
+#ifdef XQUARTZ_CLIP_DEBUG
+    ErrorF("       GC: %d %d %d %d\n",
+	   pGC->pCompositeClip->extents.x1, pGC->pCompositeClip->extents.y1,
+	   pGC->pCompositeClip->extents.x2 - pGC->pCompositeClip->extents.x1,
+	   pGC->pCompositeClip->extents.y2 - pGC->pCompositeClip->extents.y1);    
+#endif
+
     numRects = RegionNumRects(prgn);
     pbox = RegionRects(prgn);
     for (i= numRects; --i >= 0; pbox++, prect++)
commit e9129c503ab4f4eededcc9df1fb38eac6dd0f145
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date:   Sun Feb 27 15:49:10 2011 -0800

    Revert "rootless: Remove ROOTLESS_WORKAROUND"
    
    Christof Wolf has reported a regression that seems to be caused by
    this change, so reverting the change in the 1.9 branch.  We'll
    investigate a proper fix in master for 1.10.
    
    This reverts commit c89f0521044083a11d538ebfeaabee6fc7fb9a03.

diff --git a/configure.ac b/configure.ac
index 85d5c98..0a06391 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1923,7 +1923,7 @@ if test "x$XQUARTZ" = xyes; then
 
 	AC_CHECK_LIB([Xplugin],[xp_init],[:])
 
-	CFLAGS="${CFLAGS} -DROOTLESS_SAFEALPHA -DNO_ALLOCA"
+	CFLAGS="${CFLAGS} -DROOTLESS_WORKAROUND -DROOTLESS_SAFEALPHA -DNO_ALLOCA"
 
 	PKG_CHECK_MODULES(XPBPROXY, $APPLEWMPROTO $LIBAPPLEWM xfixes x11)
 
diff --git a/miext/damage/damage.c b/miext/damage/damage.c
index 566995c..0fe1fb6 100644
--- a/miext/damage/damage.c
+++ b/miext/damage/damage.c
@@ -89,7 +89,11 @@ getDrawableDamageRef (DrawablePtr pDrawable)
 	ScreenPtr   pScreen = pDrawable->pScreen;
 
 	pPixmap = 0;
-	if (pScreen->GetWindowPixmap)
+	if (pScreen->GetWindowPixmap
+#ifdef ROOTLESS_WORKAROUND
+	    && ((WindowPtr)pDrawable)->viewable
+#endif
+	    )
 	    pPixmap = (*pScreen->GetWindowPixmap) ((WindowPtr)pDrawable);
 
 	if (!pPixmap)
commit 8cf3348e90846f5b04236479042228fb98ac8f70
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date:   Tue Feb 8 11:38:35 2011 -0800

    XQuartz: RandR: Add RandR modes for the primary display in multi-monitor configs
    
    We now support using RandR to set the resolution of the primary display (and
    place a shielding window on other displays) in multi-monitor configurations.
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>

diff --git a/hw/xquartz/quartzRandR.c b/hw/xquartz/quartzRandR.c
index ede7969..05641a6 100644
--- a/hw/xquartz/quartzRandR.c
+++ b/hw/xquartz/quartzRandR.c
@@ -413,16 +413,6 @@ static Bool QuartzRandRGetInfo (ScreenPtr pScreen, Rotation *rotations) {
     if (pQuartzScreen->displayCount == 0)
         return FALSE;
 
-    if (pQuartzScreen->displayCount > 1) {
-        /* RandR operations are not well-defined for an X11 screen spanning
-           multiple CG displays. Create two entries for the current virtual
-           resolution including/excluding the menu bar. */
-
-        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->rootlessMode);
-        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->fullscreenMode);
-        return TRUE;
-    }
-
     return QuartzRandREnumerateModes(pScreen, QuartzRandRRegisterModeCallback, NULL);
 }
 
diff --git a/hw/xquartz/xpr/xprScreen.c b/hw/xquartz/xpr/xprScreen.c
index cba358f..6e6d06e 100644
--- a/hw/xquartz/xpr/xprScreen.c
+++ b/hw/xquartz/xpr/xprScreen.c
@@ -196,6 +196,13 @@ xprAddPseudoramiXScreens(int *x, int *y, int *width, int *height, ScreenPtr pScr
         return;
     }
 
+    /* If the displays are captured, we are in a RandR game mode
+     * on the primary display, so we only want to include the first
+     * display.  The others are covered by the shield window.
+     */
+    if (CGDisplayIsCaptured(kCGDirectMainDisplay))
+        displayCount = 1;
+
     displayList = malloc(displayCount * sizeof(CGDirectDisplayID));
     if(!displayList)
         FatalError("Unable to allocate memory for list of displays.\n");
commit 968652983f8e6ae6889b48e15f4098ff6ad4a15a
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date:   Tue Feb 8 12:26:35 2011 -0800

    XQuartz: RandR: Provide an alert box when entering a RandR mode for the first time.
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>

diff --git a/hw/xquartz/X11Application.h b/hw/xquartz/X11Application.h
index b3ad19b..256ff18 100644
--- a/hw/xquartz/X11Application.h
+++ b/hw/xquartz/X11Application.h
@@ -73,6 +73,8 @@ void X11ApplicationServerReady (void);
 void X11ApplicationShowHideMenubar (int state);
 void X11ApplicationLaunchClient (const char *cmd);
 
+Bool X11ApplicationCanEnterRandR (void);
+
 void X11ApplicationMain(int argc, char **argv, char **envp);
 
 #define PREFS_APPSMENU              "apps_menu"
@@ -86,6 +88,7 @@ void X11ApplicationMain(int argc, char **argv, char **envp);
 #define PREFS_NO_TCP                "nolisten_tcp"
 #define PREFS_DONE_XINIT_CHECK      "done_xinit_check"
 #define PREFS_NO_QUIT_ALERT         "no_quit_alert"
+#define PREFS_NO_RANDR_ALERT        "no_randr_alert"
 #define PREFS_OPTION_SENDS_ALT      "option_sends_alt"
 #define PREFS_FAKE_BUTTON2          "fake_button2"
 #define PREFS_FAKE_BUTTON3          "fake_button3"
diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index b855c83..3521517 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -883,6 +883,35 @@ void X11ApplicationLaunchClient (const char *cmd) {
     [string release];
 }
 
+/* This is a special function in that it is run from the *SERVER* thread and
+ * not the AppKit thread.  We want to block entering a screen-capturing RandR
+ * mode until we notify the user about how to get out if the X11 client crashes.
+ */
+Bool X11ApplicationCanEnterRandR(void) {
+    NSString *title, *msg;
+    
+    if([X11App prefs_get_boolean:@PREFS_NO_RANDR_ALERT default:NO] || XQuartzShieldingWindowLevel != 0)
+        return TRUE;
+    
+    title = NSLocalizedString(@"Enter RandR mode?", @"Dialog title when switching to RandR");
+    msg = NSLocalizedString(@"An application has requested X11 to change the resolution of your display.  X11 will restore the display to its previous state when the requesting application requests to return to the previous state.  Alternatively, you can use the ⌥⌘A key sequence to force X11 to return to the previous state.",
+                            @"Dialog when switching to RandR");
+
+    if(!XQuartzIsRootless)
+        QuartzShowFullscreen(FALSE);
+    
+    switch(NSRunAlertPanel(title, msg, NSLocalizedString(@"Allow", @""), NSLocalizedString (@"Cancel", @""), NSLocalizedString (@"Always Allow", @""))) {
+        case NSAlertOtherReturn:
+            [X11App prefs_set_boolean:@PREFS_NO_RANDR_ALERT value:YES];
+            [X11App prefs_synchronize];
+        case NSAlertDefaultReturn:
+            return YES;
+
+        default:
+            return NO;
+    }
+}
+
 static void check_xinitrc (void) {
     char *tem, buf[1024];
     NSString *msg;
diff --git a/hw/xquartz/bundle/Resources/English.lproj/Localizable.strings b/hw/xquartz/bundle/Resources/English.lproj/Localizable.strings
index 0341502..bf2089c 100644
Binary files a/hw/xquartz/bundle/Resources/English.lproj/Localizable.strings and b/hw/xquartz/bundle/Resources/English.lproj/Localizable.strings differ
diff --git a/hw/xquartz/quartzRandR.c b/hw/xquartz/quartzRandR.c
index 57e9755..ede7969 100644
--- a/hw/xquartz/quartzRandR.c
+++ b/hw/xquartz/quartzRandR.c
@@ -40,6 +40,8 @@
 #include "quartz.h"
 #include "darwin.h"
 
+#include "X11Application.h"
+
 #include <AvailabilityMacros.h>
 
 #include <X11/extensions/randr.h>
@@ -349,6 +351,8 @@ static Bool QuartzRandRSetMode(ScreenPtr pScreen, QuartzModeInfoPtr pMode, BOOL
     Bool captureDisplay = (pMode->refresh != FAKE_REFRESH_FULLSCREEN && pMode->refresh != FAKE_REFRESH_ROOTLESS);
 
     if(XQuartzShieldingWindowLevel == 0 && captureDisplay) {
+        if(!X11ApplicationCanEnterRandR())
+            return FALSE;
         CGCaptureAllDisplays();
         XQuartzShieldingWindowLevel = CGShieldingWindowLevel(); // 2147483630
         DEBUG_LOG("Display captured.  ShieldWindowID: %u, Shield level: %d\n",
commit 13578b852b7631f99cf1fd5e2e5469edc5aae369
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date:   Tue Feb 8 11:37:52 2011 -0800

    XQuartz: RandR: Capture the display when switching modes with RandR
    
    This will prevent native windows from resizing as we change resolutions.
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>

diff --git a/hw/xquartz/quartz.c b/hw/xquartz/quartz.c
index 222a5ea..11e5a74 100644
--- a/hw/xquartz/quartz.c
+++ b/hw/xquartz/quartz.c
@@ -82,6 +82,8 @@ Bool XQuartzIsRootless = TRUE;
 Bool XQuartzServerVisible = FALSE;
 Bool XQuartzFullscreenMenu = FALSE;
 
+int32_t XQuartzShieldingWindowLevel = 0;
+
 /*
 ===========================================================================
 
diff --git a/hw/xquartz/quartz.h b/hw/xquartz/quartz.h
index b83391d..67a7919 100644
--- a/hw/xquartz/quartz.h
+++ b/hw/xquartz/quartz.h
@@ -124,6 +124,8 @@ extern Bool XQuartzFullscreenMenu;   /* Show the menu bar (autohide) while in FS
 extern Bool XQuartzFullscreenDisableHotkeys;
 extern Bool XQuartzOptionSendsAlt;   /* Alt or Mode_switch? */
 
+extern int32_t XQuartzShieldingWindowLevel; /* CGShieldingWindowLevel() or 0 */
+
 Bool QuartzAddScreen(int index, ScreenPtr pScreen);
 Bool QuartzSetupScreen(int index, ScreenPtr pScreen);
 void QuartzInitOutput(int argc,char **argv);
diff --git a/hw/xquartz/quartzRandR.c b/hw/xquartz/quartzRandR.c
index 296f9b6..57e9755 100644
--- a/hw/xquartz/quartzRandR.c
+++ b/hw/xquartz/quartzRandR.c
@@ -346,6 +346,14 @@ static int QuartzRandRRegisterModeCallback (ScreenPtr pScreen,
 static Bool QuartzRandRSetMode(ScreenPtr pScreen, QuartzModeInfoPtr pMode, BOOL doRegister) {
     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
     CGDirectDisplayID screenId = pQuartzScreen->displayIDs[0];
+    Bool captureDisplay = (pMode->refresh != FAKE_REFRESH_FULLSCREEN && pMode->refresh != FAKE_REFRESH_ROOTLESS);
+
+    if(XQuartzShieldingWindowLevel == 0 && captureDisplay) {
+        CGCaptureAllDisplays();
+        XQuartzShieldingWindowLevel = CGShieldingWindowLevel(); // 2147483630
+        DEBUG_LOG("Display captured.  ShieldWindowID: %u, Shield level: %d\n",
+                  CGShieldingWindowID(screenId), XQuartzShieldingWindowLevel);
+    }
 
     if (pQuartzScreen->currentMode.ref && CFEqual(pMode->ref, pQuartzScreen->currentMode.ref)) {
         DEBUG_LOG("Requested RandR resolution matches current CG mode\n");
@@ -369,6 +377,11 @@ static Bool QuartzRandRSetMode(ScreenPtr pScreen, QuartzModeInfoPtr pMode, BOOL
     pQuartzScreen->currentMode = *pMode;
     CFRetain(pQuartzScreen->currentMode.ref);
     
+    if(XQuartzShieldingWindowLevel != 0 && !captureDisplay) {
+        CGReleaseAllDisplays();
+        XQuartzShieldingWindowLevel = 0;
+    }
+
     return TRUE;
 }
 
diff --git a/hw/xquartz/xpr/xprAppleWM.c b/hw/xquartz/xpr/xprAppleWM.c
index 1a3d427..21e6f98 100644
--- a/hw/xquartz/xpr/xprAppleWM.c
+++ b/hw/xquartz/xpr/xprAppleWM.c
@@ -69,6 +69,8 @@ static int xprSetWindowLevel(
     
     if(XQuartzIsRootless)
         wc.window_level = normal_window_levels[level];
+    else if(XQuartzShieldingWindowLevel)
+        wc.window_level = XQuartzShieldingWindowLevel + 1;
     else
         wc.window_level = rooted_window_levels[level];
     
diff --git a/hw/xquartz/xpr/xprFrame.c b/hw/xquartz/xpr/xprFrame.c
index 8ee3a28..15598e9 100644
--- a/hw/xquartz/xpr/xprFrame.c
+++ b/hw/xquartz/xpr/xprFrame.c
@@ -173,6 +173,8 @@ xprCreateFrame(RootlessWindowPtr pFrame, ScreenPtr pScreen,
 
     if(XQuartzIsRootless)
         wc.window_level = normal_window_levels[pFrame->level];
+    else if(XQuartzShieldingWindowLevel)
+        wc.window_level = XQuartzShieldingWindowLevel + 1;
     else
         wc.window_level = rooted_window_levels[pFrame->level];
     mask |= XP_WINDOW_LEVEL;
@@ -287,6 +289,8 @@ static void xprRestackFrame(RootlessFrameID wid, RootlessFrameID nextWid) {
         if(winRec) {
             if(XQuartzIsRootless)
                 wc.window_level = normal_window_levels[winRec->level];
+            else if(XQuartzShieldingWindowLevel)
+                wc.window_level = XQuartzShieldingWindowLevel + 1;
             else
                 wc.window_level = rooted_window_levels[winRec->level];
             mask |= XP_WINDOW_LEVEL;
commit f3d19c0cf3327cceb90f7378f5d8fc0c3e327400
Author: Keith Packard <keithp at keithp.com>
Date:   Fri Feb 25 21:22:23 2011 -0800

    Version bumped to 1.10
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index c1f2031..85d5c98 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,8 +26,8 @@ dnl
 dnl Process this file with autoconf to create configure.
 
 AC_PREREQ(2.57)
-AC_INIT([xorg-server], 1.9.99.903, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
-RELEASE_DATE="2011-2-24"
+AC_INIT([xorg-server], 1.10.0, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+RELEASE_DATE="2011-2-25"
 AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([foreign dist-bzip2])
 AM_MAINTAINER_MODE
commit 678f5396c91b3d0c7572ed579b0a4fb62b2b4655
Author: Keith Packard <keithp at keithp.com>
Date:   Fri Feb 25 21:10:21 2011 -0800

    input: Ensure Valuator axes are aligned as needed
    
    Let the compiler figure out the correct alignment for the axes data
    for a valuator by using a union to force double alignment of the
    initial ValuatorClassRec structure in the allocation.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>
    Tested-by: Julien Cristau <jcristau at debian.org>
    Reviewed-by: Julien Cristau <jcristau at debian.org>

diff --git a/dix/devices.c b/dix/devices.c
index 6c0dc42..89294aa 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -1225,6 +1225,7 @@ InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes, Atom *labels,
 {
     int i;
     ValuatorClassPtr valc;
+    union align_u { ValuatorClassRec valc; double d; } *align;
 
     if (!dev)
         return FALSE;
@@ -1237,12 +1238,13 @@ InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes, Atom *labels,
         numAxes = MAX_VALUATORS;
     }
 
-    valc = (ValuatorClassPtr)calloc(1, sizeof(ValuatorClassRec) +
-				    numAxes * sizeof(AxisInfo) +
-				    numAxes * sizeof(double));
-    if (!valc)
+    align = (union align_u *) calloc(1, sizeof(union align_u) +
+				     numAxes * sizeof(double) +
+				     numAxes * sizeof(AxisInfo));
+    if (!align)
 	return FALSE;
 
+    valc = &align->valc;
     valc->sourceid = dev->id;
     valc->motion = NULL;
     valc->first_motion = 0;
@@ -1251,8 +1253,8 @@ InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes, Atom *labels,
     valc->numMotionEvents = numMotionEvents;
     valc->motionHintWindow = NullWindow;
     valc->numAxes = numAxes;
-    valc->axes = (AxisInfoPtr)(valc + 1);
-    valc->axisVal = (double *)(valc->axes + numAxes);
+    valc->axisVal = (double *)(align + 1);
+    valc->axes = (AxisInfoPtr)(valc->axisVal + numAxes);
 
     if (mode & OutOfProximity)
         InitProximityClassDeviceStruct(dev);
commit dc8f52e77f51b6fa8908d9611c3f7e3cfbbaf2d1
Author: Keith Packard <keithp at keithp.com>
Date:   Fri Feb 25 16:38:27 2011 -0800

    hw/dmx/doc: Add explicit dependency for all doxygen output files
    
    Instead of listing one of the doxygen output files and depending on
    sequential execution to ensure that the other files were present
    before make checked for them, create explicit dependencies so that
    make will not check for the additional files until after doxygen has
    been run.
    
    This allows parallel make to work correctly in this directory.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>
    Tested-by: Kristian Høgsberg <krh at bitplanet.net>

diff --git a/hw/dmx/doc/Makefile.am b/hw/dmx/doc/Makefile.am
index 838b6f2..8e73602 100644
--- a/hw/dmx/doc/Makefile.am
+++ b/hw/dmx/doc/Makefile.am
@@ -24,34 +24,14 @@ doc_sources = dmx.xml scaled.xml
 # Developer's documentation is not installed
 if ENABLE_DEVEL_DOCS
 include $(top_srcdir)/doc/xml/xmlrules-noinst.in
-
-if HAVE_DOXYGEN
-
-DOXYGEN_SRC=doxygen.head doxygen.foot doxygen.css doxygen.conf
-
-all-local: html/annotated.html
-
-dist-local: html/annotated.html
-
-html/annotated.html: $(DOXYGEN_SRC)
-	$(DOXYGEN) doxygen.conf
-
-maintainer-clean-local:
-	rm -rf html/
-endif
 endif ENABLE_DEVEL_DOCS
 
-EXTRA_DIST = \
-	$(XML_FILES) \
-	DMXSpec.txt \
-	DMXSpec-v1.txt \
+DOXYGEN_HEAD=\
+	html/annotated.html
+
+DOXYGEN_REST= \
 	dmx.txt \
-	doxygen.conf \
-	doxygen.css \
-	doxygen.foot \
-	doxygen.head \
 	scaled.txt \
-	html/annotated.html \
 	html/ChkNotMaskEv_8c.html \
 	html/ChkNotMaskEv_8h.html \
 	html/ChkNotMaskEv_8h_source.html \
@@ -254,6 +234,41 @@ EXTRA_DIST = \
 	html/usb-private_8h.html \
 	html/usb-private_8h_source.html
 
+DOXYGEN_FILES=$(DOXYGEN_HEAD) $(DOXYGEN_REST)
+
+EXTRA_DIST = \
+	$(XML_FILES) \
+	DMXSpec.txt \
+	DMXSpec-v1.txt \
+	doxygen.conf \
+	doxygen.css \
+	doxygen.foot \
+	doxygen.head \
+	$(DOXYGEN_FILES)
+
+if ENABLE_DEVEL_DOCS
+if HAVE_DOXYGEN
+
+DOXYGEN_SRC=doxygen.head doxygen.foot doxygen.css doxygen.conf
+
+all-local: $(DOXYGEN_FILES)
+
+dist-local: $(DOXYGEN_FILES)
+
+$(DOXYGEN_HEAD): $(DOXYGEN_SRC)
+	$(DOXYGEN) doxygen.conf
+
+$(DOXYGEN_REST): $(DOXYGEN_HEAD)
+
+maintainer-clean-local:
+	rm -rf html/ scaled.txt dmx.txt
+
+distclean-local:
+	rm -rf html/ scaled.txt dmx.txt
+
+endif HAVE_DOXYGEN
+endif ENABLE_DEVEL_DOCS
+
 $(builddir)/doxygen.head:
 	$(LN_S) $(srcdir)/doxygen.head $@
 
commit fd4d9c75c265add8d6cc74afb341c9c4f2ec1073
Author: Keith Packard <keithp at keithp.com>
Date:   Fri Feb 25 10:54:50 2011 -0800

    hw/xwin: Look for gl spec files in $(srcdir) or .
    
    Tarballs include the downloaded gl spec files, which will end up in
    $(srcdir). But, git-based builds will not have them at all and will
    need to download them from opengl.org. They'll land in in the build
    directory instead of $(srcdir), and so we need to allow them to be in
    either place.
    
    This change checks for the files in $(srcdir), linking them to . if
    present. Otherwise, it downloads them from opengl.org.
    
    A suggested better solution is to have Mesa install these files somewhere.
    
    Signed-off-by: Keith Packard <keithp at keithp.com>
    Tested-by: Kristian Høgsberg <krh at bitplanet.net>

diff --git a/hw/xwin/glx/Makefile.am b/hw/xwin/glx/Makefile.am
index e9fea50..303ff53 100644
--- a/hw/xwin/glx/Makefile.am
+++ b/hw/xwin/glx/Makefile.am
@@ -45,10 +45,10 @@ wgl.tm:
 	wget http://www.opengl.org/registry/api/wgl.tm
 
 generated_gl_wrappers.c: gen_gl_wrappers.py gl.spec gl.tm
-	$(srcdir)/gen_gl_wrappers.py --spec=$(srcdir)/gl.spec --typemap=$(srcdir)/gl.tm --dispatch-header=$(top_srcdir)/glx/dispatch.h --staticwrappers >generated_gl_wrappers.c
+	$(srcdir)/gen_gl_wrappers.py --spec=`test -e gl.spec || echo $(srcdir)/`gl.spec --typemap=`test -e gl.tm || echo $(srcdir)/`gl.tm --dispatch-header=$(top_srcdir)/glx/dispatch.h --staticwrappers >generated_gl_wrappers.c
 
 generated_wgl_wrappers.c: gen_gl_wrappers.py wglext.spec wgl.tm
-	$(srcdir)/gen_gl_wrappers.py --spec=$(srcdir)/wglext.spec --typemap=$(srcdir)/wgl.tm --prefix=wgl --preresolve >generated_wgl_wrappers.c
+	$(srcdir)/gen_gl_wrappers.py --spec=`test -e wglext.spec || echo $(srcdir)/`wglext.spec --typemap=`test -e wgl.tm || echo $(srcdir)/`wgl.tm --prefix=wgl --preresolve >generated_wgl_wrappers.c
 
 wglext.h:
 	wget http://www.opengl.org/registry/api/wglext.h
commit 6b951dec69103ca76d6d4a61b1a2f67a52d013b9
Author: Dan Nicholson <dbn.lists at gmail.com>
Date:   Sun Feb 20 09:51:15 2011 -0800

    dmx: Construct paths in doxygen.conf to fix VPATH builds
    
    The paths in doxygen.conf assumed that srcdir=builddir and broke
    otherwise. Use autoconf to fill in the paths to the srcdir so that the
    files can be found when users have a separate build directory (as with
    distcheck).
    
    Signed-off-by: Dan Nicholson <dbn.lists at gmail.com>
    Tested-by: Cyril Brulebois <kibi at debian.org>
    Reviewed-by: Gaetan Nadon <memsize at videotron.ca>
    Tested-by: Sedat Dilek <sedat.dilek at gmail.com>

diff --git a/configure.ac b/configure.ac
index e438fa1..c1f2031 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2248,6 +2248,7 @@ hw/xfree86/utils/gtf/Makefile
 hw/dmx/config/Makefile
 hw/dmx/config/man/Makefile
 hw/dmx/doc/Makefile
+hw/dmx/doc/doxygen.conf
 hw/dmx/examples/Makefile
 hw/dmx/input/Makefile
 hw/dmx/glxProxy/Makefile
diff --git a/hw/dmx/doc/.gitignore b/hw/dmx/doc/.gitignore
index 6bdd862..92c1150 100644
--- a/hw/dmx/doc/.gitignore
+++ b/hw/dmx/doc/.gitignore
@@ -8,3 +8,4 @@ scaled.html
 scaled.pdf
 scaled.ps
 scaled.txt
+doxygen.conf
diff --git a/hw/dmx/doc/Makefile.am b/hw/dmx/doc/Makefile.am
index 4bbc8bf..838b6f2 100644
--- a/hw/dmx/doc/Makefile.am
+++ b/hw/dmx/doc/Makefile.am
@@ -34,7 +34,7 @@ all-local: html/annotated.html
 dist-local: html/annotated.html
 
 html/annotated.html: $(DOXYGEN_SRC)
-	$(DOXYGEN) $(srcdir)/doxygen.conf
+	$(DOXYGEN) doxygen.conf
 
 maintainer-clean-local:
 	rm -rf html/
diff --git a/hw/dmx/doc/doxygen.conf b/hw/dmx/doc/doxygen.conf
deleted file mode 100644
index f7a541f..0000000
--- a/hw/dmx/doc/doxygen.conf
+++ /dev/null
@@ -1,1053 +0,0 @@
-# Doxyfile 1.3.4
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
-#
-# All text after a hash (#) is considered a comment and will be ignored
-# The format is:
-#       TAG = value [value, ...]
-# For lists items can also be appended using:
-#       TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
-# by quotes) that should identify the project.
-
-PROJECT_NAME           = "Distributed Multihead X"
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
-# This could be handy for archiving the generated documentation or 
-# if some version control system is used.
-
-PROJECT_NUMBER         = "dmx-1-2-20040604 and later"
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
-# base path where the generated documentation will be put. 
-# If a relative path is entered, it will be relative to the location 
-# where doxygen was started. If left blank the current directory will be used.
-
-OUTPUT_DIRECTORY       = 
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
-# documentation generated by doxygen is written. Doxygen will use this 
-# information to generate all constant output in the proper language. 
-# The default language is English, other supported languages are: 
-# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, 
-# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en 
-# (Japanese with English messages), Korean, Norwegian, Polish, Portuguese, 
-# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
-
-OUTPUT_LANGUAGE        = English
-
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
-# include brief member descriptions after the members that are listed in 
-# the file and class documentation (similar to JavaDoc). 
-# Set to NO to disable this.
-
-BRIEF_MEMBER_DESC      = YES
-
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
-# the brief description of a member or function before the detailed description. 
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
-# brief descriptions will be completely suppressed.
-
-REPEAT_BRIEF           = YES
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
-# Doxygen will generate a detailed section even if there is only a brief 
-# description.
-
-ALWAYS_DETAILED_SEC    = YES
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited 
-# members of a class in the documentation of that class as if those members were 
-# ordinary class members. Constructors, destructors and assignment operators of 
-# the base classes will not be shown.
-
-INLINE_INHERITED_MEMB  = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
-# path before files name in the file list and in the header files. If set 
-# to NO the shortest path that makes the file name unique will be used.
-
-FULL_PATH_NAMES        = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
-# can be used to strip a user-defined part of the path. Stripping is 
-# only done if one of the specified strings matches the left-hand part of 
-# the path. It is allowed to use relative paths in the argument list.
-
-STRIP_FROM_PATH        = 
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
-# (but less readable) file names. This can be useful is your file systems 
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
-SHORT_NAMES            = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
-# will interpret the first line (until the first dot) of a JavaDoc-style 
-# comment as the brief description. If set to NO, the JavaDoc 
-# comments will behave just like the Qt-style comments (thus requiring an 
-# explict @brief command for a brief description.
-
-JAVADOC_AUTOBRIEF      = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
-# comments) as a brief description. This used to be the default behaviour. 
-# The new default is to treat a multi-line C++ comment block as a detailed 
-# description. Set this tag to YES if you prefer the old behaviour instead.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
-# member inherits the documentation from any documented member that it 
-# reimplements.
-
-INHERIT_DOCS           = YES
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
-# tag is set to YES, then doxygen will reuse the documentation of the first 
-# member in the group (if any) for the other members of the group. By default 
-# all members of a group must be documented explicitly.
-
-DISTRIBUTE_GROUP_DOC   = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
-# Doxygen uses this value to replace tabs by spaces in code fragments.
-
-TAB_SIZE               = 8
-
-# This tag can be used to specify a number of aliases that acts 
-# as commands in the documentation. An alias has the form "name=value". 
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
-# put the command \sideeffect (or @sideeffect) in the documentation, which 
-# will result in a user-defined paragraph with heading "Side Effects:". 
-# You can put \n's in the value part of an alias to insert newlines.
-
-ALIASES                = 
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources 
-# only. Doxygen will then generate output that is more tailored for C. 
-# For instance, some of the names that are used will be different. The list 
-# of all members will be omitted, etc.
-
-OPTIMIZE_OUTPUT_FOR_C  = YES
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources 
-# only. Doxygen will then generate output that is more tailored for Java. 
-# For instance, namespaces will be presented as packages, qualified scopes 
-# will look different, etc.
-
-OPTIMIZE_OUTPUT_JAVA   = NO
-
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
-# the same type (for instance a group of public functions) to be put as a 
-# subgroup of that type (e.g. under the Public Functions section). Set it to 
-# NO to prevent subgrouping. Alternatively, this can be done per class using 
-# the \nosubgrouping command.
-
-SUBGROUPING            = YES
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
-# documentation are documented, even if no documentation was available. 
-# Private class members and static file members will be hidden unless 
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-
-EXTRACT_ALL            = YES
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
-# will be included in the documentation.
-
-EXTRACT_PRIVATE        = NO
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file 
-# will be included in the documentation.
-
-EXTRACT_STATIC         = YES
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
-# defined locally in source files will be included in the documentation. 
-# If set to NO only classes defined in header files are included.
-
-EXTRACT_LOCAL_CLASSES  = YES
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
-# undocumented members of documented classes, files or namespaces. 
-# If set to NO (the default) these members will be included in the 
-# various overviews, but no documentation section is generated. 
-# This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_MEMBERS     = YES
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
-# undocumented classes that are normally visible in the class hierarchy. 
-# If set to NO (the default) these classes will be included in the various 
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_CLASSES     = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
-# friend (class|struct|union) declarations. 
-# If set to NO (the default) these declarations will be included in the 
-# documentation.
-
-HIDE_FRIEND_COMPOUNDS  = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
-# documentation blocks found inside the body of a function. 
-# If set to NO (the default) these blocks will be appended to the 
-# function's detailed documentation block.
-
-HIDE_IN_BODY_DOCS      = NO
-
-# The INTERNAL_DOCS tag determines if documentation 
-# that is typed after a \internal command is included. If the tag is set 
-# to NO (the default) then the documentation will be excluded. 
-# Set it to YES to include the internal documentation.
-
-INTERNAL_DOCS          = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
-# file names in lower-case letters. If set to YES upper-case letters are also 
-# allowed. This is useful if you have classes or files whose names only differ 
-# in case and if your file system supports case sensitive file names. Windows 
-# users are advised to set this option to NO.
-
-CASE_SENSE_NAMES       = YES
-
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
-# will show members with their full class and namespace scopes in the 
-# documentation. If set to YES the scope will be hidden.
-
-HIDE_SCOPE_NAMES       = NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
-# will put a list of the files that are included by a file in the documentation 
-# of that file.
-
-SHOW_INCLUDE_FILES     = YES
-
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
-# is inserted in the documentation for inline members.
-
-INLINE_INFO            = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
-# will sort the (detailed) documentation of file and class members 
-# alphabetically by member name. If set to NO the members will appear in 
-# declaration order.
-
-SORT_MEMBER_DOCS       = YES
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or 
-# disable (NO) the todo list. This list is created by putting \todo 
-# commands in the documentation.
-
-GENERATE_TODOLIST      = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or 
-# disable (NO) the test list. This list is created by putting \test 
-# commands in the documentation.
-
-GENERATE_TESTLIST      = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or 
-# disable (NO) the bug list. This list is created by putting \bug 
-# commands in the documentation.
-
-GENERATE_BUGLIST       = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
-# disable (NO) the deprecated list. This list is created by putting 
-# \deprecated commands in the documentation.
-
-GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional 
-# documentation sections, marked by \if sectionname ... \endif.
-
-ENABLED_SECTIONS       = 
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
-# the initial value of a variable or define consists of for it to appear in 
-# the documentation. If the initializer consists of more lines than specified 
-# here it will be hidden. Use a value of 0 to hide initializers completely. 
-# The appearance of the initializer of individual variables and defines in the 
-# documentation can be controlled using \showinitializer or \hideinitializer 
-# command in the documentation regardless of this setting.
-
-MAX_INITIALIZER_LINES  = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
-# at the bottom of the documentation of classes and structs. If set to YES the 
-# list will mention the files that were used to generate the documentation.
-
-SHOW_USED_FILES        = YES
-
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated 
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
-
-QUIET                  = YES
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are 
-# generated by doxygen. Possible values are YES and NO. If left blank 
-# NO is used.
-
-WARNINGS               = YES
-
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
-# automatically be disabled.
-
-WARN_IF_UNDOCUMENTED   = YES
-
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
-# potential errors in the documentation, such as not documenting some 
-# parameters in a documented function, or documenting parameters that 
-# don't exist or using markup commands wrongly.
-
-WARN_IF_DOC_ERROR      = YES
-
-# The WARN_FORMAT tag determines the format of the warning messages that 
-# doxygen can produce. The string should contain the $file, $line, and $text 
-# tags, which will be replaced by the file and line number from which the 
-# warning originated and the warning text.
-
-WARN_FORMAT            = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning 
-# and error messages should be written. If left blank the output is written 
-# to stderr.
-
-WARN_LOGFILE           = 
-
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag can be used to specify the files and/or directories that contain 
-# documented source files. You may enter file names like "myfile.cpp" or 
-# directories like "/usr/src/myproject". Separate the files or directories 
-# with spaces.
-
-INPUT                  = .. \
-                         ../input \
-                         ../config
-
-# If the value of the INPUT tag contains directories, you can use the 
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
-# and *.h) to filter out the source-files in the directories. If left 
-# blank the following patterns are tested: 
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp 
-# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc
-
-FILE_PATTERNS          = 
-
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
-# should be searched for input files as well. Possible values are YES and NO. 
-# If left blank NO is used.
-
-RECURSIVE              = NO
-
-# The EXCLUDE tag can be used to specify files and/or directories that should 
-# excluded from the INPUT source files. This way you can easily exclude a 
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-
-EXCLUDE                = ../config/parser.c \
-                         ../config/parser.h \
-                         ../config/scanner.c
-
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories 
-# that are symbolic links (a Unix filesystem feature) are excluded from the input.
-
-EXCLUDE_SYMLINKS       = YES
-
-# If the value of the INPUT tag contains directories, you can use the 
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
-# certain files from those directories.
-
-EXCLUDE_PATTERNS       = atKeynames.h \
-                         Canvas*.*
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or 
-# directories that contain example code fragments that are included (see 
-# the \include command).
-
-EXAMPLE_PATH           = 
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
-# and *.h) to filter out the source-files in the directories. If left 
-# blank all files are included.
-
-EXAMPLE_PATTERNS       = 
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
-# searched for input files to be used with the \include or \dontinclude 
-# commands irrespective of the value of the RECURSIVE tag. 
-# Possible values are YES and NO. If left blank NO is used.
-
-EXAMPLE_RECURSIVE      = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or 
-# directories that contain image that are included in the documentation (see 
-# the \image command).
-
-IMAGE_PATH             = 
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should 
-# invoke to filter for each input file. Doxygen will invoke the filter program 
-# by executing (via popen()) the command <filter> <input-file>, where <filter> 
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
-# input file. Doxygen will then use the output that the filter program writes 
-# to standard output.
-
-INPUT_FILTER           = 
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
-# INPUT_FILTER) will be used to filter the input files when producing source 
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
-
-FILTER_SOURCE_FILES    = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
-# be generated. Documented entities will be cross-referenced with these sources.
-
-SOURCE_BROWSER         = NO
-
-# Setting the INLINE_SOURCES tag to YES will include the body 
-# of functions and classes directly in the documentation.
-
-INLINE_SOURCES         = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
-# doxygen to hide any special comment blocks from generated source code 
-# fragments. Normal C and C++ comments will always remain visible.
-
-STRIP_CODE_COMMENTS    = YES
-
-# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
-# then for each documented function all documented 
-# functions referencing it will be listed.
-
-REFERENCED_BY_RELATION = YES
-
-# If the REFERENCES_RELATION tag is set to YES (the default) 
-# then for each documented function all documented entities 
-# called/used by that function will be listed.
-
-REFERENCES_RELATION    = YES
-
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
-# will generate a verbatim copy of the header file for each class for 
-# which an include is specified. Set to NO to disable this.
-
-VERBATIM_HEADERS       = YES
-
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
-# of all compounds will be generated. Enable this if the project 
-# contains a lot of classes, structs, unions or interfaces.
-
-ALPHABETICAL_INDEX     = YES
-
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
-# in which this list will be split (can be a number in the range [1..20])
-
-COLS_IN_ALPHA_INDEX    = 5
-
-# In case all classes in a project start with a common prefix, all 
-# classes will be put under the same header in the alphabetical index. 
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
-# should be ignored while generating the index headers.
-
-IGNORE_PREFIX          = 
-
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
-# generate HTML output.
-
-GENERATE_HTML          = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `html' will be used as the default path.
-
-HTML_OUTPUT            = html
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
-# doxygen will generate files with .html extension.
-
-HTML_FILE_EXTENSION    = .html
-
-# The HTML_HEADER tag can be used to specify a personal HTML header for 
-# each generated HTML page. If it is left blank doxygen will generate a 
-# standard header.
-
-HTML_HEADER            = doxygen.head
-
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
-# each generated HTML page. If it is left blank doxygen will generate a 
-# standard footer.
-
-HTML_FOOTER            = doxygen.foot
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
-# style sheet that is used by each HTML page. It can be used to 
-# fine-tune the look of the HTML output. If the tag is left blank doxygen 
-# will generate a default style sheet
-
-HTML_STYLESHEET        = doxygen.css
-
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
-# files or namespaces will be aligned in HTML using tables. If set to 
-# NO a bullet list will be used.
-
-HTML_ALIGN_MEMBERS     = YES
-
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
-# will be generated that can be used as input for tools like the 
-# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
-# of the generated HTML documentation.
-
-GENERATE_HTMLHELP      = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
-# be used to specify the file name of the resulting .chm file. You 
-# can add a path in front of the file if the result should not be 
-# written to the html output dir.
-
-CHM_FILE               = 
-
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
-# be used to specify the location (absolute path including file name) of 
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
-# the HTML help compiler on the generated index.hhp.
-
-HHC_LOCATION           = 
-
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
-# controls if a separate .chi index file is generated (YES) or that 
-# it should be included in the master .chm file (NO).
-
-GENERATE_CHI           = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
-# controls whether a binary table of contents is generated (YES) or a 
-# normal table of contents (NO) in the .chm file.
-
-BINARY_TOC             = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members 
-# to the contents of the HTML help documentation and to the tree view.
-
-TOC_EXPAND             = NO
-
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
-# top of each HTML page. The value NO (the default) enables the index and 
-# the value YES disables it.
-
-DISABLE_INDEX          = NO
-
-# This tag can be used to set the number of enum values (range [1..20]) 
-# that doxygen will group on one line in the generated HTML documentation.
-
-ENUM_VALUES_PER_LINE   = 4
-
-# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
-# generated containing a tree-like index structure (just like the one that 
-# is generated for HTML Help). For this to work a browser that supports 
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
-# probably better off using the HTML help feature.
-
-GENERATE_TREEVIEW      = YES
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
-# used to set the initial width (in pixels) of the frame in which the tree 
-# is shown.
-
-TREEVIEW_WIDTH         = 250
-
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
-# generate Latex output.
-
-GENERATE_LATEX         = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `latex' will be used as the default path.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
-# invoked. If left blank `latex' will be used as the default command name.
-
-LATEX_CMD_NAME         = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
-# generate index for LaTeX. If left blank `makeindex' will be used as the 
-# default command name.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
-# LaTeX documents. This may be useful for small projects and may help to 
-# save some trees in general.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used 
-# by the printer. Possible values are: a4, a4wide, letter, legal and 
-# executive. If left blank a4wide will be used.
-
-PAPER_TYPE             = a4wide
-
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
-# packages that should be included in the LaTeX output.
-
-EXTRA_PACKAGES         = 
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
-# the generated latex document. The header should contain everything until 
-# the first chapter. If it is left blank doxygen will generate a 
-# standard header. Notice: only use this tag if you know what you are doing!
-
-LATEX_HEADER           = 
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
-# contain links (just like the HTML output) instead of page references 
-# This makes the output suitable for online browsing using a pdf viewer.
-
-PDF_HYPERLINKS         = NO
-
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
-# plain latex in the generated Makefile. Set this option to YES to get a 
-# higher quality PDF documentation.
-
-USE_PDFLATEX           = NO
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
-# command to the generated LaTeX files. This will instruct LaTeX to keep 
-# running if errors occur, instead of asking the user for help. 
-# This option is also used when generating formulas in HTML.
-
-LATEX_BATCHMODE        = NO
-
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
-# include the index chapters (such as File Index, Compound Index, etc.) 
-# in the output.
-
-LATEX_HIDE_INDICES     = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
-# The RTF output is optimised for Word 97 and may not look very pretty with 
-# other RTF readers or editors.
-
-GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `rtf' will be used as the default path.
-
-RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
-# RTF documents. This may be useful for small projects and may help to 
-# save some trees in general.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
-# will contain hyperlink fields. The RTF file will 
-# contain links (just like the HTML output) instead of page references. 
-# This makes the output suitable for online browsing using WORD or other 
-# programs which support those fields. 
-# Note: wordpad (write) and others do not support links.
-
-RTF_HYPERLINKS         = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's 
-# config file, i.e. a series of assigments. You only have to provide 
-# replacements, missing definitions are set to their default value.
-
-RTF_STYLESHEET_FILE    = 
-
-# Set optional variables used in the generation of an rtf document. 
-# Syntax is similar to doxygen's config file.
-
-RTF_EXTENSIONS_FILE    = 
-
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
-# generate man pages
-
-GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `man' will be used as the default path.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to 
-# the generated man pages (default is the subroutine's section .3)
-
-MAN_EXTENSION          = .3
-
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
-# then it will generate one additional man file for each entity 
-# documented in the real man page(s). These additional files 
-# only source the real man page, but without them the man command 
-# would be unable to find the correct page. The default is NO.
-
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES Doxygen will 
-# generate an XML file that captures the structure of 
-# the code including all documentation. Note that this 
-# feature is still experimental and incomplete at the 
-# moment.
-
-GENERATE_XML           = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `xml' will be used as the default path.
-
-XML_OUTPUT             = xml
-
-# The XML_SCHEMA tag can be used to specify an XML schema, 
-# which can be used by a validating XML parser to check the 
-# syntax of the XML files.
-
-XML_SCHEMA             = 
-
-# The XML_DTD tag can be used to specify an XML DTD, 
-# which can be used by a validating XML parser to check the 
-# syntax of the XML files.
-
-XML_DTD                = 
-
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
-# generate an AutoGen Definitions (see autogen.sf.net) file 
-# that captures the structure of the code including all 
-# documentation. Note that this feature is still experimental 
-# and incomplete at the moment.
-
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
-# generate a Perl module file that captures the structure of 
-# the code including all documentation. Note that this 
-# feature is still experimental and incomplete at the 
-# moment.
-
-GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
-# to generate PDF and DVI output from the Perl module output.
-
-PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
-# nicely formatted so it can be parsed by a human reader.  This is useful 
-# if you want to understand what is going on.  On the other hand, if this 
-# tag is set to NO the size of the Perl module output will be much smaller 
-# and Perl will parse it just the same.
-
-PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file 
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
-# This is useful so different doxyrules.make files included by the same 
-# Makefile don't overwrite each other's variables.
-
-PERLMOD_MAKEVAR_PREFIX = 
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor   
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
-# evaluate all C-preprocessor directives found in the sources and include 
-# files.
-
-ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
-# names in the source code. If set to NO (the default) only conditional 
-# compilation will be performed. Macro expansion can be done in a controlled 
-# way by setting EXPAND_ONLY_PREDEF to YES.
-
-MACRO_EXPANSION        = NO
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
-# then the macro expansion is limited to the macros specified with the 
-# PREDEFINED and EXPAND_AS_PREDEFINED tags.
-
-EXPAND_ONLY_PREDEF     = NO
-
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
-
-SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that 
-# contain include files that are not input files but should be processed by 
-# the preprocessor.
-
-INCLUDE_PATH           = 
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
-# patterns (like *.h and *.hpp) to filter out the header-files in the 
-# directories. If left blank, the patterns specified with FILE_PATTERNS will 
-# be used.
-
-INCLUDE_FILE_PATTERNS  = 
-
-# The PREDEFINED tag can be used to specify one or more macro names that 
-# are defined before the preprocessor is started (similar to the -D option of 
-# gcc). The argument of the tag is a list of macros of the form: name 
-# or name=definition (no spaces). If the definition and the = are 
-# omitted =1 is assumed.
-
-PREDEFINED             = SHAPE \
-                         RENDER \
-                         XKB \
-                         XINPUT
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
-# this tag can be used to specify a list of macro names that should be expanded. 
-# The macro definition that is found in the sources will be used. 
-# Use the PREDEFINED tag if you want to use a different macro definition.
-
-EXPAND_AS_DEFINED      = 
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
-# doxygen's preprocessor will remove all function-like macros that are alone 
-# on a line, have an all uppercase name, and do not end with a semicolon. Such 
-# function macros are typically used for boiler-plate code, and will confuse the 
-# parser if not removed.
-
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration::addtions related to external references   
-#---------------------------------------------------------------------------
-
-# The TAGFILES option can be used to specify one or more tagfiles. 
-# Optionally an initial location of the external documentation 
-# can be added for each tagfile. The format of a tag file without 
-# this location is as follows: 
-#   TAGFILES = file1 file2 ... 
-# Adding location for the tag files is done as follows: 
-#   TAGFILES = file1=loc1 "file2 = loc2" ... 
-# where "loc1" and "loc2" can be relative or absolute paths or 
-# URLs. If a location is present for each tag, the installdox tool 
-# does not have to be run to correct the links.
-# Note that each tag file must have a unique name
-# (where the name does NOT include the path)
-# If a tag file is not located in the directory in which doxygen 
-# is run, you must also specify the path to the tagfile here.
-
-TAGFILES               = 
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
-# a tag file that is based on the input files it reads.
-
-GENERATE_TAGFILE       = 
-
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
-# in the class index. If set to NO only the inherited external classes 
-# will be listed.
-
-ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
-# in the modules index. If set to NO, only the current project's groups will 
-# be listed.
-
-EXTERNAL_GROUPS        = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script 
-# interpreter (i.e. the result of `which perl').
-
-PERL_PATH              = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool   
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or 
-# super classes. Setting the tag to NO turns the diagrams off. Note that this 
-# option is superceded by the HAVE_DOT option below. This is only a fallback. It is 
-# recommended to install and use dot, since it yields more powerful graphs.
-
-CLASS_DIAGRAMS         = YES
-
-# If set to YES, the inheritance and collaboration graphs will hide 
-# inheritance and usage relations if the target is undocumented 
-# or is not a class.
-
-HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
-# available from the path. This tool is part of Graphviz, a graph visualization 
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
-# have no effect if this option is set to NO (the default)
-
-HAVE_DOT               = NO
-
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for each documented class showing the direct and 
-# indirect inheritance relations. Setting this tag to YES will force the 
-# the CLASS_DIAGRAMS tag to NO.
-
-CLASS_GRAPH            = YES
-
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for each documented class showing the direct and 
-# indirect implementation dependencies (inheritance, containment, and 
-# class references variables) of the class with other documented classes.
-
-COLLABORATION_GRAPH    = YES
-
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
-# collaboration diagrams in a style similiar to the OMG's Unified Modeling 
-# Language.
-
-UML_LOOK               = NO
-
-# If set to YES, the inheritance and collaboration graphs will show the 
-# relations between templates and their instances.
-
-TEMPLATE_RELATIONS     = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
-# tags are set to YES then doxygen will generate a graph for each documented 
-# file showing the direct and indirect include dependencies of the file with 
-# other documented files.
-
-INCLUDE_GRAPH          = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
-# documented header file showing the documented files that directly or 
-# indirectly include this file.
-
-INCLUDED_BY_GRAPH      = YES
-
-# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
-# generate a call dependency graph for every global function or class method. 
-# Note that enabling this option will significantly increase the time of a run. 
-# So in most cases it will be better to enable call graphs for selected 
-# functions only using the \callgraph command.
-
-CALL_GRAPH             = NO
-
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
-# will graphical hierarchy of all classes instead of a textual one.
-
-GRAPHICAL_HIERARCHY    = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
-# generated by dot. Possible values are png, jpg, or gif
-# If left blank png will be used.
-
-DOT_IMAGE_FORMAT       = gif
-
-# The tag DOT_PATH can be used to specify the path where the dot tool can be 
-# found. If left blank, it is assumed the dot tool can be found on the path.
-
-DOT_PATH               = 
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that 
-# contain dot files that are included in the documentation (see the 
-# \dotfile command).
-
-DOTFILE_DIRS           = 
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
-# graphs generated by dot. A depth value of 3 means that only nodes reachable 
-# from the root by following a path via at most 3 edges will be shown. Nodes that 
-# lay further from the root node will be omitted. Note that setting this option to 
-# 1 or 2 may greatly reduce the computation time needed for large code bases. Also 
-# note that a graph may be further truncated if the graph's image dimensions are 
-# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). 
-# If 0 is used for the depth value (the default), the graph is not depth-constrained.
-
-MAX_DOT_GRAPH_DEPTH    = 0
-
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
-# generate a legend page explaining the meaning of the various boxes and 
-# arrows in the dot generated graphs.
-
-GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
-# remove the intermediate dot files that are used to generate 
-# the various graphs.
-
-DOT_CLEANUP            = YES
-
-#---------------------------------------------------------------------------
-# Configuration::addtions related to the search engine   
-#---------------------------------------------------------------------------
-
-# The SEARCHENGINE tag specifies whether or not a search engine should be 
-# used. If set to NO the values of all tags below this one will be ignored.
-
-SEARCHENGINE           = NO
diff --git a/hw/dmx/doc/doxygen.conf.in b/hw/dmx/doc/doxygen.conf.in
new file mode 100644
index 0000000..f886a43
--- /dev/null
+++ b/hw/dmx/doc/doxygen.conf.in
@@ -0,0 +1,1053 @@
+# Doxyfile 1.3.4
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = "Distributed Multihead X"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = "dmx-1-2-20040604 and later"
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = 
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, 
+# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en 
+# (Japanese with English messages), Korean, Norwegian, Polish, Portuguese, 
+# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = YES
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited 
+# members of a class in the documentation of that class as if those members were 
+# ordinary class members. Constructors, destructors and assignment operators of 
+# the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. It is allowed to use relative paths in the argument list.
+
+STRIP_FROM_PATH        = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful is your file systems 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like the Qt-style comments (thus requiring an 
+# explict @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF      = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# reimplements.
+
+INHERIT_DOCS           = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources 
+# only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources 
+# only. Doxygen will then generate output that is more tailored for Java. 
+# For instance, namespaces will be presented as packages, qualified scopes 
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = YES
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or define consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and defines in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = YES
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text.
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  = @srcdir@/.. \
+                         @srcdir@/../input \
+                         @srcdir@/../config
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp 
+# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc
+
+FILE_PATTERNS          = 
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = @srcdir@/../config/parser.c \
+                         @srcdir@/../config/parser.h \
+                         @srcdir@/../config/scanner.c
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories 
+# that are symbolic links (a Unix filesystem feature) are excluded from the input.
+
+EXCLUDE_SYMLINKS       = YES
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories.
+
+EXCLUDE_PATTERNS       = atKeynames.h \
+                         Canvas*.*
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = 
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.
+
+INPUT_FILTER           = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default) 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header.
+
+HTML_HEADER            = @srcdir@/doxygen.head
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = @srcdir@/doxygen.foot
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet
+
+HTML_STYLESHEET        = @srcdir@/doxygen.css
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output dir.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20]) 
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = YES
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimised for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assigments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed.
+
+PREDEFINED             = SHAPE \
+                         RENDER \
+                         XKB \
+                         XINPUT
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all function-like macros that are alone 
+# on a line, have an all uppercase name, and do not end with a semicolon. Such 
+# function macros are typically used for boiler-plate code, and will confuse the 
+# parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to external references   
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. 
+# Optionally an initial location of the external documentation 
+# can be added for each tagfile. The format of a tag file without 
+# this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths or 
+# URLs. If a location is present for each tag, the installdox tool 
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen 
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or 
+# super classes. Setting the tag to NO turns the diagrams off. Note that this 
+# option is superceded by the HAVE_DOT option below. This is only a fallback. It is 
+# recommended to install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similiar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
+# generate a call dependency graph for every global function or class method. 
+# Note that enabling this option will significantly increase the time of a run. 
+# So in most cases it will be better to enable call graphs for selected 
+# functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = gif
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found on the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes that 
+# lay further from the root node will be omitted. Note that setting this option to 
+# 1 or 2 may greatly reduce the computation time needed for large code bases. Also 
+# note that a graph may be further truncated if the graph's image dimensions are 
+# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). 
+# If 0 is used for the depth value (the default), the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to the search engine   
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = NO
commit 61ce915bf78570b7c8d53c118700ef7274bbdfb7
Author: Dan Nicholson <dbn.lists at gmail.com>
Date:   Tue Feb 15 06:03:28 2011 -0800

    xfree86: Allow sdksyms.dep to be included portably
    
    Non-GNU makes don't deal with the sinclude or -include variants that
    allow Makefile stubs to be created and then included during the build.
    Instead, create an empty file at the end of configure so that the
    regular include statement can be included. This is how automake handles
    automatic source dependencies.
    
    In order to trick automake into not processing the include statement, a
    variable is used.
    
    Signed-off-by: Dan Nicholson <dbn.lists at gmail.com>
    Tested-by: Alan Coopersmith <alan.coopersmith at oracle.com>

diff --git a/configure.ac b/configure.ac
index f3b2939..e438fa1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2173,6 +2173,8 @@ AC_SUBST([libdir])
 AC_SUBST([exec_prefix])
 AC_SUBST([prefix])
 
+AC_CONFIG_COMMANDS([sdksyms], [touch hw/xfree86/loader/sdksyms.dep])
+
 AC_OUTPUT([
 Makefile
 glx/Makefile
diff --git a/hw/xfree86/loader/Makefile.am b/hw/xfree86/loader/Makefile.am
index 2bac89a..7f386cc 100644
--- a/hw/xfree86/loader/Makefile.am
+++ b/hw/xfree86/loader/Makefile.am
@@ -26,4 +26,5 @@ CLEANFILES = sdksyms.c sdksyms.dep
 sdksyms.dep sdksyms.c: sdksyms.sh
 	CPP='$(CPP)' AWK='$(AWK)' $(srcdir)/sdksyms.sh $(top_srcdir) $(AM_CFLAGS) $(CFLAGS) $(INCLUDES)
 
-sinclude sdksyms.dep
+SDKSYMS_DEP = sdksyms.dep
+include $(SDKSYMS_DEP)
commit 780a77acce1dd369549ece802b3e2c4006058dfe
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Feb 24 20:45:46 2011 -0800

    Version bumped to 1.9.99.903 (1.10 RC3)
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index 8858e86..f3b2939 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,8 +26,8 @@ dnl
 dnl Process this file with autoconf to create configure.
 
 AC_PREREQ(2.57)
-AC_INIT([xorg-server], 1.9.99.902, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
-RELEASE_DATE="2011-2-18"
+AC_INIT([xorg-server], 1.9.99.903, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+RELEASE_DATE="2011-2-24"
 AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([foreign dist-bzip2])
 AM_MAINTAINER_MODE
commit 229b055bdbc53370944401649234e8a38183f4fb
Merge: 6178959... b17fc99...
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Feb 24 19:44:35 2011 -0800

    Merge remote branch 'jeremyhu/master'

commit 6178959e3dd6482a4317de6eb14eb19ca7329b9c
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Feb 24 19:42:02 2011 -0800

    xfree86: Bump video ABI to 10.0
    
    RandR 1.4 revert changed things
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/common/xf86Module.h b/hw/xfree86/common/xf86Module.h
index 49a98bd..581047d 100644
--- a/hw/xfree86/common/xf86Module.h
+++ b/hw/xfree86/common/xf86Module.h
@@ -82,7 +82,7 @@ typedef enum {
  * mask is 0xFFFF0000.
  */
 #define ABI_ANSIC_VERSION	SET_ABI_VERSION(0, 4)
-#define ABI_VIDEODRV_VERSION	SET_ABI_VERSION(9, 0)
+#define ABI_VIDEODRV_VERSION	SET_ABI_VERSION(10, 0)
 #define ABI_XINPUT_VERSION	SET_ABI_VERSION(12, 2)
 #define ABI_EXTENSION_VERSION	SET_ABI_VERSION(5, 0)
 #define ABI_FONT_VERSION	SET_ABI_VERSION(0, 6)
commit 31704510f448706524b7b7085cc4ff0ada7bfe7e
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Thu Feb 24 12:17:57 2011 +0100

    EXA/mixed: ModifyPixmapHeader pitch fixes. (bug #33929)
    
    If there's a GPU copy and a non-zero devKind was passed in, set the GPU copy
    pitch to that instead of to a possibly bogus value derived from the new width.
    This is e.g. used by the radeon driver's drmmode_xf86crtc_resize hook, fixes
    https://bugs.freedesktop.org/show_bug.cgi?id=33929 .
    
    On the other hand, the system memory copy doesn't need the pitch to be aligned
    beyond the PixmapBytePad of the width.
    
    Signed-off-by: Michel Dänzer <daenzer at vmware.com>
    Acked-by: Cyril Brulebois <kibi at debian.org>
    Tested-by: Cyril Brulebois <kibi at debian.org>
    Reported-by: Thierry Vignaud <thierry.vignaud at gmail.com>
    Tested-by: Thierry Vignaud <thierry.vignaud at gmail.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/exa/exa_mixed.c b/exa/exa_mixed.c
index 606f1e1..fd1afb2 100644
--- a/exa/exa_mixed.c
+++ b/exa/exa_mixed.c
@@ -175,8 +175,10 @@ exaModifyPixmapHeader_mixed(PixmapPtr pPixmap, int width, int height, int depth,
 	depth != pPixmap->drawable.depth ||
 	bitsPerPixel != pPixmap->drawable.bitsPerPixel) {
 	if (pExaPixmap->driverPriv) {
-            exaSetFbPitch(pExaScr, pExaPixmap,
-                          width, height, bitsPerPixel);
+	    if (devKind > 0)
+		pExaPixmap->fb_pitch = devKind;
+	    else
+		exaSetFbPitch(pExaScr, pExaPixmap, width, height, bitsPerPixel);
 
             exaSetAccelBlock(pExaScr, pExaPixmap,
                              width, height, bitsPerPixel);
@@ -187,8 +189,7 @@ exaModifyPixmapHeader_mixed(PixmapPtr pPixmap, int width, int height, int depth,
 	if (has_gpu_copy && pExaPixmap->sys_ptr) {
 	    free(pExaPixmap->sys_ptr);
 	    pExaPixmap->sys_ptr = NULL;
-	    pExaPixmap->sys_pitch = devKind > 0 ? devKind :
-	        PixmapBytePad(width, depth);
+	    pExaPixmap->sys_pitch = PixmapBytePad(width, depth);
 	    DamageUnregister(&pPixmap->drawable, pExaPixmap->pDamage);
 	    DamageDestroy(pExaPixmap->pDamage);
 	    pExaPixmap->pDamage = NULL;
commit b17fc99cb9ca9ff0a3592f783a906cdcc35da748
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date:   Thu Feb 24 19:24:35 2011 -0800

    XQuartz: Localization Updates
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>

diff --git a/hw/xquartz/bundle/Resources/French.lproj/locversion.plist b/hw/xquartz/bundle/Resources/French.lproj/locversion.plist
index 877a10c..1af1256 100644
--- a/hw/xquartz/bundle/Resources/French.lproj/locversion.plist
+++ b/hw/xquartz/bundle/Resources/French.lproj/locversion.plist
@@ -3,12 +3,12 @@
 <plist version="1.0">
 <dict>
 	<key>LprojCompatibleVersion</key>
-	<string>98</string>
+	<string>101</string>
 	<key>LprojLocale</key>
 	<string>fr</string>
 	<key>LprojRevisionLevel</key>
 	<string>1</string>
 	<key>LprojVersion</key>
-	<string>98</string>
+	<string>101</string>
 </dict>
 </plist>
diff --git a/hw/xquartz/bundle/Resources/French.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/French.lproj/main.nib/designable.nib
index d35e44f..cec3632 100644
--- a/hw/xquartz/bundle/Resources/French.lproj/main.nib/designable.nib
+++ b/hw/xquartz/bundle/Resources/French.lproj/main.nib/designable.nib
@@ -2,19 +2,22 @@
 <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
 	<data>
 		<int key="IBDocument.SystemTarget">1040</int>
-		<string key="IBDocument.SystemVersion">11A194b</string>
-		<string key="IBDocument.InterfaceBuilderVersion">787</string>
-		<string key="IBDocument.AppKitVersion">1079</string>
-		<string key="IBDocument.HIToolboxVersion">502.00</string>
+		<string key="IBDocument.SystemVersion">11A289</string>
+		<string key="IBDocument.InterfaceBuilderVersion">851</string>
+		<string key="IBDocument.AppKitVersion">1094.2</string>
+		<string key="IBDocument.HIToolboxVersion">521.00</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
-			<string key="NS.object.0">787</string>
+			<string key="NS.object.0">851</string>
 		</object>
 		<array class="NSMutableArray" key="IBDocument.EditedObjectIDs"/>
 		<array key="IBDocument.PluginDependencies">
 			<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 		</array>
-		<dictionary class="NSMutableDictionary" key="IBDocument.Metadata"/>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
 		<array class="NSMutableArray" key="IBDocument.RootObjects" id="904585544">
 			<object class="NSCustomObject" id="815810918">
 				<object class="NSMutableString" key="NSClassName">
@@ -407,7 +410,7 @@
 													<reference key="NSControlView" ref="119157981"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<object class="NSCustomResource" key="NSNormalImage" id="831743691">
+													<object class="NSCustomResource" key="NSNormalImage" id="243093215">
 														<string key="NSClassName">NSImage</string>
 														<string key="NSResourceName">NSSwitch</string>
 													</object>
@@ -490,7 +493,7 @@ A</string>
 													<reference key="NSControlView" ref="842100515"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="831743691"/>
+													<reference key="NSNormalImage" ref="243093215"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -529,7 +532,7 @@ A</string>
 													<reference key="NSControlView" ref="179949713"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="831743691"/>
+													<reference key="NSNormalImage" ref="243093215"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -567,7 +570,7 @@ A</string>
 													<reference key="NSControlView" ref="406291430"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="831743691"/>
+													<reference key="NSNormalImage" ref="243093215"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -587,48 +590,9 @@ A</string>
 										<characters key="NS.bytes">2</characters>
 									</object>
 									<object class="NSView" key="NSView" id="515308735">
-										<nil key="NSNextResponder"/>
+										<reference key="NSNextResponder" ref="448510093"/>
 										<int key="NSvFlags">256</int>
 										<array class="NSMutableArray" key="NSSubviews">
-											<object class="NSButton" id="418227126">
-												<reference key="NSNextResponder" ref="515308735"/>
-												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{34, 84}, {402, 18}}</string>
-												<reference key="NSSuperview" ref="515308735"/>
-												<bool key="NSEnabled">YES</bool>
-												<object class="NSButtonCell" key="NSCell" id="1016069354">
-													<int key="NSCellFlags">67239424</int>
-													<int key="NSCellFlags2">0</int>
-													<string key="NSContents">Utiliser l’effet d’avertissement du système</string>
-													<reference key="NSSupport" ref="463863101"/>
-													<reference key="NSControlView" ref="418227126"/>
-													<int key="NSButtonFlags">1211912703</int>
-													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="831743691"/>
-													<reference key="NSAlternateImage" ref="391434389"/>
-													<string key="NSAlternateContents"/>
-													<string key="NSKeyEquivalent"/>
-													<int key="NSPeriodicDelay">200</int>
-													<int key="NSPeriodicInterval">25</int>
-												</object>
-											</object>
-											<object class="NSTextField" id="1039016593">
-												<reference key="NSNextResponder" ref="515308735"/>
-												<int key="NSvFlags">256</int>
-												<string key="NSFrame">{{52, 50}, {385, 28}}</string>
-												<reference key="NSSuperview" ref="515308735"/>
-												<bool key="NSEnabled">YES</bool>
-												<object class="NSTextFieldCell" key="NSCell" id="624655599">
-													<int key="NSCellFlags">67239424</int>
-													<int key="NSCellFlags2">4194304</int>
-													<string key="NSContents">Les sons émis par X11 utiliseront l’avertissement standard du système, comme défini dans le panneau Effets sonores des Préférences Système.</string>
-													<reference key="NSSupport" ref="26"/>
-													<string key="NSPlaceholderString"/>
-													<reference key="NSControlView" ref="1039016593"/>
-													<reference key="NSBackgroundColor" ref="57160303"/>
-													<reference key="NSTextColor" ref="930815747"/>
-												</object>
-											</object>
 											<object class="NSPopUpButton" id="709074847">
 												<reference key="NSNextResponder" ref="515308735"/>
 												<int key="NSvFlags">256</int>
@@ -765,7 +729,7 @@ A</string>
 													<reference key="NSControlView" ref="477203622"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="831743691"/>
+													<reference key="NSNormalImage" ref="243093215"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -787,7 +751,7 @@ A</string>
 													<reference key="NSControlView" ref="57246850"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="831743691"/>
+													<reference key="NSNormalImage" ref="243093215"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -814,6 +778,7 @@ A</string>
 											</object>
 										</array>
 										<string key="NSFrame">{{10, 33}, {536, 267}}</string>
+										<reference key="NSSuperview" ref="448510093"/>
 									</object>
 									<string key="NSLabel">Sortie</string>
 									<reference key="NSColor" ref="57160303"/>
@@ -841,7 +806,7 @@ A</string>
 													<reference key="NSControlView" ref="878106058"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="831743691"/>
+													<reference key="NSNormalImage" ref="243093215"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -879,7 +844,7 @@ A</string>
 													<reference key="NSControlView" ref="477050998"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="831743691"/>
+													<reference key="NSNormalImage" ref="243093215"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -901,7 +866,7 @@ A</string>
 													<reference key="NSControlView" ref="765780304"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="831743691"/>
+													<reference key="NSNormalImage" ref="243093215"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -923,7 +888,7 @@ A</string>
 													<reference key="NSControlView" ref="1002778833"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="831743691"/>
+													<reference key="NSNormalImage" ref="243093215"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -945,7 +910,7 @@ A</string>
 													<reference key="NSControlView" ref="487809555"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="831743691"/>
+													<reference key="NSNormalImage" ref="243093215"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -997,7 +962,7 @@ A</string>
 										<characters key="NS.bytes">2</characters>
 									</object>
 									<object class="NSView" key="NSView" id="184765684">
-										<reference key="NSNextResponder" ref="448510093"/>
+										<nil key="NSNextResponder"/>
 										<int key="NSvFlags">256</int>
 										<array class="NSMutableArray" key="NSSubviews">
 											<object class="NSButton" id="657659108">
@@ -1014,7 +979,7 @@ A</string>
 													<reference key="NSControlView" ref="657659108"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="831743691"/>
+													<reference key="NSNormalImage" ref="243093215"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1053,7 +1018,7 @@ A</string>
 													<reference key="NSControlView" ref="992839333"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="831743691"/>
+													<reference key="NSNormalImage" ref="243093215"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1092,7 +1057,7 @@ A</string>
 													<reference key="NSControlView" ref="128352289"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="831743691"/>
+													<reference key="NSNormalImage" ref="243093215"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1119,7 +1084,6 @@ A</string>
 											</object>
 										</array>
 										<string key="NSFrame">{{10, 33}, {536, 267}}</string>
-										<reference key="NSSuperview" ref="448510093"/>
 									</object>
 									<string key="NSLabel">Fenêtres</string>
 									<reference key="NSColor" ref="57160303"/>
@@ -1144,7 +1108,7 @@ A</string>
 													<reference key="NSControlView" ref="989050925"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="831743691"/>
+													<reference key="NSNormalImage" ref="243093215"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1166,7 +1130,7 @@ A</string>
 													<reference key="NSControlView" ref="700826966"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="831743691"/>
+													<reference key="NSNormalImage" ref="243093215"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1233,13 +1197,13 @@ A</string>
 									<reference key="NSTabView" ref="448510093"/>
 								</object>
 							</array>
-							<reference key="NSSelectedTabViewItem" ref="10973343"/>
+							<reference key="NSSelectedTabViewItem" ref="960678392"/>
 							<reference key="NSFont" ref="463863101"/>
 							<int key="NSTvFlags">0</int>
 							<bool key="NSAllowTruncatedLabels">YES</bool>
 							<bool key="NSDrawsBackground">YES</bool>
 							<array class="NSMutableArray" key="NSSubviews">
-								<reference ref="184765684"/>
+								<reference ref="515308735"/>
 							</array>
 						</object>
 					</array>
@@ -1477,6 +1441,7 @@ A</string>
 											<int key="NSDraggingSourceMaskForNonLocal">0</int>
 											<bool key="NSAllowsTypeSelect">YES</bool>
 											<int key="NSTableViewDraggingDestinationStyle">0</int>
+											<int key="NSTableViewGroupRowStyle">1</int>
 										</object>
 									</array>
 									<string key="NSFrame">{{1, 17}, {333, 198}}</string>
@@ -1503,7 +1468,7 @@ A</string>
 									<int key="NSsFlags">1</int>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.97368421052631582</double>
+									<double key="NSPercent">0.68852460000000004</double>
 								</object>
 								<object class="NSClipView" id="672307654">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1523,11 +1488,12 @@ A</string>
 							<string key="NSFrame">{{20, 20}, {350, 231}}</string>
 							<reference key="NSSuperview" ref="85544634"/>
 							<reference key="NSNextKeyView" ref="580565898"/>
-							<int key="NSsFlags">50</int>
+							<int key="NSsFlags">133170</int>
 							<reference key="NSVScroller" ref="842897584"/>
 							<reference key="NSHScroller" ref="17278747"/>
 							<reference key="NSContentView" ref="580565898"/>
 							<reference key="NSHeaderClipView" ref="672307654"/>
+							<reference key="NSCornerView" ref="898633680"/>
 							<bytes key="NSScrollAmts">QSAAAEEgAABBmAAAQZgAAA</bytes>
 						</object>
 						<object class="NSButton" id="758204686">
@@ -1754,14 +1720,6 @@ A</string>
 				</object>
 				<object class="IBConnectionRecord">
 					<object class="IBOutletConnection" key="connection">
-						<string key="label">use_sysbeep</string>
-						<reference key="source" ref="485884620"/>
-						<reference key="destination" ref="418227126"/>
-					</object>
-					<int key="connectionID">390</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBOutletConnection" key="connection">
 						<string key="label">fake_buttons</string>
 						<reference key="source" ref="485884620"/>
 						<reference key="destination" ref="119157981"/>
@@ -1812,14 +1770,6 @@ A</string>
 					<object class="IBActionConnection" key="connection">
 						<string key="label">prefs_changed:</string>
 						<reference key="source" ref="485884620"/>
-						<reference key="destination" ref="418227126"/>
-					</object>
-					<int key="connectionID">397</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">prefs_changed:</string>
-						<reference key="source" ref="485884620"/>
 						<reference key="destination" ref="709074847"/>
 					</object>
 					<int key="connectionID">398</int>
@@ -2567,28 +2517,10 @@ A</string>
 							<reference ref="477203622"/>
 							<reference ref="57246850"/>
 							<reference ref="298603383"/>
-							<reference ref="418227126"/>
-							<reference ref="1039016593"/>
 						</array>
 						<reference key="parent" ref="960678392"/>
 					</object>
 					<object class="IBObjectRecord">
-						<int key="objectID">371</int>
-						<reference key="object" ref="418227126"/>
-						<array class="NSMutableArray" key="children">
-							<reference ref="1016069354"/>
-						</array>
-						<reference key="parent" ref="515308735"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">372</int>
-						<reference key="object" ref="1039016593"/>
-						<array class="NSMutableArray" key="children">
-							<reference ref="624655599"/>
-						</array>
-						<reference key="parent" ref="515308735"/>
-					</object>
-					<object class="IBObjectRecord">
 						<int key="objectID">382</int>
 						<reference key="object" ref="709074847"/>
 						<array class="NSMutableArray" key="children">
@@ -2781,16 +2713,6 @@ A</string>
 						<reference key="parent" ref="179949713"/>
 					</object>
 					<object class="IBObjectRecord">
-						<int key="objectID">100371</int>
-						<reference key="object" ref="1016069354"/>
-						<reference key="parent" ref="418227126"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">100372</int>
-						<reference key="object" ref="624655599"/>
-						<reference key="parent" ref="1039016593"/>
-					</object>
-					<object class="IBObjectRecord">
 						<int key="objectID">100382</int>
 						<reference key="object" ref="633115429"/>
 						<array class="NSMutableArray" key="children">
@@ -3269,8 +3191,6 @@ A</string>
 				<string key="100368.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="100369.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="100370.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="100371.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="100372.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="100374.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="100375.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="100376.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3278,13 +3198,11 @@ A</string>
 				<string key="100379.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="100382.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="100385.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="100385.object.labelIdentifier">IBBuiltInLabel-Red</string>
 				<string key="100386.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="100541.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="100543.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="129.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="129.ImportedFromIB2"/>
-				<string key="130.IBEditorWindowLastContentRect">{{318, 756}, {64, 6}}</string>
 				<string key="130.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="130.ImportedFromIB2"/>
 				<string key="131.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3307,7 +3225,7 @@ A</string>
 				<integer value="1" key="157.ImportedFromIB2"/>
 				<string key="163.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="163.ImportedFromIB2"/>
-				<string key="169.IBEditorWindowLastContentRect">{{176, 789}, {120, 23}}</string>
+				<string key="169.IBEditorWindowLastContentRect">{{168, 821}, {113, 23}}</string>
 				<string key="169.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="169.ImportedFromIB2"/>
 				<string key="169.editorWindowContentRectSynchronizationRect">{{202, 626}, {154, 153}}</string>
@@ -3322,13 +3240,13 @@ A</string>
 				<integer value="1" key="204.ImportedFromIB2"/>
 				<string key="23.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="23.ImportedFromIB2"/>
-				<string key="24.IBEditorWindowLastContentRect">{{242, 669}, {365, 143}}</string>
+				<string key="24.IBEditorWindowLastContentRect">{{349, 868}, {315, 143}}</string>
 				<string key="24.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="24.ImportedFromIB2"/>
 				<string key="24.editorWindowContentRectSynchronizationRect">{{271, 666}, {301, 153}}</string>
-				<string key="244.IBEditorWindowLastContentRect">{{575, 463}, {582, 329}}</string>
+				<string key="244.IBEditorWindowLastContentRect">{{507, 565}, {484, 308}}</string>
 				<string key="244.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="244.IBWindowTemplateEditedContentRect">{{575, 463}, {582, 329}}</string>
+				<string key="244.IBWindowTemplateEditedContentRect">{{507, 565}, {484, 308}}</string>
 				<integer value="1" key="244.ImportedFromIB2"/>
 				<string key="244.editorWindowContentRectSynchronizationRect">{{184, 290}, {481, 345}}</string>
 				<integer value="0" key="244.windowTemplate.hasMaxSize"/>
@@ -3339,17 +3257,17 @@ A</string>
 				<integer value="1" key="245.ImportedFromIB2"/>
 				<string key="269.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="269.ImportedFromIB2"/>
-				<string key="270.IBEditorWindowLastContentRect">{{74, 779}, {171, 33}}</string>
+				<string key="270.IBEditorWindowLastContentRect">{{58, 803}, {155, 33}}</string>
 				<string key="270.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="270.ImportedFromIB2"/>
 				<string key="270.editorWindowContentRectSynchronizationRect">{{100, 746}, {155, 33}}</string>
 				<string key="272.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="272.ImportedFromIB2"/>
-				<string key="285.IBEditorWindowLastContentRect">{{838, 503}, {548, 271}}</string>
+				<string key="285.IBEditorWindowLastContentRect">{{68, 585}, {454, 271}}</string>
 				<string key="285.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="285.IBViewEditorWindowController.showingBoundsRectangles"/>
 				<integer value="1" key="285.IBViewEditorWindowController.showingLayoutRectangles"/>
-				<string key="285.IBWindowTemplateEditedContentRect">{{838, 503}, {548, 271}}</string>
+				<string key="285.IBWindowTemplateEditedContentRect">{{68, 585}, {454, 271}}</string>
 				<integer value="1" key="285.ImportedFromIB2"/>
 				<string key="285.editorWindowContentRectSynchronizationRect">{{433, 406}, {486, 327}}</string>
 				<integer value="0" key="285.windowTemplate.hasMaxSize"/>
@@ -3358,7 +3276,7 @@ A</string>
 				<string key="285.windowTemplate.minSize">{320, 240}</string>
 				<string key="286.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="286.ImportedFromIB2"/>
-				<string key="29.IBEditorWindowLastContentRect">{{16, 812}, {356, 20}}</string>
+				<string key="29.IBEditorWindowLastContentRect">{{145, 1011}, {336, 20}}</string>
 				<string key="29.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="29.ImportedFromIB2"/>
 				<string key="29.editorWindowContentRectSynchronizationRect">{{67, 819}, {336, 20}}</string>
@@ -3410,27 +3328,19 @@ A</string>
 				<string key="300441.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="300447.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="300447.ImportedFromIB2"/>
-				<string key="300447.object.labelIdentifier">IBBuiltInLabel-Red</string>
 				<string key="300450.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="300450.object.labelIdentifier">IBBuiltInLabel-Red</string>
 				<string key="300451.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="300451.ImportedFromIB2"/>
-				<string key="300451.object.labelIdentifier">IBBuiltInLabel-Red</string>
 				<string key="300452.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="300452.object.labelIdentifier">IBBuiltInLabel-Red</string>
 				<string key="300453.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="300453.ImportedFromIB2"/>
-				<string key="300453.object.labelIdentifier">IBBuiltInLabel-Red</string>
 				<string key="300454.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="300454.object.labelIdentifier">IBBuiltInLabel-Red</string>
 				<string key="300455.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="300455.ImportedFromIB2"/>
 				<string key="300456.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="300457.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="300457.ImportedFromIB2"/>
-				<string key="300457.object.labelIdentifier">IBBuiltInLabel-Red</string>
 				<string key="300458.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="300458.object.labelIdentifier">IBBuiltInLabel-Red</string>
 				<string key="300459.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="300459.ImportedFromIB2"/>
 				<string key="300460.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3439,14 +3349,10 @@ A</string>
 				<string key="300473.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="300476.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="300476.ImportedFromIB2"/>
-				<string key="300476.object.labelIdentifier">IBBuiltInLabel-Red</string>
 				<string key="300477.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="300477.ImportedFromIB2"/>
-				<string key="300477.object.labelIdentifier">IBBuiltInLabel-Red</string>
 				<string key="300478.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="300478.object.labelIdentifier">IBBuiltInLabel-Red</string>
 				<string key="300479.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="300479.object.labelIdentifier">IBBuiltInLabel-Red</string>
 				<string key="305.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="305.ImportedFromIB2"/>
 				<string key="310.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3477,10 +3383,6 @@ A</string>
 				<integer value="1" key="369.ImportedFromIB2"/>
 				<string key="370.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="370.ImportedFromIB2"/>
-				<string key="371.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<integer value="1" key="371.ImportedFromIB2"/>
-				<string key="372.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<integer value="1" key="372.ImportedFromIB2"/>
 				<string key="374.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="374.ImportedFromIB2"/>
 				<string key="375.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3491,7 +3393,6 @@ A</string>
 				<integer value="1" key="377.ImportedFromIB2"/>
 				<string key="379.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="379.ImportedFromIB2"/>
-				<string key="380.IBEditorWindowLastContentRect">{{274, 290}, {155, 83}}</string>
 				<string key="380.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="380.ImportedFromIB2"/>
 				<string key="381.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3508,12 +3409,10 @@ A</string>
 				<integer value="1" key="386.ImportedFromIB2"/>
 				<string key="419.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="419.ImportedFromIB2"/>
-				<string key="420.IBEditorWindowLastContentRect">{{311, 789}, {128, 23}}</string>
 				<string key="420.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="420.ImportedFromIB2"/>
 				<string key="421.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="421.ImportedFromIB2"/>
-				<string key="423.IBEditorWindowLastContentRect">{{567, 341}, {150, 33}}</string>
 				<string key="423.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="423.ImportedFromIB2"/>
 				<string key="435.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3524,7 +3423,6 @@ A</string>
 				<integer value="1" key="524.ImportedFromIB2"/>
 				<string key="526.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="526.ImportedFromIB2"/>
-				<string key="527.IBEditorWindowLastContentRect">{{717, 331}, {171, 33}}</string>
 				<string key="527.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="527.ImportedFromIB2"/>
 				<string key="532.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3549,7 +3447,7 @@ A</string>
 				<integer value="1" key="545.ImportedFromIB2"/>
 				<string key="56.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="56.ImportedFromIB2"/>
-				<string key="57.IBEditorWindowLastContentRect">{{28, 609}, {290, 203}}</string>
+				<string key="57.IBEditorWindowLastContentRect">{{20, 641}, {218, 203}}</string>
 				<string key="57.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="57.ImportedFromIB2"/>
 				<string key="57.editorWindowContentRectSynchronizationRect">{{79, 616}, {218, 203}}</string>
@@ -3597,6 +3495,259 @@ A</string>
 					</object>
 				</object>
 			</array>
+			<array class="NSMutableArray" key="referencedPartialClassDescriptionsV3.1+">
+				<object class="IBPartialClassDescription">
+					<string key="className">X11Controller</string>
+					<string key="superclassName">NSObject</string>
+					<dictionary class="NSMutableDictionary" key="actions">
+						<string key="apps_table_delete:">id</string>
+						<string key="apps_table_done:">id</string>
+						<string key="apps_table_duplicate:">id</string>
+						<string key="apps_table_new:">id</string>
+						<string key="apps_table_show:">id</string>
+						<string key="bring_to_front:">id</string>
+						<string key="close_window:">id</string>
+						<string key="enable_fullscreen_changed:">id</string>
+						<string key="minimize_window:">id</string>
+						<string key="next_window:">id</string>
+						<string key="prefs_changed:">id</string>
+						<string key="prefs_show:">id</string>
+						<string key="previous_window:">id</string>
+						<string key="quit:">id</string>
+						<string key="toggle_fullscreen:">id</string>
+						<string key="x11_help:">id</string>
+						<string key="zoom_window:">id</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="actionInfosByName">
+						<object class="IBActionInfo" key="apps_table_delete:">
+							<string key="name">apps_table_delete:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="apps_table_done:">
+							<string key="name">apps_table_done:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="apps_table_duplicate:">
+							<string key="name">apps_table_duplicate:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="apps_table_new:">
+							<string key="name">apps_table_new:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="apps_table_show:">
+							<string key="name">apps_table_show:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="bring_to_front:">
+							<string key="name">bring_to_front:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="close_window:">
+							<string key="name">close_window:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="enable_fullscreen_changed:">
+							<string key="name">enable_fullscreen_changed:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="minimize_window:">
+							<string key="name">minimize_window:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="next_window:">
+							<string key="name">next_window:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="prefs_changed:">
+							<string key="name">prefs_changed:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="prefs_show:">
+							<string key="name">prefs_show:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="previous_window:">
+							<string key="name">previous_window:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="quit:">
+							<string key="name">quit:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="toggle_fullscreen:">
+							<string key="name">toggle_fullscreen:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="x11_help:">
+							<string key="name">x11_help:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="zoom_window:">
+							<string key="name">zoom_window:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="outlets">
+						<string key="apps_separator">NSMenuItem</string>
+						<string key="apps_table">NSTableView</string>
+						<string key="click_through">NSButton</string>
+						<string key="copy_menu_item">NSMenuItem</string>
+						<string key="depth">NSPopUpButton</string>
+						<string key="dock_apps_menu">NSMenu</string>
+						<string key="dock_menu">NSMenu</string>
+						<string key="dock_window_separator">NSMenuItem</string>
+						<string key="enable_auth">NSButton</string>
+						<string key="enable_fullscreen">NSButton</string>
+						<string key="enable_fullscreen_menu">NSButton</string>
+						<string key="enable_keyequivs">NSButton</string>
+						<string key="enable_tcp">NSButton</string>
+						<string key="fake_buttons">NSButton</string>
+						<string key="focus_follows_mouse">NSButton</string>
+						<string key="focus_on_new_window">NSButton</string>
+						<string key="option_sends_alt">NSButton</string>
+						<string key="prefs_panel">NSPanel</string>
+						<string key="sync_clipboard_to_pasteboard">NSButton</string>
+						<string key="sync_keymap">NSButton</string>
+						<string key="sync_pasteboard">NSButton</string>
+						<string key="sync_pasteboard_to_clipboard">NSButton</string>
+						<string key="sync_pasteboard_to_primary">NSButton</string>
+						<string key="sync_primary_immediately">NSButton</string>
+						<string key="sync_text1">NSTextField</string>
+						<string key="sync_text2">NSTextField</string>
+						<string key="toggle_fullscreen_item">NSMenuItem</string>
+						<string key="use_sysbeep">NSButton</string>
+						<string key="window_separator">NSMenuItem</string>
+						<string key="x11_about_item">NSMenuItem</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<object class="IBToOneOutletInfo" key="apps_separator">
+							<string key="name">apps_separator</string>
+							<string key="candidateClassName">NSMenuItem</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="apps_table">
+							<string key="name">apps_table</string>
+							<string key="candidateClassName">NSTableView</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="click_through">
+							<string key="name">click_through</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="copy_menu_item">
+							<string key="name">copy_menu_item</string>
+							<string key="candidateClassName">NSMenuItem</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="depth">
+							<string key="name">depth</string>
+							<string key="candidateClassName">NSPopUpButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="dock_apps_menu">
+							<string key="name">dock_apps_menu</string>
+							<string key="candidateClassName">NSMenu</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="dock_menu">
+							<string key="name">dock_menu</string>
+							<string key="candidateClassName">NSMenu</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="dock_window_separator">
+							<string key="name">dock_window_separator</string>
+							<string key="candidateClassName">NSMenuItem</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="enable_auth">
+							<string key="name">enable_auth</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="enable_fullscreen">
+							<string key="name">enable_fullscreen</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="enable_fullscreen_menu">
+							<string key="name">enable_fullscreen_menu</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="enable_keyequivs">
+							<string key="name">enable_keyequivs</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="enable_tcp">
+							<string key="name">enable_tcp</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="fake_buttons">
+							<string key="name">fake_buttons</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="focus_follows_mouse">
+							<string key="name">focus_follows_mouse</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="focus_on_new_window">
+							<string key="name">focus_on_new_window</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="option_sends_alt">
+							<string key="name">option_sends_alt</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="prefs_panel">
+							<string key="name">prefs_panel</string>
+							<string key="candidateClassName">NSPanel</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_clipboard_to_pasteboard">
+							<string key="name">sync_clipboard_to_pasteboard</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_keymap">
+							<string key="name">sync_keymap</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_pasteboard">
+							<string key="name">sync_pasteboard</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_pasteboard_to_clipboard">
+							<string key="name">sync_pasteboard_to_clipboard</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_pasteboard_to_primary">
+							<string key="name">sync_pasteboard_to_primary</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_primary_immediately">
+							<string key="name">sync_primary_immediately</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_text1">
+							<string key="name">sync_text1</string>
+							<string key="candidateClassName">NSTextField</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_text2">
+							<string key="name">sync_text2</string>
+							<string key="candidateClassName">NSTextField</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="toggle_fullscreen_item">
+							<string key="name">toggle_fullscreen_item</string>
+							<string key="candidateClassName">NSMenuItem</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="use_sysbeep">
+							<string key="name">use_sysbeep</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="window_separator">
+							<string key="name">window_separator</string>
+							<string key="candidateClassName">NSMenuItem</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="x11_about_item">
+							<string key="name">x11_about_item</string>
+							<string key="candidateClassName">NSMenuItem</string>
+						</object>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBDocumentRelativeSource</string>
+						<string key="minorKey">../../../X11Controller.h</string>
+					</object>
+				</object>
+			</array>
 		</object>
 		<int key="IBDocument.localizationMode">0</int>
 		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
diff --git a/hw/xquartz/bundle/Resources/French.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/French.lproj/main.nib/keyedobjects.nib
index 9813323..3443780 100644
Binary files a/hw/xquartz/bundle/Resources/French.lproj/main.nib/keyedobjects.nib and b/hw/xquartz/bundle/Resources/French.lproj/main.nib/keyedobjects.nib differ
diff --git a/hw/xquartz/bundle/Resources/German.lproj/locversion.plist b/hw/xquartz/bundle/Resources/German.lproj/locversion.plist
index 313b577..caf0364 100644
--- a/hw/xquartz/bundle/Resources/German.lproj/locversion.plist
+++ b/hw/xquartz/bundle/Resources/German.lproj/locversion.plist
@@ -3,12 +3,12 @@
 <plist version="1.0">
 <dict>
 	<key>LprojCompatibleVersion</key>
-	<string>101</string>
+	<string>102</string>
 	<key>LprojLocale</key>
 	<string>de</string>
 	<key>LprojRevisionLevel</key>
 	<string>1</string>
 	<key>LprojVersion</key>
-	<string>101</string>
+	<string>102</string>
 </dict>
 </plist>
diff --git a/hw/xquartz/bundle/Resources/German.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/German.lproj/main.nib/designable.nib
index d34ff72..dea837b 100644
--- a/hw/xquartz/bundle/Resources/German.lproj/main.nib/designable.nib
+++ b/hw/xquartz/bundle/Resources/German.lproj/main.nib/designable.nib
@@ -2,13 +2,13 @@
 <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
 	<data>
 		<int key="IBDocument.SystemTarget">1040</int>
-		<string key="IBDocument.SystemVersion">11A194b</string>
-		<string key="IBDocument.InterfaceBuilderVersion">787</string>
-		<string key="IBDocument.AppKitVersion">1079</string>
-		<string key="IBDocument.HIToolboxVersion">502.00</string>
+		<string key="IBDocument.SystemVersion">11A289</string>
+		<string key="IBDocument.InterfaceBuilderVersion">844</string>
+		<string key="IBDocument.AppKitVersion">1094.2</string>
+		<string key="IBDocument.HIToolboxVersion">521.00</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
-			<string key="NS.object.0">787</string>
+			<string key="NS.object.0">844</string>
 		</object>
 		<array class="NSMutableArray" key="IBDocument.EditedObjectIDs"/>
 		<array key="IBDocument.PluginDependencies">
@@ -370,7 +370,7 @@
 					<characters key="NS.bytes">View</characters>
 				</object>
 				<nil key="NSUserInterfaceItemIdentifier"/>
-				<string key="NSWindowContentMaxSize">{3.4028235e+38, 3.4028235e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.7976931348623157e+308, 1.7976931348623157e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="941366957">
 					<nil key="NSNextResponder"/>
@@ -387,7 +387,7 @@
 										<characters key="NS.bytes">1</characters>
 									</object>
 									<object class="NSView" key="NSView" id="596750588">
-										<reference key="NSNextResponder" ref="448510093"/>
+										<nil key="NSNextResponder"/>
 										<int key="NSvFlags">256</int>
 										<array class="NSMutableArray" key="NSSubviews">
 											<object class="NSButton" id="119157981">
@@ -408,7 +408,7 @@
 													<reference key="NSControlView" ref="119157981"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<object class="NSCustomResource" key="NSNormalImage" id="718371158">
+													<object class="NSCustomResource" key="NSNormalImage" id="65187362">
 														<string key="NSClassName">NSImage</string>
 														<string key="NSResourceName">NSSwitch</string>
 													</object>
@@ -444,7 +444,7 @@
 														<string key="NSColorName">controlColor</string>
 														<object class="NSColor" key="NSColor" id="590688762">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC42NjY2NjY2ODY1AA</bytes>
+															<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
 														</object>
 													</object>
 													<object class="NSColor" key="NSTextColor" id="930815747">
@@ -491,7 +491,7 @@ dmllcmVuLgo</string>
 													<reference key="NSControlView" ref="842100515"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="718371158"/>
+													<reference key="NSNormalImage" ref="65187362"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -530,7 +530,7 @@ dmllcmVuLgo</string>
 													<reference key="NSControlView" ref="179949713"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="718371158"/>
+													<reference key="NSNormalImage" ref="65187362"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -568,7 +568,7 @@ dmllcmVuLgo</string>
 													<reference key="NSControlView" ref="406291430"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="718371158"/>
+													<reference key="NSNormalImage" ref="65187362"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -578,7 +578,6 @@ dmllcmVuLgo</string>
 											</object>
 										</array>
 										<string key="NSFrame">{{10, 33}, {559, 240}}</string>
-										<reference key="NSSuperview" ref="448510093"/>
 									</object>
 									<string key="NSLabel">Eingabe</string>
 									<reference key="NSColor" ref="57160303"/>
@@ -589,7 +588,7 @@ dmllcmVuLgo</string>
 										<characters key="NS.bytes">2</characters>
 									</object>
 									<object class="NSView" key="NSView" id="515308735">
-										<nil key="NSNextResponder"/>
+										<reference key="NSNextResponder" ref="448510093"/>
 										<int key="NSvFlags">256</int>
 										<array class="NSMutableArray" key="NSSubviews">
 											<object class="NSPopUpButton" id="709074847">
@@ -616,16 +615,17 @@ dmllcmVuLgo</string>
 													</object>
 													<int key="NSPeriodicDelay">400</int>
 													<int key="NSPeriodicInterval">75</int>
-													<object class="NSMenuItem" key="NSMenuItem" id="836673018">
+													<object class="NSMenuItem" key="NSMenuItem" id="616492372">
 														<reference key="NSMenu" ref="341113515"/>
-														<string key="NSTitle">16,7 Millionen Farben</string>
+														<string key="NSTitle">Vom Monitor</string>
 														<string key="NSKeyEquiv"/>
 														<int key="NSKeyEquivModMask">1048576</int>
 														<int key="NSMnemonicLoc">2147483647</int>
+														<int key="NSState">1</int>
 														<reference key="NSOnImage" ref="531645050"/>
 														<reference key="NSMixedImage" ref="351811234"/>
 														<string key="NSAction">_popUpItemAction:</string>
-														<int key="NSTag">24</int>
+														<int key="NSTag">-1</int>
 														<reference key="NSTarget" ref="633115429"/>
 													</object>
 													<bool key="NSMenuItemRespectAlignment">YES</bool>
@@ -634,47 +634,45 @@ dmllcmVuLgo</string>
 															<characters key="NS.bytes">OtherViews</characters>
 														</object>
 														<array class="NSMutableArray" key="NSMenuItems">
-															<object class="NSMenuItem" id="616492372">
+															<reference ref="616492372"/>
+															<object class="NSMenuItem" id="759499526">
 																<reference key="NSMenu" ref="341113515"/>
-																<string key="NSTitle">Vom Monitor</string>
+																<string key="NSTitle">256 Farben</string>
 																<string key="NSKeyEquiv"/>
 																<int key="NSKeyEquivModMask">1048576</int>
 																<int key="NSMnemonicLoc">2147483647</int>
-																<int key="NSState">1</int>
 																<reference key="NSOnImage" ref="531645050"/>
 																<reference key="NSMixedImage" ref="351811234"/>
 																<string key="NSAction">_popUpItemAction:</string>
-																<int key="NSTag">-1</int>
+																<int key="NSTag">8</int>
 																<reference key="NSTarget" ref="633115429"/>
 															</object>
-															<object class="NSMenuItem" id="759499526">
+															<object class="NSMenuItem" id="543935434">
 																<reference key="NSMenu" ref="341113515"/>
-																<string key="NSTitle">256 Farben</string>
+																<string key="NSTitle">32768 Farben</string>
 																<string key="NSKeyEquiv"/>
 																<int key="NSKeyEquivModMask">1048576</int>
 																<int key="NSMnemonicLoc">2147483647</int>
 																<reference key="NSOnImage" ref="531645050"/>
 																<reference key="NSMixedImage" ref="351811234"/>
 																<string key="NSAction">_popUpItemAction:</string>
-																<int key="NSTag">8</int>
+																<int key="NSTag">15</int>
 																<reference key="NSTarget" ref="633115429"/>
 															</object>
-															<object class="NSMenuItem" id="543935434">
+															<object class="NSMenuItem" id="836673018">
 																<reference key="NSMenu" ref="341113515"/>
-																<string key="NSTitle">32768 Farben</string>
+																<string key="NSTitle">16,7 Millionen Farben</string>
 																<string key="NSKeyEquiv"/>
 																<int key="NSKeyEquivModMask">1048576</int>
 																<int key="NSMnemonicLoc">2147483647</int>
 																<reference key="NSOnImage" ref="531645050"/>
 																<reference key="NSMixedImage" ref="351811234"/>
 																<string key="NSAction">_popUpItemAction:</string>
-																<int key="NSTag">15</int>
+																<int key="NSTag">24</int>
 																<reference key="NSTarget" ref="633115429"/>
 															</object>
-															<reference ref="836673018"/>
 														</array>
 													</object>
-													<int key="NSSelectedIndex">3</int>
 													<int key="NSPreferredEdge">3</int>
 													<bool key="NSUsesItemFromMenu">YES</bool>
 													<bool key="NSAltersState">YES</bool>
@@ -729,7 +727,7 @@ dmllcmVuLgo</string>
 													<reference key="NSControlView" ref="477203622"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="718371158"/>
+													<reference key="NSNormalImage" ref="65187362"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -751,7 +749,7 @@ dmllcmVuLgo</string>
 													<reference key="NSControlView" ref="57246850"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="718371158"/>
+													<reference key="NSNormalImage" ref="65187362"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -778,6 +776,7 @@ dmllcmVuLgo</string>
 											</object>
 										</array>
 										<string key="NSFrame">{{10, 33}, {559, 240}}</string>
+										<reference key="NSSuperview" ref="448510093"/>
 									</object>
 									<string key="NSLabel">Ausgabe</string>
 									<reference key="NSColor" ref="57160303"/>
@@ -805,7 +804,7 @@ dmllcmVuLgo</string>
 													<reference key="NSControlView" ref="878106058"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="718371158"/>
+													<reference key="NSNormalImage" ref="65187362"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -843,7 +842,7 @@ dmllcmVuLgo</string>
 													<reference key="NSControlView" ref="477050998"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="718371158"/>
+													<reference key="NSNormalImage" ref="65187362"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -865,7 +864,7 @@ dmllcmVuLgo</string>
 													<reference key="NSControlView" ref="765780304"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="718371158"/>
+													<reference key="NSNormalImage" ref="65187362"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -887,7 +886,7 @@ dmllcmVuLgo</string>
 													<reference key="NSControlView" ref="1002778833"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="718371158"/>
+													<reference key="NSNormalImage" ref="65187362"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -909,7 +908,7 @@ dmllcmVuLgo</string>
 													<reference key="NSControlView" ref="487809555"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="718371158"/>
+													<reference key="NSNormalImage" ref="65187362"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -978,7 +977,7 @@ dmllcmVuLgo</string>
 													<reference key="NSControlView" ref="657659108"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="718371158"/>
+													<reference key="NSNormalImage" ref="65187362"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1016,7 +1015,7 @@ dmllcmVuLgo</string>
 													<reference key="NSControlView" ref="992839333"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="718371158"/>
+													<reference key="NSNormalImage" ref="65187362"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1054,7 +1053,7 @@ dmllcmVuLgo</string>
 													<reference key="NSControlView" ref="128352289"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="718371158"/>
+													<reference key="NSNormalImage" ref="65187362"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1104,7 +1103,7 @@ dmllcmVuLgo</string>
 													<reference key="NSControlView" ref="989050925"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="718371158"/>
+													<reference key="NSNormalImage" ref="65187362"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1126,7 +1125,7 @@ dmllcmVuLgo</string>
 													<reference key="NSControlView" ref="700826966"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="718371158"/>
+													<reference key="NSNormalImage" ref="65187362"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1193,13 +1192,13 @@ dmllcmVuLgo</string>
 									<reference key="NSTabView" ref="448510093"/>
 								</object>
 							</array>
-							<reference key="NSSelectedTabViewItem" ref="287591690"/>
+							<reference key="NSSelectedTabViewItem" ref="960678392"/>
 							<reference key="NSFont" ref="463863101"/>
 							<int key="NSTvFlags">0</int>
 							<bool key="NSAllowTruncatedLabels">YES</bool>
 							<bool key="NSDrawsBackground">YES</bool>
 							<array class="NSMutableArray" key="NSSubviews">
-								<reference ref="596750588"/>
+								<reference ref="515308735"/>
 							</array>
 						</object>
 					</array>
@@ -1207,7 +1206,7 @@ dmllcmVuLgo</string>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
 				<string key="NSMinSize">{320, 262}</string>
-				<string key="NSMaxSize">{3.4028235e+38, 3.4028235e+38}</string>
+				<string key="NSMaxSize">{1.7976931348623157e+308, 1.7976931348623157e+308}</string>
 				<string key="NSFrameAutosaveName">x11_prefs</string>
 			</object>
 			<object class="NSWindowTemplate" id="604417141">
@@ -1221,7 +1220,7 @@ dmllcmVuLgo</string>
 					<characters key="NS.bytes">View</characters>
 				</object>
 				<nil key="NSUserInterfaceItemIdentifier"/>
-				<string key="NSWindowContentMaxSize">{3.4028235e+38, 3.4028235e+38}</string>
+				<string key="NSWindowContentMaxSize">{1.7976931348623157e+308, 1.7976931348623157e+308}</string>
 				<string key="NSWindowContentMinSize">{512, 240}</string>
 				<object class="NSView" key="NSWindowView" id="85544634">
 					<nil key="NSNextResponder"/>
@@ -1316,7 +1315,7 @@ dmllcmVuLgo</string>
 														<reference key="NSSupport" ref="26"/>
 														<object class="NSColor" key="NSBackgroundColor" id="113872566">
 															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC4zMzMzMzI5ODU2AA</bytes>
+															<bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
 														</object>
 														<object class="NSColor" key="NSTextColor" id="249576247">
 															<int key="NSColorSpace">6</int>
@@ -1434,6 +1433,7 @@ dmllcmVuLgo</string>
 											<int key="NSDraggingSourceMaskForNonLocal">0</int>
 											<bool key="NSAllowsTypeSelect">YES</bool>
 											<int key="NSTableViewDraggingDestinationStyle">0</int>
+											<int key="NSTableViewGroupRowStyle">1</int>
 										</object>
 									</array>
 									<string key="NSFrame">{{1, 17}, {301, 198}}</string>
@@ -1450,7 +1450,7 @@ dmllcmVuLgo</string>
 									<reference key="NSSuperview" ref="1063387772"/>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.99492377042770386</double>
+									<double key="NSPercent">0.99492380000000002</double>
 								</object>
 								<object class="NSScroller" id="17278747">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1460,7 +1460,7 @@ dmllcmVuLgo</string>
 									<int key="NSsFlags">1</int>
 									<reference key="NSTarget" ref="1063387772"/>
 									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.68852460384368896</double>
+									<double key="NSPercent">0.68852460000000004</double>
 								</object>
 								<object class="NSClipView" id="672307654">
 									<reference key="NSNextResponder" ref="1063387772"/>
@@ -1480,11 +1480,12 @@ dmllcmVuLgo</string>
 							<string key="NSFrame">{{20, 20}, {318, 231}}</string>
 							<reference key="NSSuperview" ref="85544634"/>
 							<reference key="NSNextKeyView" ref="580565898"/>
-							<int key="NSsFlags">50</int>
+							<int key="NSsFlags">133170</int>
 							<reference key="NSVScroller" ref="842897584"/>
 							<reference key="NSHScroller" ref="17278747"/>
 							<reference key="NSContentView" ref="580565898"/>
 							<reference key="NSHeaderClipView" ref="672307654"/>
+							<reference key="NSCornerView" ref="898633680"/>
 							<bytes key="NSScrollAmts">QSAAAEEgAABBmAAAQZgAAA</bytes>
 						</object>
 						<object class="NSButton" id="758204686">
@@ -1515,7 +1516,7 @@ dmllcmVuLgo</string>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
 				<string key="NSMinSize">{512, 262}</string>
-				<string key="NSMaxSize">{3.4028235e+38, 3.4028235e+38}</string>
+				<string key="NSMaxSize">{1.7976931348623157e+308, 1.7976931348623157e+308}</string>
 				<string key="NSFrameAutosaveName">x11_apps</string>
 			</object>
 			<object class="NSMenu" id="294137138">
@@ -3235,10 +3236,9 @@ dmllcmVuLgo</string>
 				<string key="24.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="24.ImportedFromIB2"/>
 				<string key="24.editorWindowContentRectSynchronizationRect">{{271, 666}, {301, 153}}</string>
-				<string key="244.IBEditorWindowLastContentRect">{{390, 203}, {613, 302}}</string>
+				<string key="244.IBEditorWindowLastContentRect">{{507, 565}, {484, 308}}</string>
 				<string key="244.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<boolean value="YES" key="244.IBViewEditorWindowController.showingLayoutRectangles"/>
-				<string key="244.IBWindowTemplateEditedContentRect">{{390, 203}, {613, 302}}</string>
+				<string key="244.IBWindowTemplateEditedContentRect">{{507, 565}, {484, 308}}</string>
 				<integer value="1" key="244.ImportedFromIB2"/>
 				<string key="244.editorWindowContentRectSynchronizationRect">{{184, 290}, {481, 345}}</string>
 				<integer value="0" key="244.windowTemplate.hasMaxSize"/>
@@ -3385,7 +3385,6 @@ dmllcmVuLgo</string>
 				<integer value="1" key="377.ImportedFromIB2"/>
 				<string key="379.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="379.ImportedFromIB2"/>
-				<string key="380.IBEditorWindowLastContentRect">{{476, 379}, {215, 83}}</string>
 				<string key="380.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="380.ImportedFromIB2"/>
 				<string key="381.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -3488,6 +3487,259 @@ dmllcmVuLgo</string>
 					</object>
 				</object>
 			</array>
+			<array class="NSMutableArray" key="referencedPartialClassDescriptionsV3.1+">
+				<object class="IBPartialClassDescription">
+					<string key="className">X11Controller</string>
+					<string key="superclassName">NSObject</string>
+					<dictionary class="NSMutableDictionary" key="actions">
+						<string key="apps_table_delete:">id</string>
+						<string key="apps_table_done:">id</string>
+						<string key="apps_table_duplicate:">id</string>
+						<string key="apps_table_new:">id</string>
+						<string key="apps_table_show:">id</string>
+						<string key="bring_to_front:">id</string>
+						<string key="close_window:">id</string>
+						<string key="enable_fullscreen_changed:">id</string>
+						<string key="minimize_window:">id</string>
+						<string key="next_window:">id</string>
+						<string key="prefs_changed:">id</string>
+						<string key="prefs_show:">id</string>
+						<string key="previous_window:">id</string>
+						<string key="quit:">id</string>
+						<string key="toggle_fullscreen:">id</string>
+						<string key="x11_help:">id</string>
+						<string key="zoom_window:">id</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="actionInfosByName">
+						<object class="IBActionInfo" key="apps_table_delete:">
+							<string key="name">apps_table_delete:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="apps_table_done:">
+							<string key="name">apps_table_done:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="apps_table_duplicate:">
+							<string key="name">apps_table_duplicate:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="apps_table_new:">
+							<string key="name">apps_table_new:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="apps_table_show:">
+							<string key="name">apps_table_show:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="bring_to_front:">
+							<string key="name">bring_to_front:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="close_window:">
+							<string key="name">close_window:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="enable_fullscreen_changed:">
+							<string key="name">enable_fullscreen_changed:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="minimize_window:">
+							<string key="name">minimize_window:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="next_window:">
+							<string key="name">next_window:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="prefs_changed:">
+							<string key="name">prefs_changed:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="prefs_show:">
+							<string key="name">prefs_show:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="previous_window:">
+							<string key="name">previous_window:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="quit:">
+							<string key="name">quit:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="toggle_fullscreen:">
+							<string key="name">toggle_fullscreen:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="x11_help:">
+							<string key="name">x11_help:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="zoom_window:">
+							<string key="name">zoom_window:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="outlets">
+						<string key="apps_separator">NSMenuItem</string>
+						<string key="apps_table">NSTableView</string>
+						<string key="click_through">NSButton</string>
+						<string key="copy_menu_item">NSMenuItem</string>
+						<string key="depth">NSPopUpButton</string>
+						<string key="dock_apps_menu">NSMenu</string>
+						<string key="dock_menu">NSMenu</string>
+						<string key="dock_window_separator">NSMenuItem</string>
+						<string key="enable_auth">NSButton</string>
+						<string key="enable_fullscreen">NSButton</string>
+						<string key="enable_fullscreen_menu">NSButton</string>
+						<string key="enable_keyequivs">NSButton</string>
+						<string key="enable_tcp">NSButton</string>
+						<string key="fake_buttons">NSButton</string>
+						<string key="focus_follows_mouse">NSButton</string>
+						<string key="focus_on_new_window">NSButton</string>
+						<string key="option_sends_alt">NSButton</string>
+						<string key="prefs_panel">NSPanel</string>
+						<string key="sync_clipboard_to_pasteboard">NSButton</string>
+						<string key="sync_keymap">NSButton</string>
+						<string key="sync_pasteboard">NSButton</string>
+						<string key="sync_pasteboard_to_clipboard">NSButton</string>
+						<string key="sync_pasteboard_to_primary">NSButton</string>
+						<string key="sync_primary_immediately">NSButton</string>
+						<string key="sync_text1">NSTextField</string>
+						<string key="sync_text2">NSTextField</string>
+						<string key="toggle_fullscreen_item">NSMenuItem</string>
+						<string key="use_sysbeep">NSButton</string>
+						<string key="window_separator">NSMenuItem</string>
+						<string key="x11_about_item">NSMenuItem</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<object class="IBToOneOutletInfo" key="apps_separator">
+							<string key="name">apps_separator</string>
+							<string key="candidateClassName">NSMenuItem</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="apps_table">
+							<string key="name">apps_table</string>
+							<string key="candidateClassName">NSTableView</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="click_through">
+							<string key="name">click_through</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="copy_menu_item">
+							<string key="name">copy_menu_item</string>
+							<string key="candidateClassName">NSMenuItem</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="depth">
+							<string key="name">depth</string>
+							<string key="candidateClassName">NSPopUpButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="dock_apps_menu">
+							<string key="name">dock_apps_menu</string>
+							<string key="candidateClassName">NSMenu</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="dock_menu">
+							<string key="name">dock_menu</string>
+							<string key="candidateClassName">NSMenu</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="dock_window_separator">
+							<string key="name">dock_window_separator</string>
+							<string key="candidateClassName">NSMenuItem</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="enable_auth">
+							<string key="name">enable_auth</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="enable_fullscreen">
+							<string key="name">enable_fullscreen</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="enable_fullscreen_menu">
+							<string key="name">enable_fullscreen_menu</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="enable_keyequivs">
+							<string key="name">enable_keyequivs</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="enable_tcp">
+							<string key="name">enable_tcp</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="fake_buttons">
+							<string key="name">fake_buttons</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="focus_follows_mouse">
+							<string key="name">focus_follows_mouse</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="focus_on_new_window">
+							<string key="name">focus_on_new_window</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="option_sends_alt">
+							<string key="name">option_sends_alt</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="prefs_panel">
+							<string key="name">prefs_panel</string>
+							<string key="candidateClassName">NSPanel</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_clipboard_to_pasteboard">
+							<string key="name">sync_clipboard_to_pasteboard</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_keymap">
+							<string key="name">sync_keymap</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_pasteboard">
+							<string key="name">sync_pasteboard</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_pasteboard_to_clipboard">
+							<string key="name">sync_pasteboard_to_clipboard</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_pasteboard_to_primary">
+							<string key="name">sync_pasteboard_to_primary</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_primary_immediately">
+							<string key="name">sync_primary_immediately</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_text1">
+							<string key="name">sync_text1</string>
+							<string key="candidateClassName">NSTextField</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_text2">
+							<string key="name">sync_text2</string>
+							<string key="candidateClassName">NSTextField</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="toggle_fullscreen_item">
+							<string key="name">toggle_fullscreen_item</string>
+							<string key="candidateClassName">NSMenuItem</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="use_sysbeep">
+							<string key="name">use_sysbeep</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="window_separator">
+							<string key="name">window_separator</string>
+							<string key="candidateClassName">NSMenuItem</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="x11_about_item">
+							<string key="name">x11_about_item</string>
+							<string key="candidateClassName">NSMenuItem</string>
+						</object>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBDocumentRelativeSource</string>
+						<string key="minorKey">../../../X11Controller.h</string>
+					</object>
+				</object>
+			</array>
 		</object>
 		<int key="IBDocument.localizationMode">0</int>
 		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
diff --git a/hw/xquartz/bundle/Resources/German.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/German.lproj/main.nib/keyedobjects.nib
index f5df325..55b75a3 100644
Binary files a/hw/xquartz/bundle/Resources/German.lproj/main.nib/keyedobjects.nib and b/hw/xquartz/bundle/Resources/German.lproj/main.nib/keyedobjects.nib differ
diff --git a/hw/xquartz/bundle/Resources/Japanese.lproj/locversion.plist b/hw/xquartz/bundle/Resources/Japanese.lproj/locversion.plist
index 0c81bd0..6c89483 100644
--- a/hw/xquartz/bundle/Resources/Japanese.lproj/locversion.plist
+++ b/hw/xquartz/bundle/Resources/Japanese.lproj/locversion.plist
@@ -3,12 +3,12 @@
 <plist version="1.0">
 <dict>
 	<key>LprojCompatibleVersion</key>
-	<string>101</string>
+	<string>102</string>
 	<key>LprojLocale</key>
 	<string>ja</string>
 	<key>LprojRevisionLevel</key>
 	<string>1</string>
 	<key>LprojVersion</key>
-	<string>101</string>
+	<string>102</string>
 </dict>
 </plist>
diff --git a/hw/xquartz/bundle/Resources/Japanese.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/Japanese.lproj/main.nib/designable.nib
index 2803baa..a800d3c 100644
--- a/hw/xquartz/bundle/Resources/Japanese.lproj/main.nib/designable.nib
+++ b/hw/xquartz/bundle/Resources/Japanese.lproj/main.nib/designable.nib
@@ -2,13 +2,13 @@
 <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
 	<data>
 		<int key="IBDocument.SystemTarget">1040</int>
-		<string key="IBDocument.SystemVersion">11A194b</string>
-		<string key="IBDocument.InterfaceBuilderVersion">787</string>
-		<string key="IBDocument.AppKitVersion">1079</string>
-		<string key="IBDocument.HIToolboxVersion">502.00</string>
+		<string key="IBDocument.SystemVersion">11A289</string>
+		<string key="IBDocument.InterfaceBuilderVersion">844</string>
+		<string key="IBDocument.AppKitVersion">1094.2</string>
+		<string key="IBDocument.HIToolboxVersion">521.00</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
-			<string key="NS.object.0">787</string>
+			<string key="NS.object.0">844</string>
 		</object>
 		<array class="NSMutableArray" key="IBDocument.EditedObjectIDs"/>
 		<array key="IBDocument.PluginDependencies">
@@ -373,7 +373,7 @@
 				<string key="NSWindowContentMaxSize">{1.7976931348623157e+308, 1.7976931348623157e+308}</string>
 				<string key="NSWindowContentMinSize">{320, 240}</string>
 				<object class="NSView" key="NSWindowView" id="941366957">
-					<reference key="NSNextResponder"/>
+					<nil key="NSNextResponder"/>
 					<int key="NSvFlags">256</int>
 					<array class="NSMutableArray" key="NSSubviews">
 						<object class="NSTabView" id="448510093">
@@ -381,7 +381,6 @@
 							<int key="NSvFlags">256</int>
 							<string key="NSFrame">{{13, 10}, {558, 292}}</string>
 							<reference key="NSSuperview" ref="941366957"/>
-							<reference key="NSWindow"/>
 							<array class="NSMutableArray" key="NSTabViewItems">
 								<object class="NSTabViewItem" id="287591690">
 									<object class="NSMutableString" key="NSIdentifier">
@@ -409,7 +408,7 @@
 													<reference key="NSControlView" ref="119157981"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<object class="NSCustomResource" key="NSNormalImage" id="6132373">
+													<object class="NSCustomResource" key="NSNormalImage" id="891575339">
 														<string key="NSClassName">NSImage</string>
 														<string key="NSResourceName">NSSwitch</string>
 													</object>
@@ -469,9 +468,9 @@
 													<int key="NSCellFlags">67239424</int>
 													<int key="NSCellFlags2">4194304</int>
 													<string type="base64-UTF8" key="NSContents">T3B0aW9uIOOCreODvOOCkuaKvOOBl+OBn+OBvuOBvuOCr+ODquODg+OCr+OBmeOCi+OBqOODnuOCpuOC
-ueOBruS4reODnOOCv+ODs+aTjeS9nOOBq+OBquOCiuOAgeOCs+ODnuODs+ODieOCreODvOOCkuaKvOOB
-l+OBn+OBvuOBvuOCr+ODquODg+OCr+OBmeOCi+OBqOODnuOCpuOCueOBruWPs+ODnOOCv+ODs+aTjeS9
-nOOBq+OBquOCiuOBvuOBmeOAggo</string>
+ueOBruS4reODnOOCv+ODs+aTjeS9nOOBq+OBquOCiuOAgUNvbW1hbmQg44Kt44O844KS5oq844GX44Gf
+44G+44G+44Kv44Oq44OD44Kv44GZ44KL44Go44Oe44Km44K544Gu5Y+z44Oc44K/44Oz5pON5L2c44Gr
+44Gq44KK44G+44GZ44CCCg</string>
 													<reference key="NSSupport" ref="26"/>
 													<string key="NSPlaceholderString"/>
 													<reference key="NSControlView" ref="282885445"/>
@@ -493,7 +492,7 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 													<reference key="NSControlView" ref="842100515"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="6132373"/>
+													<reference key="NSNormalImage" ref="891575339"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -532,7 +531,7 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 													<reference key="NSControlView" ref="179949713"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="6132373"/>
+													<reference key="NSNormalImage" ref="891575339"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -570,7 +569,7 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 													<reference key="NSControlView" ref="406291430"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="6132373"/>
+													<reference key="NSNormalImage" ref="891575339"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -598,7 +597,6 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 												<int key="NSvFlags">256</int>
 												<string key="NSFrame">{{75, 201}, {163, 26}}</string>
 												<reference key="NSSuperview" ref="515308735"/>
-												<reference key="NSWindow"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSPopUpButtonCell" key="NSCell" id="633115429">
 													<int key="NSCellFlags">-2076049856</int>
@@ -687,7 +685,6 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 												<int key="NSvFlags">256</int>
 												<string key="NSFrame">{{17, 205}, {56, 19}}</string>
 												<reference key="NSSuperview" ref="515308735"/>
-												<reference key="NSWindow"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="930265681">
 													<int key="NSCellFlags">67239424</int>
@@ -705,7 +702,6 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 												<int key="NSvFlags">256</int>
 												<string key="NSFrame">{{36, 183}, {392, 14}}</string>
 												<reference key="NSSuperview" ref="515308735"/>
-												<reference key="NSWindow"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="311969422">
 													<int key="NSCellFlags">67239424</int>
@@ -723,7 +719,6 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 												<int key="NSvFlags">256</int>
 												<string key="NSFrame">{{18, 149}, {409, 23}}</string>
 												<reference key="NSSuperview" ref="515308735"/>
-												<reference key="NSWindow"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="631531164">
 													<int key="NSCellFlags">67239424</int>
@@ -733,7 +728,7 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 													<reference key="NSControlView" ref="477203622"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="6132373"/>
+													<reference key="NSNormalImage" ref="891575339"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -746,7 +741,6 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 												<int key="NSvFlags">256</int>
 												<string key="NSFrame">{{37, 83}, {409, 23}}</string>
 												<reference key="NSSuperview" ref="515308735"/>
-												<reference key="NSWindow"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSButtonCell" key="NSCell" id="917248662">
 													<int key="NSCellFlags">67239424</int>
@@ -756,7 +750,7 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 													<reference key="NSControlView" ref="57246850"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="6132373"/>
+													<reference key="NSNormalImage" ref="891575339"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -769,7 +763,6 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 												<int key="NSvFlags">256</int>
 												<string key="NSFrame">{{36, 113}, {468, 30}}</string>
 												<reference key="NSSuperview" ref="515308735"/>
-												<reference key="NSWindow"/>
 												<bool key="NSEnabled">YES</bool>
 												<object class="NSTextFieldCell" key="NSCell" id="761107402">
 													<int key="NSCellFlags">67239424</int>
@@ -785,7 +778,6 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 										</array>
 										<string key="NSFrame">{{10, 33}, {538, 246}}</string>
 										<reference key="NSSuperview" ref="448510093"/>
-										<reference key="NSWindow"/>
 									</object>
 									<string key="NSLabel">出力</string>
 									<reference key="NSColor" ref="57160303"/>
@@ -813,7 +805,7 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 													<reference key="NSControlView" ref="878106058"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="6132373"/>
+													<reference key="NSNormalImage" ref="891575339"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -851,7 +843,7 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 													<reference key="NSControlView" ref="477050998"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="6132373"/>
+													<reference key="NSNormalImage" ref="891575339"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -873,7 +865,7 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 													<reference key="NSControlView" ref="765780304"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="6132373"/>
+													<reference key="NSNormalImage" ref="891575339"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -895,7 +887,7 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 													<reference key="NSControlView" ref="1002778833"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="6132373"/>
+													<reference key="NSNormalImage" ref="891575339"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -917,7 +909,7 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 													<reference key="NSControlView" ref="487809555"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="6132373"/>
+													<reference key="NSNormalImage" ref="891575339"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -986,7 +978,7 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 													<reference key="NSControlView" ref="657659108"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="6132373"/>
+													<reference key="NSNormalImage" ref="891575339"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1025,7 +1017,7 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 													<reference key="NSControlView" ref="992839333"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="6132373"/>
+													<reference key="NSNormalImage" ref="891575339"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1064,7 +1056,7 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 													<reference key="NSControlView" ref="128352289"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="6132373"/>
+													<reference key="NSNormalImage" ref="891575339"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1115,7 +1107,7 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 													<reference key="NSControlView" ref="989050925"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="6132373"/>
+													<reference key="NSNormalImage" ref="891575339"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1137,7 +1129,7 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 													<reference key="NSControlView" ref="700826966"/>
 													<int key="NSButtonFlags">1211912703</int>
 													<int key="NSButtonFlags2">2</int>
-													<reference key="NSNormalImage" ref="6132373"/>
+													<reference key="NSNormalImage" ref="891575339"/>
 													<reference key="NSAlternateImage" ref="391434389"/>
 													<string key="NSAlternateContents"/>
 													<string key="NSKeyEquivalent"/>
@@ -1215,8 +1207,6 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 						</object>
 					</array>
 					<string key="NSFrameSize">{584, 308}</string>
-					<reference key="NSSuperview"/>
-					<reference key="NSWindow"/>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
 				<string key="NSMinSize">{320, 262}</string>
@@ -1450,6 +1440,7 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 											<int key="NSDraggingSourceMaskForNonLocal">0</int>
 											<bool key="NSAllowsTypeSelect">YES</bool>
 											<int key="NSTableViewDraggingDestinationStyle">0</int>
+											<int key="NSTableViewGroupRowStyle">1</int>
 										</object>
 									</array>
 									<string key="NSFrame">{{1, 17}, {301, 198}}</string>
@@ -1496,7 +1487,7 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 							<string key="NSFrame">{{20, 20}, {318, 231}}</string>
 							<reference key="NSSuperview" ref="85544634"/>
 							<reference key="NSNextKeyView" ref="580565898"/>
-							<int key="NSsFlags">50</int>
+							<int key="NSsFlags">133170</int>
 							<reference key="NSVScroller" ref="842897584"/>
 							<reference key="NSHScroller" ref="17278747"/>
 							<reference key="NSContentView" ref="580565898"/>
@@ -3251,10 +3242,9 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 				<string key="24.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="24.ImportedFromIB2"/>
 				<string key="24.editorWindowContentRectSynchronizationRect">{{271, 666}, {301, 153}}</string>
-				<string key="244.IBEditorWindowLastContentRect">{{539, 548}, {584, 308}}</string>
+				<string key="244.IBEditorWindowLastContentRect">{{507, 565}, {484, 308}}</string>
 				<string key="244.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<boolean value="YES" key="244.IBViewEditorWindowController.showingLayoutRectangles"/>
-				<string key="244.IBWindowTemplateEditedContentRect">{{539, 548}, {584, 308}}</string>
+				<string key="244.IBWindowTemplateEditedContentRect">{{507, 565}, {484, 308}}</string>
 				<integer value="1" key="244.ImportedFromIB2"/>
 				<string key="244.editorWindowContentRectSynchronizationRect">{{184, 290}, {481, 345}}</string>
 				<integer value="0" key="244.windowTemplate.hasMaxSize"/>
@@ -3284,7 +3274,7 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 				<string key="285.windowTemplate.minSize">{454, 271}</string>
 				<string key="286.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="286.ImportedFromIB2"/>
-				<string key="29.IBEditorWindowLastContentRect">{{145, 836}, {394, 20}}</string>
+				<string key="29.IBEditorWindowLastContentRect">{{145, 1011}, {336, 20}}</string>
 				<string key="29.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<integer value="1" key="29.ImportedFromIB2"/>
 				<string key="29.editorWindowContentRectSynchronizationRect">{{67, 819}, {336, 20}}</string>
@@ -3503,6 +3493,259 @@ nOOBq+OBquOCiuOBvuOBmeOAggo</string>
 					</object>
 				</object>
 			</array>
+			<array class="NSMutableArray" key="referencedPartialClassDescriptionsV3.1+">
+				<object class="IBPartialClassDescription">
+					<string key="className">X11Controller</string>
+					<string key="superclassName">NSObject</string>
+					<dictionary class="NSMutableDictionary" key="actions">
+						<string key="apps_table_delete:">id</string>
+						<string key="apps_table_done:">id</string>
+						<string key="apps_table_duplicate:">id</string>
+						<string key="apps_table_new:">id</string>
+						<string key="apps_table_show:">id</string>
+						<string key="bring_to_front:">id</string>
+						<string key="close_window:">id</string>
+						<string key="enable_fullscreen_changed:">id</string>
+						<string key="minimize_window:">id</string>
+						<string key="next_window:">id</string>
+						<string key="prefs_changed:">id</string>
+						<string key="prefs_show:">id</string>
+						<string key="previous_window:">id</string>
+						<string key="quit:">id</string>
+						<string key="toggle_fullscreen:">id</string>
+						<string key="x11_help:">id</string>
+						<string key="zoom_window:">id</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="actionInfosByName">
+						<object class="IBActionInfo" key="apps_table_delete:">
+							<string key="name">apps_table_delete:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="apps_table_done:">
+							<string key="name">apps_table_done:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="apps_table_duplicate:">
+							<string key="name">apps_table_duplicate:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="apps_table_new:">
+							<string key="name">apps_table_new:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="apps_table_show:">
+							<string key="name">apps_table_show:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="bring_to_front:">
+							<string key="name">bring_to_front:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="close_window:">
+							<string key="name">close_window:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="enable_fullscreen_changed:">
+							<string key="name">enable_fullscreen_changed:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="minimize_window:">
+							<string key="name">minimize_window:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="next_window:">
+							<string key="name">next_window:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="prefs_changed:">
+							<string key="name">prefs_changed:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="prefs_show:">
+							<string key="name">prefs_show:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="previous_window:">
+							<string key="name">previous_window:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="quit:">
+							<string key="name">quit:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="toggle_fullscreen:">
+							<string key="name">toggle_fullscreen:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="x11_help:">
+							<string key="name">x11_help:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="zoom_window:">
+							<string key="name">zoom_window:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="outlets">
+						<string key="apps_separator">NSMenuItem</string>
+						<string key="apps_table">NSTableView</string>
+						<string key="click_through">NSButton</string>
+						<string key="copy_menu_item">NSMenuItem</string>
+						<string key="depth">NSPopUpButton</string>
+						<string key="dock_apps_menu">NSMenu</string>
+						<string key="dock_menu">NSMenu</string>
+						<string key="dock_window_separator">NSMenuItem</string>
+						<string key="enable_auth">NSButton</string>
+						<string key="enable_fullscreen">NSButton</string>
+						<string key="enable_fullscreen_menu">NSButton</string>
+						<string key="enable_keyequivs">NSButton</string>
+						<string key="enable_tcp">NSButton</string>
+						<string key="fake_buttons">NSButton</string>
+						<string key="focus_follows_mouse">NSButton</string>
+						<string key="focus_on_new_window">NSButton</string>
+						<string key="option_sends_alt">NSButton</string>
+						<string key="prefs_panel">NSPanel</string>
+						<string key="sync_clipboard_to_pasteboard">NSButton</string>
+						<string key="sync_keymap">NSButton</string>
+						<string key="sync_pasteboard">NSButton</string>
+						<string key="sync_pasteboard_to_clipboard">NSButton</string>
+						<string key="sync_pasteboard_to_primary">NSButton</string>
+						<string key="sync_primary_immediately">NSButton</string>
+						<string key="sync_text1">NSTextField</string>
+						<string key="sync_text2">NSTextField</string>
+						<string key="toggle_fullscreen_item">NSMenuItem</string>
+						<string key="use_sysbeep">NSButton</string>
+						<string key="window_separator">NSMenuItem</string>
+						<string key="x11_about_item">NSMenuItem</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<object class="IBToOneOutletInfo" key="apps_separator">
+							<string key="name">apps_separator</string>
+							<string key="candidateClassName">NSMenuItem</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="apps_table">
+							<string key="name">apps_table</string>
+							<string key="candidateClassName">NSTableView</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="click_through">
+							<string key="name">click_through</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="copy_menu_item">
+							<string key="name">copy_menu_item</string>
+							<string key="candidateClassName">NSMenuItem</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="depth">
+							<string key="name">depth</string>
+							<string key="candidateClassName">NSPopUpButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="dock_apps_menu">
+							<string key="name">dock_apps_menu</string>
+							<string key="candidateClassName">NSMenu</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="dock_menu">
+							<string key="name">dock_menu</string>
+							<string key="candidateClassName">NSMenu</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="dock_window_separator">
+							<string key="name">dock_window_separator</string>
+							<string key="candidateClassName">NSMenuItem</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="enable_auth">
+							<string key="name">enable_auth</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="enable_fullscreen">
+							<string key="name">enable_fullscreen</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="enable_fullscreen_menu">
+							<string key="name">enable_fullscreen_menu</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="enable_keyequivs">
+							<string key="name">enable_keyequivs</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="enable_tcp">
+							<string key="name">enable_tcp</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="fake_buttons">
+							<string key="name">fake_buttons</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="focus_follows_mouse">
+							<string key="name">focus_follows_mouse</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="focus_on_new_window">
+							<string key="name">focus_on_new_window</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="option_sends_alt">
+							<string key="name">option_sends_alt</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="prefs_panel">
+							<string key="name">prefs_panel</string>
+							<string key="candidateClassName">NSPanel</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_clipboard_to_pasteboard">
+							<string key="name">sync_clipboard_to_pasteboard</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_keymap">
+							<string key="name">sync_keymap</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_pasteboard">
+							<string key="name">sync_pasteboard</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_pasteboard_to_clipboard">
+							<string key="name">sync_pasteboard_to_clipboard</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_pasteboard_to_primary">
+							<string key="name">sync_pasteboard_to_primary</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_primary_immediately">
+							<string key="name">sync_primary_immediately</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_text1">
+							<string key="name">sync_text1</string>
+							<string key="candidateClassName">NSTextField</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="sync_text2">
+							<string key="name">sync_text2</string>
+							<string key="candidateClassName">NSTextField</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="toggle_fullscreen_item">
+							<string key="name">toggle_fullscreen_item</string>
+							<string key="candidateClassName">NSMenuItem</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="use_sysbeep">
+							<string key="name">use_sysbeep</string>
+							<string key="candidateClassName">NSButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="window_separator">
+							<string key="name">window_separator</string>
+							<string key="candidateClassName">NSMenuItem</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="x11_about_item">
+							<string key="name">x11_about_item</string>
+							<string key="candidateClassName">NSMenuItem</string>
+						</object>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBDocumentRelativeSource</string>
+						<string key="minorKey">../../../X11Controller.h</string>
+					</object>
+				</object>
+			</array>
 		</object>
 		<int key="IBDocument.localizationMode">0</int>
 		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
diff --git a/hw/xquartz/bundle/Resources/Japanese.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/Japanese.lproj/main.nib/keyedobjects.nib
index 46d3763..6700f64 100644
Binary files a/hw/xquartz/bundle/Resources/Japanese.lproj/main.nib/keyedobjects.nib and b/hw/xquartz/bundle/Resources/Japanese.lproj/main.nib/keyedobjects.nib differ
commit 59850630fefe5e4f0430d7e2e106937fdf1e7ffb
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date:   Thu Feb 24 19:18:35 2011 -0800

    XQuartz: Add LSApplicationCategoryType key to Info.plist
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>

diff --git a/hw/xquartz/bundle/Info.plist.cpp b/hw/xquartz/bundle/Info.plist.cpp
index 2e568ff..0e98218 100644
--- a/hw/xquartz/bundle/Info.plist.cpp
+++ b/hw/xquartz/bundle/Info.plist.cpp
@@ -34,6 +34,8 @@
         <key>SUFeedURL</key>
                 <string>http://xquartz.macosforge.org/downloads/sparkle/release.xml</string>
 #endif
+	<key>LSApplicationCategoryType</key>
+		<string>public.app-category.utilities</string>
 	<key>NSHumanReadableCopyright</key>
 		<string>© 2003-2011 Apple Inc.
 © 2003 XFree86 Project, Inc.
commit 83861595782aaa05907f9cf7b236d50261d404d9
Merge: a1cc0e5... 4102a00...
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Feb 24 18:59:07 2011 -0800

    Merge remote branch 'kibi/master'

commit a1cc0e52b0e8ca40bc1218de553424b2bcb760ef
Author: Alexandr Shadchin <alexandr.shadchin at gmail.com>
Date:   Tue Nov 30 21:17:19 2010 +0500

    Removing unused code
    
    In OpenBSD removed support PCCONS in 2002 year
    http://marc.info/?l=openbsd-cvs&m=102435816424294&w=2
    
    Signed-off-by: Alexandr Shadchin <Alexandr.Shadchin at gmail.com>
    Reviewed-by: Matthieu Herrb <matthieu.herrb at laas.fr>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/os-support/bsd/bsd_init.c b/hw/xfree86/os-support/bsd/bsd_init.c
index 13c6ec3..123eb17 100644
--- a/hw/xfree86/os-support/bsd/bsd_init.c
+++ b/hw/xfree86/os-support/bsd/bsd_init.c
@@ -50,11 +50,7 @@ static Bool ShareVTs = FALSE;
 
 #ifdef PCCONS_SUPPORT
 /* Stock 0.1 386bsd pccons console driver interface */
-#ifndef __OpenBSD__
-#  define PCCONS_CONSOLE_DEV1 "/dev/ttyv0"
-#else
-#  define PCCONS_CONSOLE_DEV1 "/dev/ttyC0"
-#endif
+#define PCCONS_CONSOLE_DEV1 "/dev/ttyv0"
 #define PCCONS_CONSOLE_DEV2 "/dev/vga"
 #define PCCONS_CONSOLE_MODE O_RDWR|O_NDELAY
 #endif
diff --git a/hw/xfree86/os-support/xf86_OSlib.h b/hw/xfree86/os-support/xf86_OSlib.h
index 3b646da..147a201 100644
--- a/hw/xfree86/os-support/xf86_OSlib.h
+++ b/hw/xfree86/os-support/xf86_OSlib.h
@@ -264,14 +264,6 @@
 #   define CONSOLE_X_MODE_OFF PCCONIOCCOOK
 #   define CONSOLE_X_BELL PCCONIOCBEEP
 #  else /* __bsdi__ */
-#   if defined(__OpenBSD__)
-#     ifdef PCCONS_SUPPORT
-#       include <machine/pccons.h>
-#       undef CONSOLE_X_MODE_ON
-#       undef CONSOLE_X_MODE_OFF
-#       undef CONSOLE_X_BELL
-#     endif
-#   endif
 #   ifdef SYSCONS_SUPPORT
 #    define COMPAT_SYSCONS
 #    if defined(__NetBSD__) || defined(__OpenBSD__)
commit 365ad68fb9f7029550505b7c276a808050cada9c
Merge: 0801afb... 720c895...
Author: Keith Packard <keithp at keithp.com>
Date:   Thu Feb 24 18:49:40 2011 -0800

    Merge remote branch 'ajax/for-keithp'

commit 0801afbd7c2c644c672b37f8463f1a0cbadebd2e
Author: Erkki Seppälä <erkki.seppala at vincit.fi>
Date:   Thu Feb 10 15:35:14 2011 +0200

    record: avoid crash when calling RecordFlushReplyBuffer recursively
    
    RecordFlushReplyBuffer can call itself recursively through
    WriteClient->CallCallbacks->_CallCallbacks->RecordFlushAllContexts
    when the recording client's buffer cannot be completely emptied in one
    WriteClient. When a such a recursion occurs, it will not be broken out
    of which results in segmentation fault when the stack is exhausted.
    
    This patch adds a counter (a flag, really) that guards against this
    situation, to break out of the recursion.
    
    One alternative to this change would be to change _CallCallbacks to
    check the corresponding counter before the callback loop, but that
    might affect existing behavior, which may be relied upon.
    
    Reviewed-by: Rami Ylimäki <rami.ylimaki at vincit.fi>
    Signed-off-by: Erkki Seppälä <erkki.seppala at vincit.fi>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/record/record.c b/record/record.c
index 6a93d7a..facaebb 100644
--- a/record/record.c
+++ b/record/record.c
@@ -77,6 +77,7 @@ typedef struct {
     char	bufCategory;	   /* category of protocol in replyBuffer */
     int		numBufBytes;	   /* number of bytes in replyBuffer */
     char	replyBuffer[REPLY_BUF_SIZE]; /* buffered recorded protocol */
+    int		inFlush;           /*  are we inside RecordFlushReplyBuffer */
 } RecordContextRec, *RecordContextPtr;
 
 /*  RecordMinorOpRec - to hold minor opcode selections for extension requests
@@ -245,8 +246,9 @@ RecordFlushReplyBuffer(
     int len2
 )
 {
-    if (!pContext->pRecordingClient || pContext->pRecordingClient->clientGone) 
+    if (!pContext->pRecordingClient || pContext->pRecordingClient->clientGone || pContext->inFlush)
 	return;
+    ++pContext->inFlush;
     if (pContext->numBufBytes)
 	WriteToClient(pContext->pRecordingClient, pContext->numBufBytes,
 		      (char *)pContext->replyBuffer);
@@ -255,6 +257,7 @@ RecordFlushReplyBuffer(
 	WriteToClient(pContext->pRecordingClient, len1, (char *)data1);
     if (len2)
 	WriteToClient(pContext->pRecordingClient, len2, (char *)data2);
+    --pContext->inFlush;
 } /* RecordFlushReplyBuffer */
 
 
@@ -1938,6 +1941,7 @@ ProcRecordCreateContext(ClientPtr client)
     pContext->numBufBytes = 0;
     pContext->pBufClient = NULL;
     pContext->continuedReply = 0;
+    pContext->inFlush = 0;
 
     err = RecordRegisterClients(pContext, client,
 				(xRecordRegisterClientsReq *)stuff);
commit b833f9b924ddc043244c0a026547c438f1c4d4df
Author: Keith Packard <keithp at keithp.com>
Date:   Wed Feb 23 11:18:35 2011 -0800

    Revert "Replace huge argument list in xf86CrtcSetModeTransform with struct"
    
    This reverts commit 8b35118c03590a7ad3786d3284bafb3f40fcb8cc.

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 54b8f4d..a49668f 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -247,14 +247,15 @@ xf86CrtcSetScreenSubpixelOrder (ScreenPtr pScreen)
  * Sets the given video mode on the given crtc
  */
 Bool
-xf86CrtcSet(xf86CrtcPtr crtc, xf86CrtcSetRec *set)
+xf86CrtcSetModeTransform (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation,
+			  RRTransformPtr transform, int x, int y)
 {
     ScrnInfoPtr		scrn = crtc->scrn;
     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
     int			i;
     Bool		ret = FALSE;
     Bool		didLock = FALSE;
-    DisplayModePtr	adjusted_mode = NULL;
+    DisplayModePtr	adjusted_mode;
     DisplayModeRec	saved_mode;
     int			saved_x, saved_y;
     Rotation		saved_rotation;
@@ -271,9 +272,8 @@ xf86CrtcSet(xf86CrtcPtr crtc, xf86CrtcSetRec *set)
 	return TRUE;
     }
 
-    /* See if nothing has changed */
-    if (!set->flags)
-	return TRUE;
+    adjusted_mode = xf86DuplicateMode(mode);
+
 
     saved_mode = crtc->mode;
     saved_x = crtc->x;
@@ -288,44 +288,21 @@ xf86CrtcSet(xf86CrtcPtr crtc, xf86CrtcSetRec *set)
     /* Update crtc values up front so the driver can rely on them for mode
      * setting.
      */
-    if (set->flags & XF86CrtcSetMode)
-	crtc->mode = *set->mode;
-    if (set->flags & XF86CrtcSetOrigin) {
-	crtc->x = set->x;
-	crtc->y = set->y;
-    }
-    if (set->flags & XF86CrtcSetRotation)
-	crtc->rotation = set->rotation;
-
-    if (set->flags & XF86CrtcSetTransform) {
-	if (set->transform) {
-	    RRTransformCopy (&crtc->transform, set->transform);
-	    crtc->transformPresent = TRUE;
-	} else
-	    crtc->transformPresent = FALSE;
-    }
-
-    if (crtc->funcs->set) {
-	ret = crtc->funcs->set(crtc, set->flags);
-	goto done;
-    }
-
-    if (set->flags == XF86CrtcSetOrigin && crtc->funcs->set_origin) {
-	ret = xf86CrtcRotate(crtc);
-	if (ret)
-	    crtc->funcs->set_origin(crtc, crtc->x, crtc->y);
-	goto done;
-    }
+    crtc->mode = *mode;
+    crtc->x = x;
+    crtc->y = y;
+    crtc->rotation = rotation;
+    if (transform) {
+	RRTransformCopy (&crtc->transform, transform);
+	crtc->transformPresent = TRUE;
+    } else
+	crtc->transformPresent = FALSE;
 
     if (crtc->funcs->set_mode_major) {
-	ret = crtc->funcs->set_mode_major(crtc, &crtc->mode,
-					  crtc->rotation,
-					  crtc->x, crtc->y);
+	ret = crtc->funcs->set_mode_major(crtc, mode, rotation, x, y);
 	goto done;
     }
 
-    adjusted_mode = xf86DuplicateMode(&crtc->mode);
-
     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
@@ -337,12 +314,12 @@ xf86CrtcSet(xf86CrtcPtr crtc, xf86CrtcSetRec *set)
 	if (output->crtc != crtc)
 	    continue;
 
-	if (!output->funcs->mode_fixup(output, &crtc->mode, adjusted_mode)) {
+	if (!output->funcs->mode_fixup(output, mode, adjusted_mode)) {
 	    goto done;
 	}
     }
 
-    if (!crtc->funcs->mode_fixup(crtc, &crtc->mode, adjusted_mode)) {
+    if (!crtc->funcs->mode_fixup(crtc, mode, adjusted_mode)) {
 	goto done;
     }
 
@@ -365,12 +342,12 @@ xf86CrtcSet(xf86CrtcPtr crtc, xf86CrtcSetRec *set)
     /* Set up the DPLL and any output state that needs to adjust or depend
      * on the DPLL.
      */
-    crtc->funcs->mode_set(crtc, &crtc->mode, adjusted_mode, crtc->x, crtc->y);
+    crtc->funcs->mode_set(crtc, mode, adjusted_mode, crtc->x, crtc->y);
     for (i = 0; i < xf86_config->num_output; i++) 
     {
 	xf86OutputPtr output = xf86_config->output[i];
 	if (output->crtc == crtc)
-	    output->funcs->mode_set(output, &crtc->mode, adjusted_mode);
+	    output->funcs->mode_set(output, mode, adjusted_mode);
     }
 
     /* Only upload when needed, to avoid unneeded delays. */
@@ -406,10 +383,8 @@ done:
 	crtc->transformPresent = saved_transform_present;
     }
 
-    if (adjusted_mode) {
-	free(adjusted_mode->name);
-	free(adjusted_mode);
-    }
+    free(adjusted_mode->name);
+    free(adjusted_mode);
 
     if (didLock)
 	crtc->funcs->unlock (crtc);
@@ -418,19 +393,35 @@ done:
 }
 
 /**
+ * Sets the given video mode on the given crtc, but without providing
+ * a transform
+ */
+Bool
+xf86CrtcSetMode (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation,
+		 int x, int y)
+{
+    return xf86CrtcSetModeTransform (crtc, mode, rotation, NULL, x, y);
+}
+
+/**
  * Pans the screen, does not change the mode
  */
 void
 xf86CrtcSetOrigin (xf86CrtcPtr crtc, int x, int y)
 {
-    xf86CrtcSetRec	set;
+    ScrnInfoPtr scrn = crtc->scrn;
 
-    if (x != crtc->x || y != crtc->y) {
-	set.x = x;
-	set.y = y;
-	set.flags = XF86CrtcSetOrigin;
-	(void) xf86CrtcSet(crtc, &set);
+    crtc->x = x;
+    crtc->y = y;
+    if (crtc->funcs->set_origin) {
+	if (!xf86CrtcRotate (crtc))
+	    return;
+	crtc->funcs->set_origin (crtc, x, y);
+	if (scrn->ModeSet)
+	    scrn->ModeSet(scrn);
     }
+    else
+	xf86CrtcSetMode (crtc, &crtc->mode, crtc->rotation, x, y);
 }
 
 /*
@@ -2621,7 +2612,6 @@ xf86SetDesiredModes (ScrnInfoPtr scrn)
     for (c = 0; c < config->num_crtc; c++)
     {
 	xf86OutputPtr	output = NULL;
-	xf86CrtcSetRec	set;
 	int		o;
 	RRTransformPtr	transform;
 
@@ -2665,15 +2655,8 @@ xf86SetDesiredModes (ScrnInfoPtr scrn)
 	    transform = &crtc->desiredTransform;
 	else
 	    transform = NULL;
-	set.mode = &crtc->desiredMode;
-	set.rotation = crtc->desiredRotation;
-	set.transform = transform;
-	set.x = crtc->desiredX;
-	set.y = crtc->desiredY;
-	set.flags = (XF86CrtcSetMode | XF86CrtcSetOutput |
-		     XF86CrtcSetOrigin | XF86CrtcSetTransform |
-		     XF86CrtcSetRotation);
-	if (!xf86CrtcSet(crtc, &set))
+	if (!xf86CrtcSetModeTransform (crtc, &crtc->desiredMode, crtc->desiredRotation,
+				       transform, crtc->desiredX, crtc->desiredY))
 	    return FALSE;
     }
 
@@ -2777,7 +2760,6 @@ xf86SetSingleMode (ScrnInfoPtr pScrn, DisplayModePtr desired, Rotation rotation)
 	xf86CrtcPtr	crtc = config->crtc[c];
 	DisplayModePtr	crtc_mode = NULL;
 	int		o;
-	xf86CrtcSetRec	set;
 
 	if (!crtc->enabled)
 	    continue;
@@ -2805,15 +2787,7 @@ xf86SetSingleMode (ScrnInfoPtr pScrn, DisplayModePtr desired, Rotation rotation)
 	    crtc->enabled = FALSE;
 	    continue;
 	}
-	set.mode = crtc_mode;
-	set.rotation = rotation;
-	set.transform = NULL;
-	set.x = 0;
-	set.y = 0;
-	set.flags = (XF86CrtcSetMode | XF86CrtcSetOutput |
-		     XF86CrtcSetOrigin | XF86CrtcSetTransform |
-		     XF86CrtcSetRotation);
-	if (!xf86CrtcSet (crtc, &set))
+	if (!xf86CrtcSetModeTransform (crtc, crtc_mode, rotation, NULL, 0, 0))
 	    ok = FALSE;
 	else
 	{
diff --git a/hw/xfree86/modes/xf86Crtc.h b/hw/xfree86/modes/xf86Crtc.h
index f43e0a7..68a968c 100644
--- a/hw/xfree86/modes/xf86Crtc.h
+++ b/hw/xfree86/modes/xf86Crtc.h
@@ -72,23 +72,6 @@ typedef enum _xf86OutputStatus {
    XF86OutputStatusUnknown
 } xf86OutputStatus;
 
-typedef enum _xf86CrtcSetFlags {
-    XF86CrtcSetMode = 1,		/* mode */
-    XF86CrtcSetOutput = 2,		/* outputs */
-    XF86CrtcSetOrigin = 4,		/* x/y */
-    XF86CrtcSetTransform = 8,		/* transform */
-    XF86CrtcSetRotation = 16,		/* rotation */
-    XF86CrtcSetProperty = 32,		/* output property */
-} xf86CrtcSetFlags;
-
-typedef struct _xf86CrtcSet {
-    xf86CrtcSetFlags	flags;
-    DisplayModePtr	mode;
-    Rotation		rotation;
-    RRTransformPtr	transform;
-    int			x, y;
-} xf86CrtcSetRec;
-
 typedef struct _xf86CrtcFuncs {
    /**
     * Turns the crtc on/off, or sets intermediate power levels if available.
@@ -238,12 +221,6 @@ typedef struct _xf86CrtcFuncs {
     void
     (*set_origin)(xf86CrtcPtr crtc, int x, int y);
 
-    /**
-     * General mode setting entry point that does everything
-     */
-    Bool
-    (*set)(xf86CrtcPtr crtc, xf86CrtcSetFlags flags);
-
 } xf86CrtcFuncsRec, *xf86CrtcFuncsPtr;
 
 #define XF86_CRTC_VERSION 3
@@ -761,12 +738,18 @@ xf86CrtcCreate (ScrnInfoPtr		scrn,
 extern _X_EXPORT void
 xf86CrtcDestroy (xf86CrtcPtr		crtc);
 
+
 /**
- * Change a crtc configuration (modes, outputs, etc)
+ * Sets the given video mode on the given crtc
  */
 
 extern _X_EXPORT Bool
-xf86CrtcSet (xf86CrtcPtr crtc, xf86CrtcSetRec *set);
+xf86CrtcSetModeTransform (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation,
+			  RRTransformPtr transform, int x, int y);
+
+extern _X_EXPORT Bool
+xf86CrtcSetMode (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation,
+		 int x, int y);
 
 extern _X_EXPORT void
 xf86CrtcSetOrigin (xf86CrtcPtr crtc, int x, int y);
diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
index d60ee3c..2fe0c47 100644
--- a/hw/xfree86/modes/xf86RandR12.c
+++ b/hw/xfree86/modes/xf86RandR12.c
@@ -1133,7 +1133,7 @@ xf86RandR12CrtcSet (ScreenPtr	    pScreen,
     xf86CrtcConfigPtr   config = XF86_CRTC_CONFIG_PTR(pScrn);
     xf86CrtcPtr		crtc = randr_crtc->devPrivate;
     RRTransformPtr	transform;
-    xf86CrtcSetFlags	flags = 0;
+    Bool		changed = FALSE;
     int			o, ro;
     xf86CrtcPtr		*save_crtcs;
     Bool		save_enabled = crtc->enabled;
@@ -1143,22 +1143,22 @@ xf86RandR12CrtcSet (ScreenPtr	    pScreen,
 
     save_crtcs = malloc(config->num_output * sizeof (xf86CrtcPtr));
     if ((randr_mode != NULL) != crtc->enabled)
-	flags |= XF86CrtcSetMode;
+	changed = TRUE;
     else if (randr_mode && !xf86RandRModeMatches (randr_mode, &crtc->mode))
-	flags |= XF86CrtcSetMode;
+	changed = TRUE;
     
     if (rotation != crtc->rotation)
-	flags |= XF86CrtcSetRotation;
+	changed = TRUE;
 
     transform = RRCrtcGetTransform (randr_crtc);
     if ((transform != NULL) != crtc->transformPresent)
-	flags |= XF86CrtcSetTransform;
+	changed = TRUE;
     else if (transform && memcmp (&transform->transform, &crtc->transform.transform,
 				  sizeof (transform->transform)) != 0)
-	flags |= XF86CrtcSetTransform;
+	changed = TRUE;
 
     if (x != crtc->x || y != crtc->y)
-	flags |= XF86CrtcSetOrigin;
+	changed = TRUE;
     for (o = 0; o < config->num_output; o++) 
     {
 	xf86OutputPtr  output = config->output[o];
@@ -1178,16 +1178,16 @@ xf86RandR12CrtcSet (ScreenPtr	    pScreen,
 	    }
 	if (new_crtc != output->crtc)
 	{
-	    flags |= XF86CrtcSetOutput;
+	    changed = TRUE;
 	    output->crtc = new_crtc;
 	}
     }
     for (ro = 0; ro < num_randr_outputs; ro++) 
         if (randr_outputs[ro]->pendingProperties)
-	    flags |= XF86CrtcSetProperty;
+	    changed = TRUE;
 
     /* XXX need device-independent mode setting code through an API */
-    if (flags)
+    if (changed)
     {
 	crtc->enabled = randr_mode != NULL;
 
@@ -1195,16 +1195,9 @@ xf86RandR12CrtcSet (ScreenPtr	    pScreen,
 	{
 	    DisplayModeRec  mode;
 	    RRTransformPtr  transform = RRCrtcGetTransform (randr_crtc);
-	    xf86CrtcSetRec  set;
 
 	    xf86RandRModeConvert (pScrn, randr_mode, &mode);
-	    set.mode = &mode;
-	    set.rotation = rotation;
-	    set.transform = transform;
-	    set.x = x;
-	    set.y = y;
-	    set.flags = flags;
-	    if (!xf86CrtcSet(crtc, &set))
+	    if (!xf86CrtcSetModeTransform (crtc, &mode, rotation, transform, x, y))
 	    {
 		crtc->enabled = save_enabled;
 		for (o = 0; o < config->num_output; o++)
commit 7030c82648930cea7ef8a2ea49d8138078920d4d
Author: Keith Packard <keithp at keithp.com>
Date:   Wed Feb 23 11:18:16 2011 -0800

    Revert "Require RandR protocol version 1.4 or newer"
    
    This reverts commit c8bc25fd7629df10f2825b7cc713b031ae78f223.

diff --git a/configure.ac b/configure.ac
index ac4bf8c..8858e86 100644
--- a/configure.ac
+++ b/configure.ac
@@ -788,7 +788,7 @@ WINDOWSWMPROTO="windowswmproto"
 APPLEWMPROTO="applewmproto >= 1.4"
 
 dnl Core modules for most extensions, et al.
-SDK_REQUIRED_MODULES="[xproto >= 7.0.17] [randrproto >= 1.4] [renderproto >= 0.11] [xextproto >= 7.1.99] [inputproto >= 1.9.99.902] [kbproto >= 1.0.3] fontsproto"
+SDK_REQUIRED_MODULES="[xproto >= 7.0.17] [randrproto >= 1.2.99.3] [renderproto >= 0.11] [xextproto >= 7.1.99] [inputproto >= 1.9.99.902] [kbproto >= 1.0.3] fontsproto"
 # Make SDK_REQUIRED_MODULES available for inclusion in xorg-server.pc
 AC_SUBST(SDK_REQUIRED_MODULES)
 
commit a91d33917befd6719bb7f01007bc253a2aefb0bb
Author: Keith Packard <keithp at keithp.com>
Date:   Wed Feb 23 11:18:12 2011 -0800

    Revert "randr: Add sprite position transforms"
    
    This reverts commit 66294afcab7b7a82f7dd897767e46c48a94b8ee8.

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index ecde199..54b8f4d 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -106,17 +106,12 @@ xf86CrtcCreate (ScrnInfoPtr		scrn,
     pixman_transform_init_identity (&crtc->crtc_to_framebuffer);
     pixman_f_transform_init_identity (&crtc->f_crtc_to_framebuffer);
     pixman_f_transform_init_identity (&crtc->f_framebuffer_to_crtc);
-    pixman_f_transform_init_identity (&crtc->f_screen_to_crtc);
-    pixman_f_transform_init_identity (&crtc->user_sprite_position_transform);
-    pixman_f_transform_init_identity (&crtc->f_crtc_to_cursor);
-    pixman_f_transform_init_identity (&crtc->user_sprite_image_transform);
     crtc->filter = NULL;
     crtc->params = NULL;
     crtc->nparams = 0;
     crtc->filter_width = 0;
     crtc->filter_height = 0;
     crtc->transform_in_use = FALSE;
-    crtc->sprite_transform_in_use = FALSE;
     crtc->transformPresent = FALSE;
     crtc->desiredTransformPresent = FALSE;
     memset (&crtc->bounds, '\0', sizeof (crtc->bounds));
diff --git a/hw/xfree86/modes/xf86Crtc.h b/hw/xfree86/modes/xf86Crtc.h
index 8b42efc..f43e0a7 100644
--- a/hw/xfree86/modes/xf86Crtc.h
+++ b/hw/xfree86/modes/xf86Crtc.h
@@ -345,7 +345,6 @@ struct _xf86Crtc {
     int		    filter_width; /* ABI 2 */
     int		    filter_height; /* ABI 2 */
     Bool	    transform_in_use;
-    Bool	    sprite_transform_in_use;
     RRTransformRec  transform; /* ABI 2 */
     Bool	    transformPresent; /* ABI 2 */
     RRTransformRec  desiredTransform; /* ABI 2 */
@@ -385,22 +384,6 @@ struct _xf86Crtc {
      * Clear the shadow
      */
     Bool	    shadowClear;
-
-    /**
-     * Sprite position transforms
-     */
-
-    /* Transform a screen coordinate to a crtc coordinate */
-    struct pixman_f_transform f_screen_to_crtc;
-
-    /* The user-specified portion of the screen to crtc conversion */
-    struct pixman_f_transform user_sprite_position_transform;
-
-    /* Transform a hardware cursor coordinate to a cursor coordinate */
-    struct pixman_f_transform f_crtc_to_cursor;
-
-    /* The user-specified portion of the cursor to hardware transform */
-    struct pixman_f_transform user_sprite_image_transform;
 };
 
 typedef struct _xf86OutputFuncs {
@@ -794,14 +777,6 @@ xf86CrtcSetOrigin (xf86CrtcPtr crtc, int x, int y);
 extern _X_EXPORT Bool
 xf86CrtcRotate (xf86CrtcPtr crtc);
 
-
-/*
- * Update cursor transform matrices after user changes
- * This is just the cursor subset of xf86CrtcRotate
- */
-extern _X_EXPORT void
-xf86CrtcRotateCursor (xf86CrtcPtr crtc);
-
 /*
  * Clean up any rotation data, used when a crtc is turned off
  * as well as when rotation is disabled.
diff --git a/hw/xfree86/modes/xf86Cursors.c b/hw/xfree86/modes/xf86Cursors.c
index 7b43bcb..0667447 100644
--- a/hw/xfree86/modes/xf86Cursors.c
+++ b/hw/xfree86/modes/xf86Cursors.c
@@ -338,7 +338,7 @@ xf86_crtc_set_cursor_position (xf86CrtcPtr crtc, int x, int y)
     /*
      * Transform position of cursor on screen
      */
-    if (crtc->sprite_transform_in_use)
+    if (crtc->transform_in_use)
     {
 	ScreenPtr	screen = scrn->pScreen;
 	xf86CursorScreenPtr ScreenPriv =
@@ -349,7 +349,7 @@ xf86_crtc_set_cursor_position (xf86CrtcPtr crtc, int x, int y)
 	v.v[0] = (x + ScreenPriv->HotX) + 0.5;
 	v.v[1] = (y + ScreenPriv->HotY) + 0.5;
 	v.v[2] = 1;
-	pixman_f_transform_point (&crtc->f_screen_to_crtc, &v);
+	pixman_f_transform_point (&crtc->f_framebuffer_to_crtc, &v);
 	/* cursor will have 0.5 added to it already so floor is sufficent */
 	x = floor (v.v[0]);
 	y = floor (v.v[1]);
diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
index bbf28cd..d60ee3c 100644
--- a/hw/xfree86/modes/xf86RandR12.c
+++ b/hw/xfree86/modes/xf86RandR12.c
@@ -180,14 +180,14 @@ xf86RandR13VerifyPanningArea (xf86CrtcPtr crtc, int screenWidth, int screenHeigh
  */
 
 static void
-xf86ComputeCrtcPan (Bool sprite_transform_in_use,
+xf86ComputeCrtcPan (Bool transform_in_use,
 		    struct pixman_f_transform *m,
 		    double screen_x, double screen_y,
 		    double crtc_x, double crtc_y,
 		    int old_pan_x, int old_pan_y,
 		    int *new_pan_x, int *new_pan_y)
 {
-    if (sprite_transform_in_use) {
+    if (transform_in_use) {
 	/*
 	 * Given the current transform, M, the current position
 	 * on the Screen, S, and the desired position on the CRTC,
@@ -374,8 +374,8 @@ xf86RandR13Pan (xf86CrtcPtr crtc, int x, int y)
 	c.v[0] = x;
 	c.v[1] = y;
 	c.v[2] = 1.0;
-	if (crtc->sprite_transform_in_use) {
-	    pixman_f_transform_point(&crtc->f_screen_to_crtc, &c);
+	if (crtc->transform_in_use) {
+	    pixman_f_transform_point(&crtc->f_framebuffer_to_crtc, &c);
 	} else {
 	    c.v[0] -= crtc->x;
 	    c.v[1] -= crtc->y;
@@ -402,8 +402,8 @@ xf86RandR13Pan (xf86CrtcPtr crtc, int x, int y)
 	    }
 	}
 	if (panned)
-	    xf86ComputeCrtcPan (crtc->sprite_transform_in_use,
-				&crtc->f_screen_to_crtc,
+	    xf86ComputeCrtcPan (crtc->transform_in_use,
+				&crtc->f_framebuffer_to_crtc,
 				x, y, c.v[0], c.v[1],
 				newX, newY, &newX, &newY);
     }
@@ -414,7 +414,7 @@ xf86RandR13Pan (xf86CrtcPtr crtc, int x, int y)
      * XXX This computation only works when we do not have a transform
      * in use.
      */
-    if (!crtc->sprite_transform_in_use)
+    if (!crtc->transform_in_use)
     {
 	/* Validate against [xy]1 after [xy]2, to be sure that results are > 0 for [xy]1 > 0 */
 	if (crtc->panningTotalArea.x2 > crtc->panningTotalArea.x1) {
@@ -1732,20 +1732,6 @@ xf86RandR12ChangeGamma(int scrnIndex, Gamma gamma)
     return Success;
 }
 
-static void
-xf86RandR14SetCrtcSpriteTransform(ScreenPtr		pScreen,
-				  RRCrtcPtr		randr_crtc,
-				  struct pixman_f_transform *f_position_transform,
-				  struct pixman_f_transform *f_image_transform)
-{
-    xf86CrtcPtr		crtc = randr_crtc->devPrivate;
-
-    crtc->user_sprite_position_transform = *f_position_transform;
-    crtc->user_sprite_image_transform = *f_image_transform;
-    xf86CrtcRotateCursor(crtc);
-    xf86_reload_cursors(pScreen);
-}
-
 static Bool
 xf86RandR12EnterVT (int screen_index, int flags)
 {
@@ -1754,7 +1740,6 @@ xf86RandR12EnterVT (int screen_index, int flags)
     XF86RandRInfoPtr randrp  = XF86RANDRINFO(pScreen);
     rrScrPrivPtr     rp = rrGetScrPriv(pScreen);
     Bool	     ret;
-    int i;
 
     if (randrp->orig_EnterVT) {
 	pScrn->EnterVT = randrp->orig_EnterVT;
@@ -1766,6 +1751,7 @@ xf86RandR12EnterVT (int screen_index, int flags)
     }
 
     /* reload gamma */
+    int i;
     for (i = 0; i < rp->numCrtcs; i++)
 	xf86RandR12CrtcSetGamma(pScreen, rp->crtcs[i]);
 
@@ -1796,7 +1782,6 @@ xf86RandR12Init12 (ScreenPtr pScreen)
     rp->rrSetConfig = NULL;
     pScrn->PointerMoved = xf86RandR12PointerMoved;
     pScrn->ChangeGamma = xf86RandR12ChangeGamma;
-    rp->rrSetCrtcSpriteTransform = xf86RandR14SetCrtcSpriteTransform;
 
     randrp->orig_EnterVT = pScrn->EnterVT;
     pScrn->EnterVT = xf86RandR12EnterVT;
diff --git a/hw/xfree86/modes/xf86Rotate.c b/hw/xfree86/modes/xf86Rotate.c
index ddc6d4c..57c3499 100644
--- a/hw/xfree86/modes/xf86Rotate.c
+++ b/hw/xfree86/modes/xf86Rotate.c
@@ -369,39 +369,6 @@ xf86CrtcFitsScreen (xf86CrtcPtr crtc, struct pict_f_transform *crtc_to_fb)
 	    0 <= b.y1 && b.y2 <= pScrn->virtualY);
 }
 
-/*
- * A subset of xf86CrtcRotate that just deals with
- * cursor image/position transforms. Used when changing
- * the cursor transform
- */
-void
-xf86CrtcRotateCursor (xf86CrtcPtr crtc)
-{
-    /* if this is called during ScreenInit() we don't have pScrn->pScreen yet */
-    RRTransformPtr	transform = NULL;
-    PictTransform	crtc_to_fb;
-    struct pict_f_transform f_crtc_to_fb, f_fb_to_crtc, f_screen_to_crtc, f_crtc_to_cursor;
-
-    if (crtc->transformPresent)
-	transform = &crtc->transform;
-
-    (void) RRTransformCompute (crtc->x, crtc->y,
-			       crtc->mode.HDisplay, crtc->mode.VDisplay,
-			       crtc->rotation,
-			       transform,
-			       &crtc->user_sprite_position_transform,
-			       &crtc->user_sprite_image_transform,
-
-			       &crtc_to_fb,
-			       &f_crtc_to_fb,
-			       &f_fb_to_crtc,
-			       &f_screen_to_crtc,
-			       &f_crtc_to_cursor,
-			       &crtc->sprite_transform_in_use);
-    crtc->f_screen_to_crtc = f_screen_to_crtc;
-    crtc->f_crtc_to_cursor = f_crtc_to_cursor;
-}
-
 Bool
 xf86CrtcRotate (xf86CrtcPtr crtc)
 {
@@ -410,7 +377,7 @@ xf86CrtcRotate (xf86CrtcPtr crtc)
     /* if this is called during ScreenInit() we don't have pScrn->pScreen yet */
     ScreenPtr		pScreen = screenInfo.screens[pScrn->scrnIndex];
     PictTransform	crtc_to_fb;
-    struct pict_f_transform f_crtc_to_fb, f_fb_to_crtc, f_screen_to_crtc, f_crtc_to_cursor;
+    struct pict_f_transform f_crtc_to_fb, f_fb_to_crtc;
     xFixed		*new_params = NULL;
     int			new_nparams = 0;
     PictFilterPtr	new_filter = NULL;
@@ -426,15 +393,10 @@ xf86CrtcRotate (xf86CrtcPtr crtc)
 			     crtc->mode.HDisplay, crtc->mode.VDisplay,
 			     crtc->rotation,
 			     transform,
-			     &crtc->user_sprite_position_transform,
-			     &crtc->user_sprite_image_transform,
 
 			     &crtc_to_fb,
 			     &f_crtc_to_fb,
-			     &f_fb_to_crtc,
-			     &f_screen_to_crtc,
-			     &f_crtc_to_cursor,
-			     &crtc->sprite_transform_in_use) &&
+			     &f_fb_to_crtc) &&
 	xf86CrtcFitsScreen (crtc, &f_crtc_to_fb))
     {
 	/*
@@ -543,8 +505,6 @@ xf86CrtcRotate (xf86CrtcPtr crtc)
     crtc->crtc_to_framebuffer = crtc_to_fb;
     crtc->f_crtc_to_framebuffer = f_crtc_to_fb;
     crtc->f_framebuffer_to_crtc = f_fb_to_crtc;
-    crtc->f_screen_to_crtc = f_screen_to_crtc;
-    crtc->f_crtc_to_cursor = f_crtc_to_cursor;
     free(crtc->params);
     crtc->params = new_params;
     crtc->nparams = new_nparams;
diff --git a/randr/Makefile.am b/randr/Makefile.am
index 4b38e52..de338b9 100644
--- a/randr/Makefile.am
+++ b/randr/Makefile.am
@@ -20,7 +20,6 @@ librandr_la_SOURCES =	\
 	rrproperty.c	\
 	rrscreen.c	\
 	rrsdispatch.c	\
-	rrsprite.c	\
 	rrtransform.h	\
 	rrtransform.c
 
diff --git a/randr/randrstr.h b/randr/randrstr.h
index 5e2a351..7ea6080 100644
--- a/randr/randrstr.h
+++ b/randr/randrstr.h
@@ -55,10 +55,9 @@
 #define RANDR_10_INTERFACE 1
 #define RANDR_12_INTERFACE 1
 #define RANDR_13_INTERFACE 1 /* requires RANDR_12_INTERFACE */
-#define RANDR_14_INTERFACE 1 /* requires RANDR_13_INTERFACE */
 #define RANDR_GET_CRTC_INTERFACE 1
 
-#define RANDR_INTERFACE_VERSION 0x0104
+#define RANDR_INTERFACE_VERSION 0x0103
 
 typedef XID	RRMode;
 typedef XID	RROutput;
@@ -123,16 +122,9 @@ struct _rrCrtc {
     Bool	    transforms;
     RRTransformRec  client_pending_transform;
     RRTransformRec  client_current_transform;
-    PictTransform   client_sprite_position_transform;
-    PictTransform   client_sprite_image_transform;
-    struct pict_f_transform	client_sprite_f_position_transform;
-    struct pict_f_transform	client_sprite_f_image_transform;
-
     PictTransform   transform;
     struct pict_f_transform f_transform;
     struct pict_f_transform f_inverse;
-    struct pict_f_transform f_sprite_position;		/* crtc from screen */
-    struct pict_f_transform f_sprite_image_inverse;	/* image from crtc */
 };
 
 struct _rrOutput {
@@ -241,16 +233,6 @@ typedef Bool (*RRSetConfigProcPtr) (ScreenPtr		pScreen,
 #endif
 	
 
-typedef void (*RRSetCrtcSpriteTransformPtr) (ScreenPtr pScreen,
-					     RRCrtcPtr randr_crtc,
-					     struct pict_f_transform *position_transform,
-					     struct pict_f_transform *image_transform);
-
-typedef void (*RRGetCrtcSpriteTransformPtr) (ScreenPtr pScreen,
-					     RRCrtcPtr randr_crtc,
-					     struct pict_f_transform *position_transform,
-					     struct pict_f_transform *image_transform);
-
 typedef struct _rrScrPriv {
     /*
      * 'public' part of the structure; DDXen fill this in
@@ -274,9 +256,7 @@ typedef struct _rrScrPriv {
     RRGetPanningProcPtr	rrGetPanning;
     RRSetPanningProcPtr	rrSetPanning;
 #endif
-    RRSetCrtcSpriteTransformPtr	rrSetCrtcSpriteTransform;
-    RRGetCrtcSpriteTransformPtr	rrGetCrtcSpriteTransform;
-
+    
     /*
      * Private part of the structure; not considered part of the ABI
      */
@@ -626,6 +606,25 @@ extern _X_EXPORT void
 RRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height);
 
 /*
+ * Compute the complete transformation matrix including
+ * client-specified transform, rotation/reflection values and the crtc 
+ * offset.
+ *
+ * Return TRUE if the resulting transform is not a simple translation.
+ */
+extern _X_EXPORT Bool
+RRTransformCompute (int			    x,
+		    int			    y,
+		    int			    width,
+		    int			    height,
+		    Rotation		    rotation,
+		    RRTransformPtr	    rr_transform,
+
+		    PictTransformPtr	    transform,
+		    struct pict_f_transform *f_transform,
+		    struct pict_f_transform *f_inverse);
+
+/*
  * Return crtc transform
  */
 extern _X_EXPORT RRTransformPtr
@@ -701,19 +700,6 @@ ProcRRGetPanning (ClientPtr client);
 int
 ProcRRSetPanning (ClientPtr client);
 
-void
-RRCrtcSpriteTransformSet(RRCrtcPtr crtc,
-			 PictTransform *position_transform,
-			 PictTransform *image_transform,
-			 struct pict_f_transform *f_position_transform,
-			 struct pict_f_transform *f_image_transform);
-
-int
-ProcRRSetCrtcSpriteTransform (ClientPtr client);
-
-int
-ProcRRGetCrtcSpriteTransform (ClientPtr client);
-
 /* rrdispatch.c */
 extern _X_EXPORT Bool
 RRClientKnowsRates (ClientPtr	pClient);
@@ -903,13 +889,6 @@ ProcRRConfigureOutputProperty (ClientPtr client);
 extern _X_EXPORT int
 ProcRRDeleteOutputProperty (ClientPtr client);
 
-/* rrsprite.c */
-extern _X_EXPORT int
-ProcRRSetCrtcSpriteTransform (ClientPtr client);
-
-extern _X_EXPORT int
-ProcRRGetCrtcSpriteTransform (ClientPtr client);
-
 /* rrxinerama.c */
 #ifdef XINERAMA
 extern _X_EXPORT void
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index c2f6963..98206a2 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -93,8 +93,6 @@ RRCrtcCreate (ScreenPtr pScreen, void *devPrivate)
     pixman_transform_init_identity (&crtc->transform);
     pixman_f_transform_init_identity (&crtc->f_transform);
     pixman_f_transform_init_identity (&crtc->f_inverse);
-    pixman_f_transform_init_identity (&crtc->f_sprite_position);
-    pixman_f_transform_init_identity (&crtc->f_sprite_image_inverse);
 
     if (!AddResource (crtc->id, RRCrtcType, (pointer) crtc))
 	return NULL;
@@ -233,21 +231,15 @@ RRCrtcNotify (RRCrtcPtr	    crtc,
 	RRTransformCopy (&crtc->client_current_transform, transform);
 	RRCrtcChanged (crtc, TRUE);
     }
-
     if (crtc->changed && mode)
     {
 	RRTransformCompute (x, y,
 			    mode->mode.width, mode->mode.height,
 			    rotation,
 			    &crtc->client_current_transform,
-			    &crtc->client_sprite_f_position_transform,
-			    &crtc->client_sprite_f_image_transform,
 			    &crtc->transform, &crtc->f_transform,
-			    &crtc->f_inverse, &crtc->f_sprite_position,
-			    &crtc->f_sprite_image_inverse,
-			    NULL);
+			    &crtc->f_inverse);
     }
-
     return TRUE;
 }
 
@@ -519,7 +511,7 @@ RRCrtcGammaNotify (RRCrtcPtr	crtc)
 }
 
 static void
-RRModeGetScanoutSize (RRModePtr mode, struct pixman_f_transform *transform,
+RRModeGetScanoutSize (RRModePtr mode, PictTransformPtr transform,
 		      int *width, int *height)
 {
     BoxRec  box;
@@ -535,7 +527,7 @@ RRModeGetScanoutSize (RRModePtr mode, struct pixman_f_transform *transform,
     box.x2 = mode->mode.width;
     box.y2 = mode->mode.height;
 
-    pixman_f_transform_bounds (transform, &box);
+    pixman_transform_bounds (transform, &box);
     *width = box.x2 - box.x1;
     *height = box.y2 - box.y1;
 }
@@ -546,7 +538,7 @@ RRModeGetScanoutSize (RRModePtr mode, struct pixman_f_transform *transform,
 void
 RRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height)
 {
-    RRModeGetScanoutSize (crtc->mode, &crtc->f_transform, width, height);
+    return RRModeGetScanoutSize (crtc->mode, &crtc->transform, width, height);
 }
 
 /*
@@ -932,12 +924,9 @@ ProcRRSetCrtcConfig (ClientPtr client)
 				mode->mode.width, mode->mode.height,
 				rotation,
 				&crtc->client_pending_transform,
-				&crtc->client_sprite_f_position_transform,
-				&crtc->client_sprite_f_image_transform,
-				&transform, &f_transform, &f_inverse, NULL, NULL, NULL);
+				&transform, &f_transform, &f_inverse);
 
-	    RRModeGetScanoutSize (mode, &f_transform,
-				  &source_width, &source_height);
+	    RRModeGetScanoutSize (mode, &transform, &source_width, &source_height);
 	    if (stuff->x + source_width > pScreen->width)
 	    {
 		client->errorValue = stuff->x;
diff --git a/randr/rrsprite.c b/randr/rrsprite.c
deleted file mode 100644
index 5bf312c..0000000
--- a/randr/rrsprite.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright © 2010 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of the copyright holders not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  The copyright holders make no representations
- * about the suitability of this software for any purpose.  It is provided "as
- * is" without express or implied warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- */
-
-#include "randrstr.h"
-#include "swaprep.h"
-
-void
-RRCrtcSpriteTransformSet(RRCrtcPtr crtc,
-			 PictTransform *position_transform,
-			 PictTransform *image_transform,
-			 struct pict_f_transform *f_position_transform,
-			 struct pict_f_transform *f_image_transform)
-{
-    ScreenPtr			pScreen;
-    rrScrPrivPtr		pScrPriv;
-
-    pScreen = crtc->pScreen;
-    pScrPriv = rrGetScrPriv(pScreen);
-    crtc->client_sprite_position_transform = *position_transform;
-    crtc->client_sprite_image_transform = *image_transform;
-    crtc->client_sprite_f_position_transform = *f_position_transform;
-    crtc->client_sprite_f_image_transform = *f_image_transform;
-    if (pScrPriv->rrSetCrtcSpriteTransform)
-	(*pScrPriv->rrSetCrtcSpriteTransform) (pScreen, crtc,
-					       &crtc->client_sprite_f_position_transform,
-					       &crtc->client_sprite_f_image_transform);
-}
-
-int
-ProcRRSetCrtcSpriteTransform (ClientPtr client)
-{
-    REQUEST(xRRSetCrtcSpriteTransformReq);
-    RRCrtcPtr		    crtc;
-    PictTransform	    position_transform, image_transform;
-    struct pixman_f_transform f_position_transform, f_image_transform;
-
-    REQUEST_AT_LEAST_SIZE(xRRSetCrtcSpriteTransformReq);
-    VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess);
-
-    PictTransform_from_xRenderTransform (&position_transform, &stuff->positionTransform);
-    PictTransform_from_xRenderTransform (&image_transform, &stuff->imageTransform);
-    pixman_f_transform_from_pixman_transform (&f_position_transform, &position_transform);
-    pixman_f_transform_from_pixman_transform (&f_image_transform, &image_transform);
-
-    RRCrtcSpriteTransformSet (crtc, &position_transform, &image_transform,
-			      &f_position_transform, &f_image_transform);
-    return Success;
-}
-
-#define CrtcSpriteTransformExtra	(SIZEOF(xRRGetCrtcSpriteTransformReply) - 32)
-
-int
-ProcRRGetCrtcSpriteTransform (ClientPtr client)
-{
-    REQUEST(xRRGetCrtcSpriteTransformReq);
-    xRRGetCrtcSpriteTransformReply	*reply;
-    RRCrtcPtr			crtc;
-    int				n;
-    char			*extra;
-
-    REQUEST_SIZE_MATCH (xRRGetCrtcSpriteTransformReq);
-    VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess);
-
-    reply = malloc(sizeof (xRRGetCrtcSpriteTransformReply));
-    if (!reply)
-	return BadAlloc;
-
-    extra = (char *) (reply + 1);
-    reply->type = X_Reply;
-    reply->sequenceNumber = client->sequence;
-    reply->length = bytes_to_int32(CrtcSpriteTransformExtra);
-
-    xRenderTransform_from_PictTransform(&reply->positionTransform, &crtc->client_sprite_position_transform);
-    xRenderTransform_from_PictTransform(&reply->imageTransform, &crtc->client_sprite_image_transform);
-
-    if (client->swapped) {
-	swaps (&reply->sequenceNumber, n);
-	swapl (&reply->length, n);
-	SwapLongs((CARD32 *) &reply->positionTransform, bytes_to_int32(sizeof(xRenderTransform)));
-	SwapLongs((CARD32 *) &reply->imageTransform, bytes_to_int32(sizeof(xRenderTransform)));
-    }
-    WriteToClient (client, sizeof (xRRGetCrtcSpriteTransformReply), (char *) reply);
-    free(reply);
-    return Success;
-}
diff --git a/randr/rrtransform.c b/randr/rrtransform.c
index 3eda5f3..e162049 100644
--- a/randr/rrtransform.c
+++ b/randr/rrtransform.c
@@ -134,24 +134,6 @@ RRTransformRescale(struct pixman_f_transform *f_transform, double limit)
 	    f_transform->m[j][i] *= scale;
 }
 
-#define EPSILON (1e-20)
-#define IS_F_SAME(a,b)	(fabs((a)-(b)) < EPSILON)
-#define IS_F_ZERO(a)	(fabs(a) < EPSILON)
-
-static Bool
-pict_f_transform_is_identity (const struct pixman_f_transform *t)
-{
-    return (IS_F_SAME (t->m[0][0], t->m[1][1]) &&
-	    IS_F_SAME (t->m[0][0], t->m[2][2]) &&
-	    !IS_F_ZERO (t->m[0][0]) &&
-	    IS_F_ZERO (t->m[0][1]) &&
-	    IS_F_ZERO (t->m[0][2]) &&
-	    IS_F_ZERO (t->m[1][0]) &&
-	    IS_F_ZERO (t->m[1][2]) &&
-	    IS_F_ZERO (t->m[2][0]) &&
-	    IS_F_ZERO (t->m[2][1]));
-}
-
 /*
  * Compute the complete transformation matrix including
  * client-specified transform, rotation/reflection values and the crtc 
@@ -166,39 +148,23 @@ RRTransformCompute (int			    x,
 		    int			    height,
 		    Rotation		    rotation,
 		    RRTransformPtr	    rr_transform,
-		    struct pixman_f_transform *sprite_position_transform,
-		    struct pixman_f_transform *sprite_image_transform,
 
 		    PictTransformPtr	    transform,
 		    struct pixman_f_transform *f_transform,
-		    struct pixman_f_transform *f_inverse,
-		    struct pixman_f_transform *f_fb_to_sprite,
-		    struct pixman_f_transform *f_sprite_to_image,
-		    Bool		      *sprite_transform_in_use)
+		    struct pixman_f_transform *f_inverse)
 {
     PictTransform	    t_transform, inverse;
     struct pixman_f_transform tf_transform, tf_inverse;
-    struct pixman_f_transform sf_position_transform, sf_image_transform;
-    struct pixman_f_transform f_image_to_sprite;
     Bool		    overflow = FALSE;
-    Bool		    ret = TRUE;
 
     if (!transform) transform = &t_transform;
     if (!f_transform) f_transform = &tf_transform;
     if (!f_inverse) f_inverse = &tf_inverse;
-    if (!f_fb_to_sprite) f_fb_to_sprite = &sf_position_transform;
-    if (!f_sprite_to_image) f_sprite_to_image = &sf_image_transform;
-
-    /* invert the sprite image transform to have it go from dest to source */
-    if (!pixman_f_transform_invert (&f_image_to_sprite, f_sprite_to_image))
-	pixman_f_transform_init_identity(&f_image_to_sprite);
 
     pixman_transform_init_identity (transform);
     pixman_transform_init_identity (&inverse);
     pixman_f_transform_init_identity (f_transform);
     pixman_f_transform_init_identity (f_inverse);
-    pixman_f_transform_init_identity (f_fb_to_sprite);
-    pixman_f_transform_init_identity (f_sprite_to_image);
     if (rotation != RR_Rotate_0)
     {
 	double	f_rot_cos, f_rot_sin, f_rot_dx, f_rot_dy;
@@ -280,14 +246,7 @@ RRTransformCompute (int			    x,
 	pixman_f_transform_translate (f_transform, f_inverse, f_scale_dx, f_scale_dy);
     }
     
-    /*
-     * Sprite position is affected by the transform matrix,
-     * but the image is not
-     */
-    pixman_f_transform_multiply(f_sprite_to_image,
-				f_transform,
-				&f_image_to_sprite);
-
+#ifdef RANDR_12_INTERFACE
     if (rr_transform)
     {
         if (!pixman_transform_multiply (transform, &rr_transform->transform, transform))
@@ -295,7 +254,7 @@ RRTransformCompute (int			    x,
 	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
     /*
      * Compute the class of the resulting transform
      */
@@ -305,7 +264,7 @@ RRTransformCompute (int			    x,
 
 	pixman_f_transform_init_translate (f_transform,  x,  y);
 	pixman_f_transform_init_translate (f_inverse,   -x, -y);
-	ret = FALSE;
+	return FALSE;
     }
     else
     {
@@ -319,19 +278,6 @@ RRTransformCompute (int			    x,
 	    RRTransformRescale(&f_scaled, 16384.0);
 	    pixman_transform_from_pixman_f_transform(transform, &f_scaled);
 	}
-	ret = TRUE;
+	return TRUE;
     }
-
-    /*
-     * Sprite position is affected by the transform matrix,
-     * but the image is not
-     */
-    pixman_f_transform_multiply(f_fb_to_sprite,
-				f_inverse,
-				sprite_position_transform);
-    if (sprite_transform_in_use)
-	*sprite_transform_in_use = ret || !pict_f_transform_is_identity(f_fb_to_sprite);
-    return ret;
 }
-
-
diff --git a/randr/rrtransform.h b/randr/rrtransform.h
index 5cfcf8d..561762d 100644
--- a/randr/rrtransform.h
+++ b/randr/rrtransform.h
@@ -59,13 +59,6 @@ RRTransformSetFilter (RRTransformPtr	dst,
 extern _X_EXPORT Bool
 RRTransformCopy (RRTransformPtr dst, RRTransformPtr src);
 
-/*
- * Compute the complete transformation matrix including
- * client-specified transform, rotation/reflection values and the crtc
- * offset.
- *
- * Return TRUE if the resulting transform is not a simple translation.
- */
 extern _X_EXPORT Bool
 RRTransformCompute (int			    x,
 		    int			    y,
@@ -73,14 +66,10 @@ RRTransformCompute (int			    x,
 		    int			    height,
 		    Rotation		    rotation,
 		    RRTransformPtr	    rr_transform,
-		    struct pict_f_transform *sprite_position_transform,
-		    struct pict_f_transform *sprite_image_transform,
 
 		    PictTransformPtr	    transform,
 		    struct pict_f_transform *f_transform,
-		    struct pict_f_transform *f_inverse,
-		    struct pict_f_transform *f_fb_to_sprite,
-		    struct pict_f_transform *f_sprite_to_image,
-		    Bool		    *sprite_transform_in_use);
+		    struct pict_f_transform *f_inverse);
+
 
 #endif /* _RRTRANSFORM_H_ */
commit 3d4ee25a1e2e0ed2463ceaabea8f5a284a6ddd60
Author: Keith Packard <keithp at keithp.com>
Date:   Wed Feb 23 11:18:08 2011 -0800

    Revert "randr: Implement RRSetCrtcConfigs"
    
    This reverts commit d94a035ea9eb3167fc4f35b2d9f0d53f8807014c.

diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
index ac58135..bbf28cd 100644
--- a/hw/xfree86/modes/xf86RandR12.c
+++ b/hw/xfree86/modes/xf86RandR12.c
@@ -1797,7 +1797,6 @@ xf86RandR12Init12 (ScreenPtr pScreen)
     pScrn->PointerMoved = xf86RandR12PointerMoved;
     pScrn->ChangeGamma = xf86RandR12ChangeGamma;
     rp->rrSetCrtcSpriteTransform = xf86RandR14SetCrtcSpriteTransform;
-    rp->rrSetCrtcConfigs = miRRSetCrtcConfigs;
 
     randrp->orig_EnterVT = pScrn->EnterVT;
     pScrn->EnterVT = xf86RandR12EnterVT;
diff --git a/randr/Makefile.am b/randr/Makefile.am
index a1c88dc..4b38e52 100644
--- a/randr/Makefile.am
+++ b/randr/Makefile.am
@@ -22,9 +22,7 @@ librandr_la_SOURCES =	\
 	rrsdispatch.c	\
 	rrsprite.c	\
 	rrtransform.h	\
-	rrtransform.c	\
-	mirrcrtc.c
-
+	rrtransform.c
 
 if XINERAMA
 librandr_la_SOURCES += ${XINERAMA_SRCS}
diff --git a/randr/mirrcrtc.c b/randr/mirrcrtc.c
deleted file mode 100644
index b1e2c9f..0000000
--- a/randr/mirrcrtc.c
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright © 2010 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of the copyright holders not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  The copyright holders make no representations
- * about the suitability of this software for any purpose.  It is provided "as
- * is" without express or implied warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- */
-
-#include "randrstr.h"
-
-Bool
-miRRSetScreenConfig(ScreenPtr screen,
-		    RRScreenConfigPtr screen_config)
-{
-    RRScreenConfigRec	old_screen_config;
-
-    /* XXX deal with separate pixmap/screen sizes */
-    if (screen_config->screen_pixmap_width != screen_config->screen_width ||
-	screen_config->screen_pixmap_height != screen_config->screen_height)
-	return FALSE;
-
-    RRScreenCurrentConfig(screen, &old_screen_config);
-
-    /* Check and see if nothing has changed */
-    if (old_screen_config.screen_width == screen_config->screen_width &&
-	old_screen_config.screen_height == screen_config->screen_height &&
-	old_screen_config.screen_pixmap_width == screen_config->screen_pixmap_width &&
-	old_screen_config.screen_pixmap_height == screen_config->screen_pixmap_height &&
-	old_screen_config.mm_width == screen_config->mm_width &&
-	old_screen_config.mm_height == screen_config->mm_height)
-	return TRUE;
-
-    return RRScreenSizeSet(screen,
-			   screen_config->screen_width,
-			   screen_config->screen_height,
-			   screen_config->mm_width,
-			   screen_config->mm_height);
-}
-
-Bool
-miRRSetCrtcConfig(RRCrtcConfigPtr crtc_config)
-{
-    int	x = crtc_config->x, y = crtc_config->y;
-
-    if (crtc_config->pixmap) {
-	x = crtc_config->pixmap_x;
-	y = crtc_config->pixmap_y;
-    }
-    return RRCrtcSet(crtc_config->crtc,
-		     crtc_config->mode,
-		     x,
-		     y,
-		     crtc_config->rotation,
-		     crtc_config->numOutputs,
-		     crtc_config->outputs);
-}
-
-Bool
-miRRDisableCrtc(RRCrtcPtr crtc)
-{
-    RRCrtcConfigRec	off_config;
-
-    memset(&off_config, '\0', sizeof (RRCrtcConfigRec));
-    off_config.crtc = crtc;
-    return miRRSetCrtcConfig(&off_config);
-}
-
-/*
- * If the current crtc configuration doesn't fit
- * with the new screen config, disable it
- */
-Bool
-miRRCheckDisableCrtc(RRScreenConfigPtr new_screen_config,
-		     RRCrtcConfigPtr old_crtc_config)
-{
-    RRCrtcPtr crtc = old_crtc_config->crtc;
-
-    /* If it's already disabled, we're done */
-    if (!old_crtc_config->mode)
-	return TRUE;
-
-    /* If the crtc isn't scanning from the screen pixmap,
-     * we're done
-     */
-    if (old_crtc_config->pixmap)
-	return TRUE;
-
-    /* If the new screen configuration covers the existing CRTC space,
-     * we're done
-     */
-    if (RRScreenCoversCrtc(new_screen_config, old_crtc_config,
-			   &crtc->client_current_transform, NULL))
-	return TRUE;
-
-    /* Disable the crtc and let it get re-enabled */
-    return miRRDisableCrtc(crtc);
-}
-
-Bool
-miRRSetCrtcConfigs(ScreenPtr screen,
-		   RRScreenConfigPtr screen_config,
-		   RRCrtcConfigPtr crtc_configs,
-		   int num_configs)
-{
-    RRScreenConfigRec	old_screen_config;
-    RRCrtcConfigPtr	old_crtc_configs;
-    int			i;
-
-    /*
-     * Save existing state
-     */
-
-    RRScreenCurrentConfig(screen, &old_screen_config);
-    old_crtc_configs = calloc(num_configs, sizeof (RRCrtcConfigRec));
-    if (!old_crtc_configs)
-	return FALSE;
-
-    for (i = 0; i < num_configs; i++)
-	if (!RRCrtcCurrentConfig(crtc_configs[i].crtc, &old_crtc_configs[i]))
-	    goto fail_save;
-    /*
-     * Set the new configuration. If anything goes wrong,
-     * bail and restore the old configuration
-     */
-    for (i = 0; i < num_configs; i++)
-	if (!miRRCheckDisableCrtc(screen_config, &old_crtc_configs[i]))
-	    goto fail_disable;
-
-    if (!miRRSetScreenConfig(screen, screen_config))
-	goto fail_set_screen;
-
-    for (i = 0; i < num_configs; i++)
-	if (!miRRSetCrtcConfig(&crtc_configs[i]))
-	    goto fail_set_crtc;
-
-    RRFreeCrtcConfigs(old_crtc_configs, num_configs);
-    return TRUE;
-
-fail_set_crtc:
-    /*
-     * Restore the previous configuration. Ignore any errors
-     * as we just need to hope that the driver can manage to
-     * get back to the previous state without trouble.
-     */
-    for (i = 0; i < num_configs; i++)
-	(void) miRRDisableCrtc(old_crtc_configs[i].crtc);
-    (void) miRRSetScreenConfig(screen, &old_screen_config);
-fail_set_screen:
-fail_disable:
-    for (i = 0; i < num_configs; i++)
-	(void) miRRSetCrtcConfig(&old_crtc_configs[i]);
-fail_save:
-    RRFreeCrtcConfigs(old_crtc_configs, num_configs);
-    return FALSE;
-}
diff --git a/randr/randrstr.h b/randr/randrstr.h
index 2fe9602..5e2a351 100644
--- a/randr/randrstr.h
+++ b/randr/randrstr.h
@@ -78,8 +78,6 @@ typedef struct _rrMode		RRModeRec, *RRModePtr;
 typedef struct _rrPropertyValue	RRPropertyValueRec, *RRPropertyValuePtr;
 typedef struct _rrProperty	RRPropertyRec, *RRPropertyPtr;
 typedef struct _rrCrtc		RRCrtcRec, *RRCrtcPtr;
-typedef struct _rrScreenConfig	RRScreenConfigRec, *RRScreenConfigPtr;
-typedef struct _rrCrtcConfig	RRCrtcConfigRec, *RRCrtcConfigPtr;
 typedef struct _rrOutput	RROutputRec, *RROutputPtr;
 
 struct _rrMode {
@@ -137,28 +135,6 @@ struct _rrCrtc {
     struct pict_f_transform f_sprite_image_inverse;	/* image from crtc */
 };
 
-struct _rrScreenConfig {
-    CARD16			screen_pixmap_width;
-    CARD16			screen_pixmap_height;
-    CARD16			screen_width;
-    CARD16			screen_height;
-    CARD32			mm_width;
-    CARD32			mm_height;
-};
-
-struct _rrCrtcConfig {
-    RRCrtcPtr			crtc;
-    int				x, y;
-    RRModePtr			mode;
-    Rotation			rotation;
-    int				numOutputs;
-    RROutputPtr			*outputs;
-    struct pict_f_transform	sprite_position_transform;
-    struct pict_f_transform	sprite_image_transform;
-    PixmapPtr			pixmap;
-    int				pixmap_x, pixmap_y;
-};
-
 struct _rrOutput {
     RROutput	    id;
     ScreenPtr	    pScreen;
@@ -275,11 +251,6 @@ typedef void (*RRGetCrtcSpriteTransformPtr) (ScreenPtr pScreen,
 					     struct pict_f_transform *position_transform,
 					     struct pict_f_transform *image_transform);
 
-typedef Bool (*RRSetCrtcConfigsPtr) (ScreenPtr screen,
-				     RRScreenConfigPtr screen_config,
-				     RRCrtcConfigPtr crtc_configs,
-				     int num_configs);
-
 typedef struct _rrScrPriv {
     /*
      * 'public' part of the structure; DDXen fill this in
@@ -305,7 +276,6 @@ typedef struct _rrScrPriv {
 #endif
     RRSetCrtcSpriteTransformPtr	rrSetCrtcSpriteTransform;
     RRGetCrtcSpriteTransformPtr	rrGetCrtcSpriteTransform;
-    RRSetCrtcConfigsPtr rrSetCrtcConfigs;
 
     /*
      * Private part of the structure; not considered part of the ABI
@@ -458,10 +428,6 @@ RRScreenSizeSet (ScreenPtr  pScreen,
 		 CARD32	    mmWidth,
 		 CARD32	    mmHeight);
 
-extern _X_EXPORT void
-RRScreenCurrentConfig(ScreenPtr screen,
-		      RRScreenConfigPtr screen_config);
-
 /*
  * Send ConfigureNotify event to root window when 'something' happens
  */
@@ -705,38 +671,6 @@ extern _X_EXPORT void
 RRCrtcInitErrorValue (void);
 
 /*
- * Free a set of crtc configs and their attached output arrays
- */
-void
-RRFreeCrtcConfigs(RRCrtcConfigPtr configs, int num_configs);
-
-/*
- * Convert the current crtc configuration into an RRCrtcConfig
- */
-extern _X_EXPORT Bool
-RRCrtcCurrentConfig(RRCrtcPtr crtc,
-		    RRCrtcConfigPtr crtc_config);
-
-/*
- * Figure out whether the specific crtc_config can fit
- * within the screen_config
- */
-Bool
-RRScreenCoversCrtc(RRScreenConfigPtr screen_config,
-		   RRCrtcConfigPtr crtc_config,
-		   RRTransformPtr client_transform,
-		   XID *errorValue);
-
-/*
- * Set a screen and set of crtc configurations in one operation
- */
-Bool
-RRSetCrtcConfigs(ScreenPtr screen,
-		 RRScreenConfigPtr screen_config,
-		 RRCrtcConfigPtr crtc_configs,
-		 int num_configs);
-
-/*
  * Crtc dispatch
  */
 
@@ -761,9 +695,6 @@ ProcRRSetCrtcTransform (ClientPtr client);
 extern _X_EXPORT int
 ProcRRGetCrtcTransform (ClientPtr client);
 
-extern _X_EXPORT int
-ProcRRSetCrtcConfigs (ClientPtr client);
-
 int
 ProcRRGetPanning (ClientPtr client);
 
@@ -985,27 +916,6 @@ extern _X_EXPORT void
 RRXineramaExtensionInit(void);
 #endif
 
-/* mirrcrtc.c */
-Bool
-miRRSetScreenConfig(ScreenPtr screen,
-		    RRScreenConfigPtr screen_config);
-
-Bool
-miRRSetCrtcConfig(RRCrtcConfigPtr crtc_config);
-
-Bool
-miRRDisableCrtc(RRCrtcPtr crtc);
-
-Bool
-miRRCheckDisableCrtc(RRScreenConfigPtr new_screen_config,
-		     RRCrtcConfigPtr old_crtc_config);
-
-Bool
-miRRSetCrtcConfigs(ScreenPtr screen,
-		   RRScreenConfigPtr screen_config,
-		   RRCrtcConfigPtr crtc_configs,
-		   int num_configs);
-
 #endif /* _RANDRSTR_H_ */
 
 /*
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index 1f8f2e6..c2f6963 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -37,7 +37,7 @@ RRCrtcChanged (RRCrtcPtr crtc, Bool layoutChanged)
     if (pScreen)
     {
 	rrScrPriv(pScreen);
-
+    
 	pScrPriv->changed = TRUE;
 	/*
 	 * Send ConfigureNotify on any layout change
@@ -59,19 +59,19 @@ RRCrtcCreate (ScreenPtr pScreen, void *devPrivate)
 
     if (!RRInit())
 	return NULL;
-
+    
     pScrPriv = rrGetScrPriv(pScreen);
 
     /* make space for the crtc pointer */
     if (pScrPriv->numCrtcs)
-	crtcs = realloc(pScrPriv->crtcs,
+	crtcs = realloc(pScrPriv->crtcs, 
 			  (pScrPriv->numCrtcs + 1) * sizeof (RRCrtcPtr));
     else
 	crtcs = malloc(sizeof (RRCrtcPtr));
     if (!crtcs)
 	return FALSE;
     pScrPriv->crtcs = crtcs;
-
+    
     crtc = calloc(1, sizeof (RRCrtcRec));
     if (!crtc)
 	return NULL;
@@ -90,8 +90,6 @@ RRCrtcCreate (ScreenPtr pScreen, void *devPrivate)
     crtc->devPrivate = devPrivate;
     RRTransformInit (&crtc->client_pending_transform);
     RRTransformInit (&crtc->client_current_transform);
-    pixman_transform_init_identity (&crtc->client_sprite_position_transform);
-    pixman_transform_init_identity (&crtc->client_sprite_image_transform);
     pixman_transform_init_identity (&crtc->transform);
     pixman_f_transform_init_identity (&crtc->f_transform);
     pixman_f_transform_init_identity (&crtc->f_inverse);
@@ -104,7 +102,7 @@ RRCrtcCreate (ScreenPtr pScreen, void *devPrivate)
     /* attach the screen and crtc together */
     crtc->pScreen = pScreen;
     pScrPriv->crtcs[pScrPriv->numCrtcs++] = crtc;
-
+    
     return crtc;
 }
 
@@ -141,7 +139,7 @@ RRCrtcNotify (RRCrtcPtr	    crtc,
 	      RROutputPtr   *outputs)
 {
     int	    i, j;
-
+    
     /*
      * Check to see if any of the new outputs were
      * not in the old list and mark them as changed
@@ -181,7 +179,7 @@ RRCrtcNotify (RRCrtcPtr	    crtc,
     if (numOutputs != crtc->numOutputs)
     {
 	RROutputPtr *newoutputs;
-
+	
 	if (numOutputs)
 	{
 	    if (crtc->numOutputs)
@@ -260,7 +258,7 @@ RRDeliverCrtcEvent (ClientPtr client, WindowPtr pWin, RRCrtcPtr crtc)
     rrScrPriv (pScreen);
     xRRCrtcChangeNotifyEvent	ce;
     RRModePtr	mode = crtc->mode;
-
+    
     ce.type = RRNotify + RREventBase;
     ce.subCode = RRNotify_CrtcChange;
     ce.timestamp = pScrPriv->lastSetTime.milliseconds;
@@ -335,7 +333,7 @@ RRCrtcSet (RRCrtcPtr    crtc,
 #if RANDR_12_INTERFACE
 	if (pScrPriv->rrCrtcSet)
 	{
-	    ret = (*pScrPriv->rrCrtcSet) (pScreen, crtc, mode, x, y,
+	    ret = (*pScrPriv->rrCrtcSet) (pScreen, crtc, mode, x, y, 
 					  rotation, numOutputs, outputs);
 	}
 	else
@@ -394,59 +392,6 @@ RRCrtcSet (RRCrtcPtr    crtc,
     return ret;
 }
 
-void
-RRFreeCrtcConfigs(RRCrtcConfigPtr configs, int num_configs)
-{
-    int	i;
-
-    for (i = 0; i < num_configs; i++)
-	free(configs[i].outputs);
-    free(configs);
-}
-
-Bool
-RRCrtcCurrentConfig(RRCrtcPtr crtc,
-		    RRCrtcConfigPtr crtc_config)
-{
-    crtc_config->crtc = crtc;
-    crtc_config->x = crtc->x;
-    crtc_config->y = crtc->y;
-    crtc_config->mode = crtc->mode;
-    crtc_config->rotation = crtc->rotation;
-    crtc_config->numOutputs = crtc->numOutputs;
-    crtc_config->outputs = calloc(crtc->numOutputs, sizeof (RROutputPtr));
-    if (!crtc_config->outputs)
-	return FALSE;
-    memcpy(crtc_config->outputs, crtc->outputs, crtc->numOutputs * sizeof (RROutputPtr));
-    crtc_config->sprite_position_transform = crtc->client_sprite_f_position_transform;
-    crtc_config->sprite_image_transform = crtc->client_sprite_f_image_transform;
-
-    /* XXX add pixmap stuff */
-    crtc_config->pixmap = NULL;
-    crtc_config->pixmap_x = 0;
-    crtc_config->pixmap_y = 0;
-    return TRUE;
-}
-
-
-/*
- * Request that a set of crtcs be configured at the same
- * time on a single screen
- */
-
-Bool
-RRSetCrtcConfigs(ScreenPtr screen,
-		 RRScreenConfigPtr screen_config,
-		 RRCrtcConfigPtr crtc_configs,
-		 int num_configs)
-{
-    rrScrPrivPtr	scr_priv = rrGetScrPriv(screen);
-
-    if (!scr_priv)
-	return FALSE;
-    return (*scr_priv->rrSetCrtcConfigs)(screen, screen_config, crtc_configs, num_configs);
-}
-
 /*
  * Return crtc transform
  */
@@ -490,7 +435,7 @@ RRCrtcDestroyResource (pointer value, XID pid)
     {
 	rrScrPriv(pScreen);
 	int		i;
-
+    
 	for (i = 0; i < pScrPriv->numCrtcs; i++)
 	{
 	    if (pScrPriv->crtcs[i] == crtc)
@@ -523,7 +468,7 @@ RRCrtcGammaSet (RRCrtcPtr   crtc,
 #if RANDR_12_INTERFACE
     ScreenPtr	pScreen = crtc->pScreen;
 #endif
-
+    
     memcpy (crtc->gammaRed, red, crtc->gammaSize * sizeof (CARD16));
     memcpy (crtc->gammaGreen, green, crtc->gammaSize * sizeof (CARD16));
     memcpy (crtc->gammaBlue, blue, crtc->gammaSize * sizeof (CARD16));
@@ -686,44 +631,6 @@ RRCrtcTransformSet (RRCrtcPtr		crtc,
 }
 
 /*
- * Figure out whether the specific crtc_config can fit
- * within the screen_config
- */
-Bool
-RRScreenCoversCrtc(RRScreenConfigPtr screen_config,
-		   RRCrtcConfigPtr crtc_config,
-		   RRTransformPtr client_transform,
-		   XID *errorValue)
-{
-    int source_width;
-    int	source_height;
-    struct pixman_f_transform f_transform;
-
-    RRTransformCompute (crtc_config->x, crtc_config->y,
-			crtc_config->mode->mode.width, crtc_config->mode->mode.height,
-			crtc_config->rotation,
-			client_transform,
-			&crtc_config->sprite_position_transform,
-			&crtc_config->sprite_image_transform,
-			NULL, &f_transform, NULL, NULL, NULL, NULL);
-
-    RRModeGetScanoutSize (crtc_config->mode, &f_transform,
-			  &source_width, &source_height);
-    if (crtc_config->x + source_width > screen_config->screen_pixmap_width) {
-	if (errorValue)
-	    *errorValue = crtc_config->x;
-	return FALSE;
-    }
-
-    if (crtc_config->y + source_height > screen_config->screen_pixmap_height) {
-	if (errorValue)
-	    *errorValue = crtc_config->y;
-	return FALSE;
-    }
-    return TRUE;
-}
-
-/*
  * Initialize crtc type
  */
 Bool
@@ -732,7 +639,7 @@ RRCrtcInit (void)
     RRCrtcType = CreateNewResourceType (RRCrtcDestroyResource, "CRTC");
     if (!RRCrtcType)
 	return FALSE;
-
+    
     return TRUE;
 }
 
@@ -761,7 +668,7 @@ ProcRRGetCrtcInfo (ClientPtr client)
     int				i, j, k, n;
     int				width, height;
     BoxRec			panned_area;
-
+    
     REQUEST_SIZE_MATCH(xRRGetCrtcInfoReq);
     VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess);
 
@@ -772,7 +679,7 @@ ProcRRGetCrtcInfo (ClientPtr client)
     pScrPriv = rrGetScrPriv(pScreen);
 
     mode = crtc->mode;
-
+    
     rep.type = X_Reply;
     rep.status = RRSetConfigSuccess;
     rep.sequenceNumber = client->sequence;
@@ -805,7 +712,7 @@ ProcRRGetCrtcInfo (ClientPtr client)
 	    if (pScrPriv->outputs[i]->crtcs[j] == crtc)
 		k++;
     rep.nPossibleOutput = k;
-
+    
     rep.length = rep.nOutput + rep.nPossibleOutput;
 
     extraLen = rep.length << 2;
@@ -820,7 +727,7 @@ ProcRRGetCrtcInfo (ClientPtr client)
 
     outputs = (RROutput *) extra;
     possible = (RROutput *) (outputs + rep.nOutput);
-
+    
     for (i = 0; i < crtc->numOutputs; i++)
     {
 	outputs[i] = crtc->outputs[i]->id;
@@ -837,7 +744,7 @@ ProcRRGetCrtcInfo (ClientPtr client)
 		    swapl (&possible[k], n);
 		k++;
 	    }
-
+    
     if (client->swapped) {
 	swaps(&rep.sequenceNumber, n);
 	swapl(&rep.length, n);
@@ -858,7 +765,7 @@ ProcRRGetCrtcInfo (ClientPtr client)
 	WriteToClient (client, extraLen, (char *) extra);
 	free(extra);
     }
-
+    
     return Success;
 }
 
@@ -878,10 +785,10 @@ ProcRRSetCrtcConfig (ClientPtr client)
     TimeStamp		    time;
     Rotation		    rotation;
     int			    rc, i, j;
-
+    
     REQUEST_AT_LEAST_SIZE(xRRSetCrtcConfigReq);
     numOutputs = (stuff->length - bytes_to_int32(SIZEOF (xRRSetCrtcConfigReq)));
-
+    
     VERIFY_RR_CRTC(stuff->crtc, crtc, DixSetAttrAccess);
 
     if (stuff->mode == None)
@@ -904,7 +811,7 @@ ProcRRSetCrtcConfig (ClientPtr client)
     }
     else
 	outputs = NULL;
-
+    
     outputIds = (RROutput *) (stuff + 1);
     for (i = 0; i < numOutputs; i++)
     {
@@ -927,7 +834,7 @@ ProcRRSetCrtcConfig (ClientPtr client)
 	/* validate mode for this output */
 	for (j = 0; j < outputs[i]->numModes + outputs[i]->numUserModes; j++)
 	{
-	    RRModePtr	m = (j < outputs[i]->numModes ?
+	    RRModePtr	m = (j < outputs[i]->numModes ? 
 			     outputs[i]->modes[j] :
 			     outputs[i]->userModes[j - outputs[i]->numModes]);
 	    if (m == mode)
@@ -962,17 +869,17 @@ ProcRRSetCrtcConfig (ClientPtr client)
 
     pScreen = crtc->pScreen;
     pScrPriv = rrGetScrPriv(pScreen);
-
+    
     time = ClientTimeToServerTime(stuff->timestamp);
     configTime = ClientTimeToServerTime(stuff->configTimestamp);
-
+    
     if (!pScrPriv)
     {
 	time = currentTime;
 	rep.status = RRSetConfigFailed;
 	goto sendReply;
     }
-
+    
     /*
      * Validate requested rotation
      */
@@ -1005,7 +912,7 @@ ProcRRSetCrtcConfig (ClientPtr client)
 	    free(outputs);
 	    return BadMatch;
 	}
-
+    
 #ifdef RANDR_12_INTERFACE
 	/*
 	 * Check screen size bounds if the DDX provides a 1.2 interface
@@ -1037,7 +944,7 @@ ProcRRSetCrtcConfig (ClientPtr client)
 		free(outputs);
 		return BadValue;
 	    }
-
+	    
 	    if (stuff->y + source_height > pScreen->height)
 	    {
 		client->errorValue = stuff->y;
@@ -1047,7 +954,7 @@ ProcRRSetCrtcConfig (ClientPtr client)
 	}
 #endif
     }
-
+    
     if (!RRCrtcSet (crtc, mode, stuff->x, stuff->y,
 		   rotation, numOutputs, outputs))
     {
@@ -1056,17 +963,17 @@ ProcRRSetCrtcConfig (ClientPtr client)
     }
     rep.status = RRSetConfigSuccess;
     pScrPriv->lastSetTime = time;
-
+    
 sendReply:
     free(outputs);
-
+    
     rep.type = X_Reply;
     /* rep.status has already been filled in */
     rep.length = 0;
     rep.sequenceNumber = client->sequence;
     rep.newTimestamp = pScrPriv->lastSetTime.milliseconds;
 
-    if (client->swapped)
+    if (client->swapped) 
     {
 	int n;
     	swaps(&rep.sequenceNumber, n);
@@ -1074,7 +981,7 @@ sendReply:
 	swapl(&rep.newTimestamp, n);
     }
     WriteToClient(client, sizeof(xRRSetCrtcConfigReply), (char *)&rep);
-
+    
     return Success;
 }
 
@@ -1090,7 +997,7 @@ ProcRRGetPanning (ClientPtr client)
     BoxRec		tracking;
     INT16		border[4];
     int			n;
-
+    
     REQUEST_SIZE_MATCH(xRRGetPanningReq);
     VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess);
 
@@ -1160,7 +1067,7 @@ ProcRRSetPanning (ClientPtr client)
     BoxRec		tracking;
     INT16		border[4];
     int			n;
-
+    
     REQUEST_SIZE_MATCH(xRRSetPanningReq);
     VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess);
 
@@ -1175,9 +1082,9 @@ ProcRRSetPanning (ClientPtr client)
 	rep.status = RRSetConfigFailed;
 	goto sendReply;
     }
-
+    
     time = ClientTimeToServerTime(stuff->timestamp);
-
+    
     if (!pScrPriv->rrGetPanning)
 	return RRErrorBase + BadRRCrtc;
 
@@ -1253,7 +1160,7 @@ ProcRRGetCrtcGamma (ClientPtr client)
     int				n;
     unsigned long		len;
     char			*extra = NULL;
-
+    
     REQUEST_SIZE_MATCH(xRRGetCrtcGammaReq);
     VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess);
 
@@ -1262,7 +1169,7 @@ ProcRRGetCrtcGamma (ClientPtr client)
         return RRErrorBase + BadRRCrtc;
 
     len = crtc->gammaSize * 3 * 2;
-
+    
     if (crtc->gammaSize) {
 	extra = malloc(len);
 	if (!extra)
@@ -1296,21 +1203,21 @@ ProcRRSetCrtcGamma (ClientPtr client)
     RRCrtcPtr			crtc;
     unsigned long		len;
     CARD16			*red, *green, *blue;
-
+    
     REQUEST_AT_LEAST_SIZE(xRRSetCrtcGammaReq);
     VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess);
-
+    
     len = client->req_len - bytes_to_int32(sizeof (xRRSetCrtcGammaReq));
     if (len < (stuff->size * 3 + 1) >> 1)
 	return BadLength;
 
     if (stuff->size != crtc->gammaSize)
 	return BadMatch;
-
+    
     red = (CARD16 *) (stuff + 1);
     green = red + crtc->gammaSize;
     blue = green + crtc->gammaSize;
-
+    
     RRCrtcGammaSet (crtc, red, green, blue);
 
     return Success;
@@ -1351,7 +1258,7 @@ ProcRRSetCrtcTransform (ClientPtr client)
 
 
 #define CrtcTransformExtra	(SIZEOF(xRRGetCrtcTransformReply) - 32)
-
+				
 static int
 transform_filter_length (RRTransformPtr transform)
 {
@@ -1453,336 +1360,3 @@ ProcRRGetCrtcTransform (ClientPtr client)
     free(reply);
     return Success;
 }
-
-static void
-pixman_f_transform_from_xRenderTransform(struct pixman_f_transform *f_transform,
-					 xRenderTransform *x_transform)
-{
-    struct pixman_transform	transform;
-    PictTransform_from_xRenderTransform(&transform, x_transform);
-    pixman_f_transform_from_pixman_transform(f_transform, &transform);
-}
-
-static int
-RRConvertCrtcConfig(ClientPtr client, ScreenPtr screen,
-		    RRScreenConfigPtr screen_config,
-		    RRCrtcConfigPtr config, xRRCrtcConfig *x,
-		    RROutput *outputIds)
-{
-    RRCrtcPtr		crtc;
-    RROutputPtr		*outputs;
-    rrScrPrivPtr	scr_priv;
-    RRModePtr		mode;
-    PixmapPtr		pixmap;
-    int			rc, i, j;
-    Rotation		rotation;
-
-    VERIFY_RR_CRTC(x->crtc, crtc, DixSetAttrAccess);
-
-    if (x->mode == None)
-    {
-	mode = NULL;
-	if (x->nOutput > 0)
-	    return BadMatch;
-    }
-    else
-    {
-	VERIFY_RR_MODE(x->mode, mode, DixSetAttrAccess);
-	if (x->nOutput == 0)
-	    return BadMatch;
-    }
-    if (x->nOutput)
-    {
-	outputs = malloc(x->nOutput * sizeof (RROutputPtr));
-	if (!outputs)
-	    return BadAlloc;
-    }
-    else
-	outputs = NULL;
-
-    if (x->pixmap == None)
-	pixmap = NULL;
-    else
-    {
-	rc = dixLookupResourceByType((pointer *) &pixmap, x->pixmap,
-				     RT_PIXMAP, client, DixWriteAccess);
-	if (rc != Success) {
-	    free(outputs);
-	    return rc;
-	}
-	/* XXX check to make sure this is a scanout pixmap */
-    }
-
-    for (i = 0; i < x->nOutput; i++)
-    {
-	rc = dixLookupResourceByType((pointer *)(outputs + i), outputIds[i],
-				     RROutputType, client, DixSetAttrAccess);
-	if (rc != Success)
-	{
-	    free(outputs);
-	    return rc;
-	}
-	/* validate crtc for this output */
-	for (j = 0; j < outputs[i]->numCrtcs; j++)
-	    if (outputs[i]->crtcs[j] == crtc)
-		break;
-	if (j == outputs[i]->numCrtcs)
-	{
-	    free(outputs);
-	    return BadMatch;
-	}
-	/* validate mode for this output */
-	for (j = 0; j < outputs[i]->numModes + outputs[i]->numUserModes; j++)
-	{
-	    RRModePtr	m = (j < outputs[i]->numModes ?
-			     outputs[i]->modes[j] :
-			     outputs[i]->userModes[j - outputs[i]->numModes]);
-	    if (m == mode)
-		break;
-	}
-	if (j == outputs[i]->numModes + outputs[i]->numUserModes)
-	{
-	    free(outputs);
-	    return BadMatch;
-	}
-    }
-    /* validate clones */
-    for (i = 0; i < x->nOutput; i++)
-    {
-	for (j = 0; j < x->nOutput; j++)
-	{
-	    int k;
-	    if (i == j)
-		continue;
-	    for (k = 0; k < outputs[i]->numClones; k++)
-	    {
-		if (outputs[i]->clones[k] == outputs[j])
-		    break;
-	    }
-	    if (k == outputs[i]->numClones)
-	    {
-		free(outputs);
-		return BadMatch;
-	    }
-	}
-    }
-
-    if (crtc->pScreen != screen)
-	return BadMatch;
-
-    scr_priv = rrGetScrPriv(screen);
-
-    config->crtc = crtc;
-    config->x = x->x;
-    config->y = x->y;
-    config->mode = mode;
-    config->rotation = x->rotation;
-    config->numOutputs = x->nOutput;
-    config->outputs = outputs;
-    pixman_f_transform_from_xRenderTransform(&config->sprite_position_transform,
-					     &x->spritePositionTransform);
-    pixman_f_transform_from_xRenderTransform(&config->sprite_image_transform,
-					     &x->spriteImageTransform);
-    config->pixmap = pixmap;
-    config->pixmap_x = x->xPixmap;
-    config->pixmap_y = x->yPixmap;
-
-    /*
-     * Validate requested rotation
-     */
-    rotation = (Rotation) x->rotation;
-
-    /* test the rotation bits only! */
-    switch (rotation & 0xf) {
-    case RR_Rotate_0:
-    case RR_Rotate_90:
-    case RR_Rotate_180:
-    case RR_Rotate_270:
-	break;
-    default:
-	/*
-	 * Invalid rotation
-	 */
-	client->errorValue = x->rotation;
-	free(outputs);
-	return BadValue;
-    }
-
-    if (mode)
-    {
-	if ((~crtc->rotations) & rotation)
-	{
-	    /*
-	     * requested rotation or reflection not supported by screen
-	     */
-	    client->errorValue = x->rotation;
-	    free(outputs);
-	    return BadMatch;
-	}
-
-	/*
-	 * If scanning out from another pixmap, make sure the mode
-	 * fits
-	 */
-	if (pixmap)
-	{
-	    if (x->xPixmap + mode->mode.width > pixmap->drawable.width) {
-		client->errorValue = x->xPixmap;
-		free(outputs);
-		return BadValue;
-	    }
-	    if (x->yPixmap + mode->mode.height > pixmap->drawable.height) {
-		client->errorValue = x->yPixmap;
-		free(outputs);
-		return BadValue;
-	    }
-	}
-	/*
-	 * Check screen size bounds if the DDX provides a 1.2 interface
-	 * for setting screen size. Else, assume the CrtcSet sets
-	 * the size along with the mode. If the driver supports transforms,
-	 * then it must allow crtcs to display a subset of the screen, so
-	 * only do this check for drivers without transform support.
-	 */
-	else if (scr_priv->rrScreenSetSize && !crtc->transforms)
-	{
-	    if (!RRScreenCoversCrtc(screen_config, config,
-				    &crtc->client_pending_transform,
-				    &client->errorValue))
-	    {
-		free(outputs);
-		return BadValue;
-	    }
-	}
-    }
-
-    return Success;
-}
-
-int
-ProcRRSetCrtcConfigs (ClientPtr client)
-{
-    REQUEST(xRRSetCrtcConfigsReq);
-    xRRSetCrtcConfigsReply  rep;
-    DrawablePtr		    drawable;
-    ScreenPtr		    screen;
-    rrScrPrivPtr	    scr_priv;
-    xRRCrtcConfig	    *x_configs;
-    RRScreenConfigRec	    screen_config;
-    RRCrtcConfigPtr	    configs;
-    RROutput		    *output_ids;
-    int			    num_configs;
-    int			    rc, i;
-    int			    extra_len;
-    int			    num_output_ids;
-
-    REQUEST_AT_LEAST_SIZE(xRRSetCrtcConfigsReq);
-
-    extra_len = client->req_len - bytes_to_int32(sizeof(xRRSetCrtcConfigsReq));
-
-    num_configs = stuff->nConfigs;
-
-    /* Check request length against number of configs specified */
-    if (num_configs * (sizeof (xRRCrtcConfig) >> 2) > extra_len)
-	return BadLength;
-
-    extra_len -= num_configs * (sizeof (xRRCrtcConfig) >> 2);
-    x_configs = (xRRCrtcConfig *) (stuff + 1);
-
-    /* Check remaining request length against number of outputs */
-    num_output_ids = 0;
-    for (i = 0; i < num_configs; i++)
-	num_output_ids += x_configs[i].nOutput;
-
-    if (extra_len != num_output_ids)
-	return BadLength;
-
-    rc = dixLookupDrawable(&drawable, stuff->drawable, client, 0, DixGetAttrAccess);
-    if (rc != Success)
-	return rc;
-
-    screen = drawable->pScreen;
-
-    scr_priv = rrGetScrPriv(screen);
-
-    if (!scr_priv)
-    {
-	rep.status = RRSetConfigFailed;
-	goto sendReply;
-    }
-
-    if (stuff->widthInMillimeters == 0 || stuff->heightInMillimeters == 0)
-    {
-	client->errorValue = 0;
-	return BadValue;
-    }
-
-    if (stuff->screenPixmapWidth < scr_priv->minWidth ||
-	scr_priv->maxWidth < stuff->screenPixmapWidth)
-    {
-	client->errorValue = stuff->screenPixmapWidth;
-	return BadValue;
-    }
-    if (stuff->screenPixmapHeight < scr_priv->minHeight ||
-	scr_priv->maxHeight < stuff->screenPixmapHeight)
-    {
-	client->errorValue = stuff->screenPixmapHeight;
-	return BadValue;
-    }
-
-    screen_config.screen_pixmap_width = stuff->screenPixmapWidth;
-    screen_config.screen_pixmap_height = stuff->screenPixmapHeight;
-    screen_config.screen_width = stuff->screenWidth;
-    screen_config.screen_height = stuff->screenHeight;
-    screen_config.mm_width = stuff->widthInMillimeters;
-    screen_config.mm_height = stuff->heightInMillimeters;
-
-    if (num_configs == 0)
-	return Success;
-
-    output_ids = (RROutput *) (x_configs + num_configs);
-
-    /*
-     * Convert protocol crtc configurations into
-     * server crtc configurations
-     */
-    configs = calloc(num_configs, sizeof (RRCrtcConfigRec));
-    if (!configs)
-	return BadAlloc;
-    for (i = 0; i < num_configs; i++) {
-	rc = RRConvertCrtcConfig(client, screen, &screen_config,
-				 &configs[i],
-				 &x_configs[i], output_ids);
-	if (rc != Success) {
-	    rep.status = RRSetConfigFailed;
-	    goto sendReply;
-	}
-	output_ids += x_configs[i].nOutput;
-    }
-
-    if (!RRSetCrtcConfigs (screen, &screen_config, configs, num_configs))
-    {
-	rep.status = RRSetConfigFailed;
-	goto sendReply;
-    }
-    rep.status = RRSetConfigSuccess;
-    scr_priv->lastSetTime = currentTime;
-
-sendReply:
-    RRFreeCrtcConfigs(configs, num_configs);
-
-    rep.type = X_Reply;
-    /* rep.status has already been filled in */
-    rep.length = 0;
-    rep.sequenceNumber = client->sequence;
-
-    if (client->swapped)
-    {
-	int n;
-	swaps(&rep.sequenceNumber, n);
-	swapl(&rep.length, n);
-    }
-    WriteToClient(client, sizeof(xRRSetCrtcConfigsReply), (char *)&rep);
-
-    return Success;
-}
diff --git a/randr/rrscreen.c b/randr/rrscreen.c
index af09f68..1bc1a9e 100644
--- a/randr/rrscreen.c
+++ b/randr/rrscreen.c
@@ -191,24 +191,6 @@ RRScreenSizeSet (ScreenPtr  pScreen,
 }
 
 /*
- * Compute an RRScreenConfig from the current screen information
- */
-void
-RRScreenCurrentConfig(ScreenPtr screen,
-		      RRScreenConfigPtr screen_config)
-{
-    PixmapPtr		screen_pixmap = screen->GetScreenPixmap(screen);
-    WindowPtr		root = screen->root;
-
-    screen_config->screen_pixmap_width = screen_pixmap->drawable.width;
-    screen_config->screen_pixmap_height = screen_pixmap->drawable.height;
-    screen_config->screen_width = root->drawable.width;
-    screen_config->screen_height = root->drawable.height;
-    screen_config->mm_width = screen->mmWidth;
-    screen_config->mm_height = screen->mmHeight;
-}
-
-/*
  * Retrieve valid screen size range
  */
 int
commit 8b0e651f7d09a7f35c87a4d0a6e2053cae93b516
Author: Keith Packard <keithp at keithp.com>
Date:   Wed Feb 23 11:18:05 2011 -0800

    Revert "hw/xfree86/modes: Add optional driver API for RRSetCrtcConfigs"
    
    This reverts commit 86c489c319c705f710bee3897fe27600ce15008e.

diff --git a/hw/xfree86/modes/xf86Crtc.h b/hw/xfree86/modes/xf86Crtc.h
index c2e8131..8b42efc 100644
--- a/hw/xfree86/modes/xf86Crtc.h
+++ b/hw/xfree86/modes/xf86Crtc.h
@@ -647,29 +647,6 @@ struct _xf86Output {
     INT16           initialBorder[4];
 };
 
-typedef enum _xf86SetConfigResponse {
-    xf86SetConfigFailed,		/* set_config failed */
-    xf86SetConfigChecked,		/* set_config validated the configuration */
-    xf86SetConfigDone,			/* set_config finished the work */
-} xf86SetConfigResponse;
-
-typedef struct _xf86CrtcSetConfig {
-    xf86CrtcPtr			crtc;
-    int				x, y;
-    DisplayModeRec		mode;
-    Rotation			rotation;
-    int				numOutputs;
-    xf86OutputPtr		*outputs;
-    struct pict_f_transform	sprite_position_transform;
-    struct pict_f_transform	sprite_image_transform;
-
-    /* Probably want some internal structure for the pixmap so that
-     * this can be set before the server is running
-     */
-    PixmapPtr			pixmap;
-    int				pixmap_x, pixmap_y;
-} xf86CrtcSetConfigRec, *xf86CrtcSetConfigPtr;
-
 typedef struct _xf86CrtcConfigFuncs {
     /**
      * Requests that the driver resize the screen.
@@ -687,12 +664,6 @@ typedef struct _xf86CrtcConfigFuncs {
     (*resize)(ScrnInfoPtr	scrn,
 	      int		width,
 	      int		height);
-
-    xf86SetConfigResponse
-    (*set_config) (ScrnInfoPtr		scrn,
-		   RRScreenConfigPtr	screen_config,
-		   xf86CrtcSetConfigPtr	crtc_configs,
-		   int			num_configs);
 } xf86CrtcConfigFuncsRec, *xf86CrtcConfigFuncsPtr;
 
 typedef void (*xf86_crtc_notify_proc_ptr) (ScreenPtr pScreen);
diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
index e3330f4..ac58135 100644
--- a/hw/xfree86/modes/xf86RandR12.c
+++ b/hw/xfree86/modes/xf86RandR12.c
@@ -758,7 +758,7 @@ xf86RandR12CreateScreenResources (ScreenPtr pScreen)
 	xf86CrtcPtr crtc = config->crtc[c];
 	int	    crtc_width = crtc->x + xf86ModeWidth (&crtc->mode, crtc->rotation);
 	int	    crtc_height = crtc->y + xf86ModeHeight (&crtc->mode, crtc->rotation);
-
+	
 	if (crtc->enabled) {
 	    if (crtc_width > width)
 		width = crtc_width;
@@ -770,13 +770,13 @@ xf86RandR12CreateScreenResources (ScreenPtr pScreen)
 		height = crtc->panningTotalArea.y2;
 	}
     }
-
+    
     if (width && height)
     {
 	/*
 	 * Compute physical size of screen
 	 */
-	if (monitorResolution)
+	if (monitorResolution) 
 	{
 	    mmWidth = width * 25.4 / monitorResolution;
 	    mmHeight = height * 25.4 / monitorResolution;
@@ -1007,7 +1007,7 @@ xf86RandRModeMatches (RRModePtr		randr_mode,
 	if (memcmp (randr_mode->name, mode->name, len) != 0)	return FALSE;
     }
 #endif
-
+    
     /* check for same timings */
     if (randr_mode->mode.dotClock / 1000 != mode->Clock)    return FALSE;
     if (randr_mode->mode.width        != mode->HDisplay)    return FALSE;
@@ -1019,11 +1019,11 @@ xf86RandRModeMatches (RRModePtr		randr_mode,
     if (randr_mode->mode.vSyncStart   != mode->VSyncStart)  return FALSE;
     if (randr_mode->mode.vSyncEnd     != mode->VSyncEnd)    return FALSE;
     if (randr_mode->mode.vTotal       != mode->VTotal)	    return FALSE;
-
+    
     /* check for same flags (using only the XF86 valid flag bits) */
     if ((randr_mode->mode.modeFlags & FLAG_BITS) != (mode->Flags & FLAG_BITS))
 	return FALSE;
-
+    
     /* everything matches */
     return TRUE;
 }
@@ -1063,7 +1063,7 @@ xf86RandR12CrtcNotify (RRCrtcPtr	randr_crtc)
 	    randr_output = output->randr_output;
 	    randr_outputs[numOutputs++] = randr_output;
 	    /*
-	     * We make copies of modes, so pointer equality
+	     * We make copies of modes, so pointer equality 
 	     * isn't sufficient
 	     */
 	    for (j = 0; j < randr_output->numModes + randr_output->numUserModes; j++)
@@ -1071,7 +1071,7 @@ xf86RandR12CrtcNotify (RRCrtcPtr	randr_crtc)
 		RRModePtr   m = (j < randr_output->numModes ?
 				 randr_output->modes[j] :
 				 randr_output->userModes[j-randr_output->numModes]);
-
+					 
 		if (xf86RandRModeMatches (m, mode))
 		{
 		    randr_mode = m;
@@ -1081,7 +1081,7 @@ xf86RandR12CrtcNotify (RRCrtcPtr	randr_crtc)
 	}
     }
     ret = RRCrtcNotify (randr_crtc, randr_mode, x, y,
-			rotation,
+			rotation, 
 			crtc->transformPresent ? &crtc->transform : NULL,
 			numOutputs, randr_outputs);
     free(randr_outputs);
@@ -1100,13 +1100,13 @@ xf86RandRModeConvert (ScrnInfoPtr	scrn,
     mode->status = MODE_OK;
 
     mode->Clock = randr_mode->mode.dotClock / 1000;
-
+    
     mode->HDisplay = randr_mode->mode.width;
     mode->HSyncStart = randr_mode->mode.hSyncStart;
     mode->HSyncEnd = randr_mode->mode.hSyncEnd;
     mode->HTotal = randr_mode->mode.hTotal;
     mode->HSkew = randr_mode->mode.hSkew;
-
+    
     mode->VDisplay = randr_mode->mode.height;
     mode->VSyncStart = randr_mode->mode.vSyncStart;
     mode->VSyncEnd = randr_mode->mode.vSyncEnd;
@@ -1146,7 +1146,7 @@ xf86RandR12CrtcSet (ScreenPtr	    pScreen,
 	flags |= XF86CrtcSetMode;
     else if (randr_mode && !xf86RandRModeMatches (randr_mode, &crtc->mode))
 	flags |= XF86CrtcSetMode;
-
+    
     if (rotation != crtc->rotation)
 	flags |= XF86CrtcSetRotation;
 
@@ -1159,18 +1159,18 @@ xf86RandR12CrtcSet (ScreenPtr	    pScreen,
 
     if (x != crtc->x || y != crtc->y)
 	flags |= XF86CrtcSetOrigin;
-    for (o = 0; o < config->num_output; o++)
+    for (o = 0; o < config->num_output; o++) 
     {
 	xf86OutputPtr  output = config->output[o];
 	xf86CrtcPtr    new_crtc;
 
 	save_crtcs[o] = output->crtc;
-
+	
 	if (output->crtc == crtc)
 	    new_crtc = NULL;
 	else
 	    new_crtc = output->crtc;
-	for (ro = 0; ro < num_randr_outputs; ro++)
+	for (ro = 0; ro < num_randr_outputs; ro++) 
 	    if (output->randr_output == randr_outputs[ro])
 	    {
 		new_crtc = crtc;
@@ -1182,7 +1182,7 @@ xf86RandR12CrtcSet (ScreenPtr	    pScreen,
 	    output->crtc = new_crtc;
 	}
     }
-    for (ro = 0; ro < num_randr_outputs; ro++)
+    for (ro = 0; ro < num_randr_outputs; ro++) 
         if (randr_outputs[ro]->pendingProperties)
 	    flags |= XF86CrtcSetProperty;
 
@@ -1385,7 +1385,7 @@ xf86RROutputSetModes (RROutputPtr randr_output, DisplayModePtr modes)
 
     if (nmode) {
 	rrmodes = malloc(nmode * sizeof (RRModePtr));
-
+	
 	if (!rrmodes)
 	    return FALSE;
 	nmode = 0;
@@ -1395,7 +1395,7 @@ xf86RROutputSetModes (RROutputPtr randr_output, DisplayModePtr modes)
 		if ((pref != 0) == ((mode->type & M_T_PREFERRED) != 0)) {
 		    xRRModeInfo		modeInfo;
 		    RRModePtr		rrmode;
-
+		    
 		    modeInfo.nameLength = strlen (mode->name);
 		    modeInfo.width = mode->HDisplay;
 		    modeInfo.dotClock = mode->Clock * 1000;
@@ -1419,7 +1419,7 @@ xf86RROutputSetModes (RROutputPtr randr_output, DisplayModePtr modes)
 	    }
 	}
     }
-
+    
     ret = RROutputSetModes (randr_output, rrmodes, nmode, npreferred);
     free(rrmodes);
     return ret;
@@ -1439,13 +1439,13 @@ xf86RandR12SetInfo12 (ScreenPtr pScreen)
     int			o, c, l;
     RRCrtcPtr		randr_crtc;
     int			nclone;
-
+    
     clones = malloc(config->num_output * sizeof (RROutputPtr));
     crtcs = malloc(config->num_crtc * sizeof (RRCrtcPtr));
     for (o = 0; o < config->num_output; o++)
     {
 	xf86OutputPtr	output = config->output[o];
-
+	
 	ncrtc = 0;
 	for (c = 0; c < config->num_crtc; c++)
 	    if (output->possible_crtcs & (1 << c))
@@ -1463,7 +1463,7 @@ xf86RandR12SetInfo12 (ScreenPtr pScreen)
 	    return FALSE;
 	}
 
-	RROutputSetPhysicalSize(output->randr_output,
+	RROutputSetPhysicalSize(output->randr_output, 
 				output->mm_width,
 				output->mm_height);
 	xf86RROutputSetModes (output->randr_output, output->probed_modes);
@@ -1489,7 +1489,7 @@ xf86RandR12SetInfo12 (ScreenPtr pScreen)
 	for (l = 0; l < config->num_output; l++)
 	{
 	    xf86OutputPtr	    clone = config->output[l];
-
+	    
 	    if (l != o && (output->possible_clones & (1 << l)))
 		clones[nclone++] = clone->randr_output;
 	}
@@ -1530,7 +1530,7 @@ xf86RandR12CreateObjects12 (ScreenPtr pScreen)
     xf86CrtcConfigPtr   config = XF86_CRTC_CONFIG_PTR(pScrn);
     int			c;
     int			o;
-
+    
     if (!RRInit ())
 	return FALSE;
 
@@ -1540,7 +1540,7 @@ xf86RandR12CreateObjects12 (ScreenPtr pScreen)
     for (c = 0; c < config->num_crtc; c++)
     {
 	xf86CrtcPtr    crtc = config->crtc[c];
-
+	
 	crtc->randr_crtc = RRCrtcCreate (pScreen, crtc);
 	RRCrtcGammaSetSize (crtc->randr_crtc, 256);
     }
@@ -1551,7 +1551,7 @@ xf86RandR12CreateObjects12 (ScreenPtr pScreen)
     {
 	xf86OutputPtr	output = config->output[o];
 
-	output->randr_output = RROutputCreate (pScreen, output->name,
+	output->randr_output = RROutputCreate (pScreen, output->name, 
 					       strlen (output->name),
 					       output);
 
@@ -1574,7 +1574,7 @@ xf86RandR12CreateScreenResources12 (ScreenPtr pScreen)
 
     for (c = 0; c < config->num_crtc; c++)
         xf86RandR12CrtcNotify (config->crtc[c]->randr_crtc);
-
+    
     RRScreenSetSizeRange (pScreen, config->minWidth, config->minHeight,
 			  config->maxWidth, config->maxHeight);
     return TRUE;
@@ -1747,112 +1747,6 @@ xf86RandR14SetCrtcSpriteTransform(ScreenPtr		pScreen,
 }
 
 static Bool
-xf86RRConvertCrtcConfig(xf86CrtcSetConfigPtr	xf86_config,
-			RRCrtcConfigPtr		rr_config)
-{
-    RRCrtcPtr		rr_crtc = rr_config->crtc;
-    xf86CrtcPtr		crtc = rr_crtc->devPrivate;
-    ScrnInfoPtr		scrn = xf86Screens[rr_crtc->pScreen->myNum];
-    int			o;
-
-    xf86_config->crtc = crtc;
-    xf86_config->x = rr_config->x;
-    xf86_config->y = rr_config->y;
-    xf86RandRModeConvert(scrn, rr_config->mode, &xf86_config->mode);
-    xf86_config->rotation = rr_config->rotation;
-    xf86_config->numOutputs = rr_config->numOutputs;
-    xf86_config->outputs = calloc(rr_config->numOutputs, sizeof (xf86OutputPtr));
-    if (!xf86_config->outputs)
-	return FALSE;
-    for (o = 0; o < rr_config->numOutputs; o++)
-	xf86_config->outputs[o] = rr_config->outputs[o]->devPrivate;
-    xf86_config->sprite_position_transform = rr_config->sprite_position_transform;
-    xf86_config->sprite_image_transform = rr_config->sprite_image_transform;
-    xf86_config->pixmap = rr_config->pixmap;
-    xf86_config->pixmap_x = rr_config->pixmap_x;
-    xf86_config->pixmap_y = rr_config->pixmap_y;
-    return TRUE;
-}
-
-static void
-xf86FreeCrtcSetConfigs(xf86CrtcSetConfigPtr xf86_crtc_configs, int num_configs)
-{
-    int	i;
-
-    for (i = 0; i < num_configs; i++)
-	free(xf86_crtc_configs[i].outputs);
-    free(xf86_crtc_configs);
-}
-
-static Bool
-xf86RRSetCrtcConfigs(ScreenPtr screen,
-		     RRScreenConfigPtr screen_config,
-		     RRCrtcConfigPtr crtc_configs,
-		     int num_configs)
-{
-    ScrnInfoPtr	     		scrn = xf86Screens[screen->myNum];
-    xf86CrtcConfigPtr		config = XF86_CRTC_CONFIG_PTR(scrn);
-
-    if (config->funcs->set_config) {
-	xf86CrtcSetConfigPtr	xf86_crtc_configs;
-	int			i;
-	xf86SetConfigResponse	response;
-
-	/*
-	 * Convert RRCrtcConfigRecs to xf86CrtcSetConfigs
-	 */
-	xf86_crtc_configs = calloc(num_configs, sizeof (xf86CrtcSetConfigRec));
-	if (!xf86_crtc_configs)
-	    return FALSE;
-	for (i = 0; i < num_configs; i++)
-	    if (!xf86RRConvertCrtcConfig(&xf86_crtc_configs[i], &crtc_configs[i])) {
-		xf86FreeCrtcSetConfigs(xf86_crtc_configs, num_configs);
-		return FALSE;
-	    }
-
-	/*
-	 * Ask the driver to set the configuration
-	 */
-	response = (*config->funcs->set_config)(scrn,
-						screen_config,
-						xf86_crtc_configs,
-						num_configs);
-	xf86FreeCrtcSetConfigs(xf86_crtc_configs, num_configs);
-
-	/*
-	 * The driver is allowed to answer with one of three
-	 * responses:
-	 */
-	switch (response) {
-	case xf86SetConfigFailed:
-
-	    /* The configuration isn't usable, or some error
-	     * occurred while setting it. Everything has been
-	     * cleaned up and we're ready to return an error
-	     * back to the client
-	     */
-	    return FALSE;
-	case xf86SetConfigDone:
-
-	    /* The configuration was acceptable, and the whole
-	     * mode setting experience is over. Nothing more to do
-	     * here.
-	     */
-	    return TRUE;
-	case xf86SetConfigChecked:
-
-	    /* The configuration was acceptable, but the driver
-	     * didn't actually do anything. Go ask the DIX code
-	     * to do the mode setting operation using the simpler
-	     * interfaces
-	     */
-	    break;
-	}
-    }
-    return miRRSetCrtcConfigs(screen, screen_config, crtc_configs, num_configs);
-}
-
-static Bool
 xf86RandR12EnterVT (int screen_index, int flags)
 {
     ScreenPtr        pScreen = screenInfo.screens[screen_index];
@@ -1903,7 +1797,7 @@ xf86RandR12Init12 (ScreenPtr pScreen)
     pScrn->PointerMoved = xf86RandR12PointerMoved;
     pScrn->ChangeGamma = xf86RandR12ChangeGamma;
     rp->rrSetCrtcSpriteTransform = xf86RandR14SetCrtcSpriteTransform;
-    rp->rrSetCrtcConfigs = xf86RRSetCrtcConfigs;
+    rp->rrSetCrtcConfigs = miRRSetCrtcConfigs;
 
     randrp->orig_EnterVT = pScrn->EnterVT;
     pScrn->EnterVT = xf86RandR12EnterVT;
commit 9e8c20b0d49783d6b9334d4c11c4e6e3ba273524
Author: Keith Packard <keithp at keithp.com>
Date:   Wed Feb 23 11:17:42 2011 -0800

    Revert "randr: Add per-crtc pixmaps"
    
    This reverts commit 82612045e11f2b882ae132e184a9629f43f1c424.

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 94f2c50..ecde199 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -82,17 +82,6 @@ xf86CrtcSetSizeRange (ScrnInfoPtr scrn,
     config->maxHeight = maxHeight;
 }
 
-void
-xf86CrtcSetScanoutFormats(ScrnInfoPtr		scrn,
-			  int			num_formats,
-			  xf86CrtcScanoutFormat	*formats)
-{
-    xf86CrtcConfigPtr	config = XF86_CRTC_CONFIG_PTR(scrn);
-
-    config->num_scanout_formats = num_formats;
-    config->scanout_formats = formats;
-}
-
 /*
  * Crtc functions
  */
@@ -276,7 +265,6 @@ xf86CrtcSet(xf86CrtcPtr crtc, xf86CrtcSetRec *set)
     Rotation		saved_rotation;
     RRTransformRec	saved_transform;
     Bool		saved_transform_present;
-    PixmapPtr		saved_scanout_pixmap;
 
     crtc->enabled = xf86CrtcInUse (crtc);
 
@@ -296,7 +284,6 @@ xf86CrtcSet(xf86CrtcPtr crtc, xf86CrtcSetRec *set)
     saved_x = crtc->x;
     saved_y = crtc->y;
     saved_rotation = crtc->rotation;
-    saved_scanout_pixmap = crtc->scanoutPixmap;
     if (crtc->transformPresent) {
 	RRTransformInit (&saved_transform);
 	RRTransformCopy (&saved_transform, &crtc->transform);
@@ -314,8 +301,6 @@ xf86CrtcSet(xf86CrtcPtr crtc, xf86CrtcSetRec *set)
     }
     if (set->flags & XF86CrtcSetRotation)
 	crtc->rotation = set->rotation;
-    if (set->flags & XF86CrtcSetScanoutPixmap)
-	crtc->scanoutPixmap = set->scanout_pixmap;
 
     if (set->flags & XF86CrtcSetTransform) {
 	if (set->transform) {
@@ -414,10 +399,6 @@ done:
 	crtc->active = TRUE;
 	if (scrn->pScreen)
 	    xf86CrtcSetScreenSubpixelOrder (scrn->pScreen);
-	if (crtc->scanoutPixmap)
-	    ++crtc->scanoutPixmap->refcnt;
-	if (saved_scanout_pixmap)
-	    (*scrn->pScreen->DestroyPixmap)(saved_scanout_pixmap);
 	if (scrn->ModeSet)
 	    scrn->ModeSet(scrn);
     } else {
@@ -428,7 +409,6 @@ done:
 	if (saved_transform_present)
 	    RRTransformCopy (&crtc->transform, &saved_transform);
 	crtc->transformPresent = saved_transform_present;
-	crtc->scanoutPixmap = saved_scanout_pixmap;
     }
 
     if (adjusted_mode) {
diff --git a/hw/xfree86/modes/xf86Crtc.h b/hw/xfree86/modes/xf86Crtc.h
index 9a520fc..c2e8131 100644
--- a/hw/xfree86/modes/xf86Crtc.h
+++ b/hw/xfree86/modes/xf86Crtc.h
@@ -79,7 +79,6 @@ typedef enum _xf86CrtcSetFlags {
     XF86CrtcSetTransform = 8,		/* transform */
     XF86CrtcSetRotation = 16,		/* rotation */
     XF86CrtcSetProperty = 32,		/* output property */
-    XF86CrtcSetScanoutPixmap = 64,	/* scanout pixmap */
 } xf86CrtcSetFlags;
 
 typedef struct _xf86CrtcSet {
@@ -88,7 +87,6 @@ typedef struct _xf86CrtcSet {
     Rotation		rotation;
     RRTransformPtr	transform;
     int			x, y;
-    PixmapPtr		scanout_pixmap;
 } xf86CrtcSetRec;
 
 typedef struct _xf86CrtcFuncs {
@@ -279,7 +277,6 @@ struct _xf86Crtc {
     Rotation	    rotation;
     PixmapPtr	    rotatedPixmap;
     void	    *rotatedData;
-    PixmapPtr	    scanoutPixmap;
     
     /**
      * Position on screen
@@ -673,14 +670,6 @@ typedef struct _xf86CrtcSetConfig {
     int				pixmap_x, pixmap_y;
 } xf86CrtcSetConfigRec, *xf86CrtcSetConfigPtr;
 
-typedef struct _xf86CrtcScanoutFormat {
-    int		    depth;
-    int		    bitsPerPixel;
-    int		    maxWidth, maxHeight;
-    Rotation	    rotations;
-    PictFormatShort format;
-} xf86CrtcScanoutFormat;
-
 typedef struct _xf86CrtcConfigFuncs {
     /**
      * Requests that the driver resize the screen.
@@ -704,17 +693,6 @@ typedef struct _xf86CrtcConfigFuncs {
 		   RRScreenConfigPtr	screen_config,
 		   xf86CrtcSetConfigPtr	crtc_configs,
 		   int			num_configs);
-
-    /**
-     * Create a scanout pixmap
-     */
-    PixmapPtr
-    (*create_scanout_pixmap)(ScrnInfoPtr		scrn,
-			     int			width,
-			     int			height,
-			     Rotation			rotations,
-			     xf86CrtcScanoutFormat	*format);
-
 } xf86CrtcConfigFuncsRec, *xf86CrtcConfigFuncsPtr;
 
 typedef void (*xf86_crtc_notify_proc_ptr) (ScreenPtr pScreen);
@@ -774,11 +752,6 @@ typedef struct _xf86CrtcConfig {
     /* callback when crtc configuration changes */
     xf86_crtc_notify_proc_ptr  xf86_crtc_notify;
 
-    /*
-     * Supported scanout pixmap formats
-     */
-    int			num_scanout_formats;
-    xf86CrtcScanoutFormat	*scanout_formats;
 } xf86CrtcConfigRec, *xf86CrtcConfigPtr;
 
 extern _X_EXPORT int xf86CrtcConfigPrivateIndex;
@@ -824,11 +797,6 @@ xf86CrtcSetSizeRange (ScrnInfoPtr scrn,
 		      int minWidth, int minHeight,
 		      int maxWidth, int maxHeight);
 
-extern _X_EXPORT void
-xf86CrtcSetScanoutFormats (ScrnInfoPtr			scrn,
-			   int				num_formats,
-			   xf86CrtcScanoutFormat	*formats);
-
 /*
  * Crtc functions
  */
diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
index b0eabdd..e3330f4 100644
--- a/hw/xfree86/modes/xf86RandR12.c
+++ b/hw/xfree86/modes/xf86RandR12.c
@@ -1083,7 +1083,7 @@ xf86RandR12CrtcNotify (RRCrtcPtr	randr_crtc)
     ret = RRCrtcNotify (randr_crtc, randr_mode, x, y,
 			rotation,
 			crtc->transformPresent ? &crtc->transform : NULL,
-			numOutputs, randr_outputs, crtc->scanoutPixmap);
+			numOutputs, randr_outputs);
     free(randr_outputs);
     return ret;
 }
@@ -1126,8 +1126,7 @@ xf86RandR12CrtcSet (ScreenPtr	    pScreen,
 		    int		    y,
 		    Rotation	    rotation,
 		    int		    num_randr_outputs,
-		    RROutputPtr	    *randr_outputs,
-		    PixmapPtr	    scanout_pixmap)
+		    RROutputPtr	    *randr_outputs)
 {
     XF86RandRInfoPtr	randrp = XF86RANDRINFO(pScreen);
     ScrnInfoPtr		pScrn = xf86Screens[pScreen->myNum];
@@ -1158,9 +1157,6 @@ xf86RandR12CrtcSet (ScreenPtr	    pScreen,
 				  sizeof (transform->transform)) != 0)
 	flags |= XF86CrtcSetTransform;
 
-    if (scanout_pixmap != crtc->scanoutPixmap)
-	flags |= XF86CrtcSetScanoutPixmap;
-
     if (x != crtc->x || y != crtc->y)
 	flags |= XF86CrtcSetOrigin;
     for (o = 0; o < config->num_output; o++)
@@ -1207,7 +1203,6 @@ xf86RandR12CrtcSet (ScreenPtr	    pScreen,
 	    set.transform = transform;
 	    set.x = x;
 	    set.y = y;
-	    set.scanout_pixmap = scanout_pixmap;
 	    set.flags = flags;
 	    if (!xf86CrtcSet(crtc, &set))
 	    {
@@ -1737,54 +1732,6 @@ xf86RandR12ChangeGamma(int scrnIndex, Gamma gamma)
     return Success;
 }
 
-static RRScanoutPixmapInfo *
-xf86RRQueryScanoutPixmaps(ScreenPtr screen, int *n_info)
-{
-    ScrnInfoPtr		scrn = xf86Screens[screen->myNum];
-    xf86CrtcConfigPtr	config = XF86_CRTC_CONFIG_PTR(scrn);
-    RRScanoutPixmapInfo	*info;
-    int			f;
-
-    info = calloc(config->num_scanout_formats, sizeof (RRScanoutPixmapInfo));
-    if (config->num_scanout_formats && !info) {
-	*n_info = 0;
-	return NULL;
-    }
-    for (f = 0; f < config->num_scanout_formats; f++) {
-	info[f].maxWidth = config->scanout_formats[f].maxWidth;
-	info[f].maxHeight = config->scanout_formats[f].maxHeight;
-	info[f].depth = config->scanout_formats[f].depth;
-	info[f].rotations = config->scanout_formats[f].rotations;
-	info[f].format = PictureMatchFormat (screen, info[f].depth,
-					     config->scanout_formats[f].format);
-    }
-    *n_info = config->num_scanout_formats;
-    return info;
-}
-
-static PixmapPtr
-xf86RRCreateScanoutPixmap(ScreenPtr screen,
-			  int width, int height, int depth,
-			  Rotation rotations,
-			  PictFormatPtr format)
-{
-    ScrnInfoPtr		scrn = xf86Screens[screen->myNum];
-    xf86CrtcConfigPtr	config = XF86_CRTC_CONFIG_PTR(scrn);
-    int			f;
-
-    if (!config->funcs->create_scanout_pixmap)
-	return NullPixmap;
-
-    for (f = 0; f < config->num_scanout_formats; f++)
-	if (config->scanout_formats[f].depth == depth &&
-	    (config->scanout_formats[f].format & 0xffffff) == format->format) {
-	    return (*config->funcs->create_scanout_pixmap) (scrn, width, height,
-							    rotations,
-							    &config->scanout_formats[f]);
-	}
-    return NullPixmap;
-}
-
 static void
 xf86RandR14SetCrtcSpriteTransform(ScreenPtr		pScreen,
 				  RRCrtcPtr		randr_crtc,
@@ -1946,17 +1893,17 @@ xf86RandR12Init12 (ScreenPtr pScreen)
     rp->rrCrtcGetGamma = xf86RandR12CrtcGetGamma;
     rp->rrOutputSetProperty = xf86RandR12OutputSetProperty;
     rp->rrOutputValidateMode = xf86RandR12OutputValidateMode;
+#if RANDR_13_INTERFACE
     rp->rrOutputGetProperty = xf86RandR13OutputGetProperty;
     rp->rrGetPanning = xf86RandR13GetPanning;
     rp->rrSetPanning = xf86RandR13SetPanning;
+#endif
     rp->rrModeDestroy = xf86RandR12ModeDestroy;
     rp->rrSetConfig = NULL;
     pScrn->PointerMoved = xf86RandR12PointerMoved;
     pScrn->ChangeGamma = xf86RandR12ChangeGamma;
     rp->rrSetCrtcSpriteTransform = xf86RandR14SetCrtcSpriteTransform;
     rp->rrSetCrtcConfigs = xf86RRSetCrtcConfigs;
-    rp->rrQueryScanoutPixmaps = xf86RRQueryScanoutPixmaps;
-    rp->rrCreateScanoutPixmap = xf86RRCreateScanoutPixmap;
 
     randrp->orig_EnterVT = pScrn->EnterVT;
     pScrn->EnterVT = xf86RandR12EnterVT;
diff --git a/randr/Makefile.am b/randr/Makefile.am
index b7664c6..a1c88dc 100644
--- a/randr/Makefile.am
+++ b/randr/Makefile.am
@@ -16,7 +16,6 @@ librandr_la_SOURCES =	\
 	rrinfo.c	\
 	rrmode.c	\
 	rroutput.c	\
-	rrpixmap.c	\
 	rrpointer.c	\
 	rrproperty.c	\
 	rrscreen.c	\
diff --git a/randr/mirrcrtc.c b/randr/mirrcrtc.c
index cc76797..b1e2c9f 100644
--- a/randr/mirrcrtc.c
+++ b/randr/mirrcrtc.c
@@ -66,8 +66,7 @@ miRRSetCrtcConfig(RRCrtcConfigPtr crtc_config)
 		     y,
 		     crtc_config->rotation,
 		     crtc_config->numOutputs,
-		     crtc_config->outputs,
-		     crtc_config->pixmap);
+		     crtc_config->outputs);
 }
 
 Bool
diff --git a/randr/randr.c b/randr/randr.c
index c22657e..6077705 100644
--- a/randr/randr.c
+++ b/randr/randr.c
@@ -98,7 +98,6 @@ RRCloseScreen (int i, ScreenPtr pScreen)
     
     free(pScrPriv->crtcs);
     free(pScrPriv->outputs);
-    free(pScrPriv->scanout_info);
     free(pScrPriv);
     RRNScreens -= 1;	/* ok, one fewer screen with RandR running */
     return (*pScreen->CloseScreen) (i, pScreen);    
@@ -249,8 +248,6 @@ Bool RRScreenInit(ScreenPtr pScreen)
     pScrPriv->rrCrtcSet = NULL;
     pScrPriv->rrCrtcSetGamma = NULL;
 #endif
-    pScrPriv->scanout_info = NULL;
-    pScrPriv->n_scanout_info = 0;
 #if RANDR_10_INTERFACE    
     pScrPriv->rrSetConfig = 0;
     pScrPriv->rotations = RR_Rotate_0;
@@ -485,18 +482,6 @@ RRVerticalRefresh (xRRModeInfo *mode)
     return (CARD16) refresh;
 }
 
-RRScanoutPixmapInfo *
-RRQueryScanoutPixmapInfo(ScreenPtr screen, int *n_info)
-{
-    rrScrPriv(screen);
-
-    if (!pScrPriv->scanout_info && pScrPriv->rrQueryScanoutPixmaps)
-	pScrPriv->scanout_info = pScrPriv->rrQueryScanoutPixmaps(screen,
-								 &pScrPriv->n_scanout_info);
-    *n_info = pScrPriv->n_scanout_info;
-    return pScrPriv->scanout_info;
-}
-
 static int
 ProcRRDispatch (ClientPtr client)
 {
diff --git a/randr/randrstr.h b/randr/randrstr.h
index c231972..2fe9602 100644
--- a/randr/randrstr.h
+++ b/randr/randrstr.h
@@ -123,7 +123,6 @@ struct _rrCrtc {
     CARD16	    *gammaGreen;
     void	    *devPrivate;
     Bool	    transforms;
-    PixmapPtr	    scanoutPixmap;
     RRTransformRec  client_pending_transform;
     RRTransformRec  client_current_transform;
     PictTransform   client_sprite_position_transform;
@@ -199,8 +198,7 @@ typedef Bool (*RRCrtcSetProcPtr) (ScreenPtr		pScreen,
 				  int			y,
 				  Rotation		rotation,
 				  int			numOutputs,
-				  RROutputPtr		*outputs,
-				  PixmapPtr		scanout_pixmap);
+				  RROutputPtr		*outputs);
 
 typedef Bool (*RRCrtcSetGammaProcPtr) (ScreenPtr	pScreen,
 				       RRCrtcPtr	crtc);
@@ -266,20 +264,6 @@ typedef Bool (*RRSetConfigProcPtr) (ScreenPtr		pScreen,
 
 #endif
 	
-typedef struct {
-    PictFormatPtr	format;
-    int			maxWidth, maxHeight;
-    int			depth;
-    Rotation		rotations;
-} RRScanoutPixmapInfo;
-
-typedef RRScanoutPixmapInfo *(*RRQueryScanoutPixmapsPtr) (ScreenPtr pScreen,
-							  int *num_info);
-
-typedef PixmapPtr (*RRCreateScanoutPixmapPtr) (ScreenPtr pScreen,
-					       int width, int height, int depth,
-					       Rotation rotations,
-					       PictFormatPtr format);
 
 typedef void (*RRSetCrtcSpriteTransformPtr) (ScreenPtr pScreen,
 					     RRCrtcPtr randr_crtc,
@@ -319,8 +303,6 @@ typedef struct _rrScrPriv {
     RRGetPanningProcPtr	rrGetPanning;
     RRSetPanningProcPtr	rrSetPanning;
 #endif
-    RRQueryScanoutPixmapsPtr	rrQueryScanoutPixmaps;
-    RRCreateScanoutPixmapPtr	rrCreateScanoutPixmap;
     RRSetCrtcSpriteTransformPtr	rrSetCrtcSpriteTransform;
     RRGetCrtcSpriteTransformPtr	rrGetCrtcSpriteTransform;
     RRSetCrtcConfigsPtr rrSetCrtcConfigs;
@@ -351,8 +333,6 @@ typedef struct _rrScrPriv {
     /* Last known pointer position */
     RRCrtcPtr		    pointerCrtc;
 
-    RRScanoutPixmapInfo	    *scanout_info;
-    int			    n_scanout_info;
 #ifdef RANDR_10_INTERFACE
     /*
      * Configuration information
@@ -367,7 +347,6 @@ typedef struct _rrScrPriv {
     int			    rate;
     int			    size;
 #endif
-
 } rrScrPrivRec, *rrScrPrivPtr;
 
 extern _X_EXPORT DevPrivateKeyRec rrPrivKeyRec;
@@ -542,9 +521,6 @@ RRGetRotation (ScreenPtr pScreen);
 extern _X_EXPORT CARD16
 RRVerticalRefresh (xRRModeInfo *mode);
 
-extern _X_EXPORT RRScanoutPixmapInfo *
-RRQueryScanoutPixmapInfo(ScreenPtr screen, int *n_info);
-
 #ifdef RANDR_10_INTERFACE					
 /*
  * This is the old interface, deprecated but left
@@ -623,8 +599,7 @@ RRCrtcNotify (RRCrtcPtr	    crtc,
 	      Rotation	    rotation,
 	      RRTransformPtr transform,
 	      int	    numOutputs,
-	      RROutputPtr   *outputs,
-	      PixmapPtr	    scanoutPixmap);
+	      RROutputPtr   *outputs);
 
 extern _X_EXPORT void
 RRDeliverCrtcEvent (ClientPtr client, WindowPtr pWin, RRCrtcPtr crtc);
@@ -639,8 +614,7 @@ RRCrtcSet (RRCrtcPtr    crtc,
 	   int		y,
 	   Rotation	rotation,
 	   int		numOutput,
-	   RROutputPtr  *outputs,
-	   PixmapPtr	scanout_pixmap);
+	   RROutputPtr  *outputs);
 
 /*
  * Request that the Crtc gamma be changed
@@ -669,10 +643,6 @@ RRCrtcGammaGet(RRCrtcPtr crtc);
 extern _X_EXPORT Bool
 RRCrtcGammaNotify (RRCrtcPtr	crtc);
 
-void
-RRModeGetScanoutSize (RRModePtr mode, struct pixman_f_transform *transform,
-		      int *width, int *height);
-
 /*
  * Set the size of the gamma table at server startup time
  */
@@ -808,23 +778,11 @@ RRCrtcSpriteTransformSet(RRCrtcPtr crtc,
 			 struct pict_f_transform *f_image_transform);
 
 int
-ProcRRQueryScanoutPixmaps (ClientPtr client);
-
-int
-ProcRRCreateScanoutPixmap (ClientPtr client);
-
-int
-ProcRRSetCrtcPixmapConfig (ClientPtr client);
-
-int
 ProcRRSetCrtcSpriteTransform (ClientPtr client);
 
 int
 ProcRRGetCrtcSpriteTransform (ClientPtr client);
 
-int
-ProcRRSetCrtcConfigs (ClientPtr client);
-
 /* rrdispatch.c */
 extern _X_EXPORT Bool
 RRClientKnowsRates (ClientPtr	pClient);
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index 12982a8..1f8f2e6 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -138,8 +138,7 @@ RRCrtcNotify (RRCrtcPtr	    crtc,
 	      Rotation	    rotation,
 	      RRTransformPtr transform,
 	      int	    numOutputs,
-	      RROutputPtr   *outputs,
-	      PixmapPtr	    scanoutPixmap)
+	      RROutputPtr   *outputs)
 {
     int	    i, j;
 
@@ -237,15 +236,6 @@ RRCrtcNotify (RRCrtcPtr	    crtc,
 	RRCrtcChanged (crtc, TRUE);
     }
 
-    if (scanoutPixmap != crtc->scanoutPixmap)
-    {
-	if (scanoutPixmap)
-	    ++scanoutPixmap->refcnt;
-	if (crtc->scanoutPixmap)
-	    (*crtc->scanoutPixmap->drawable.pScreen->DestroyPixmap) (crtc->scanoutPixmap);
-	crtc->scanoutPixmap = scanoutPixmap;
-    }
-
     if (crtc->changed && mode)
     {
 	RRTransformCompute (x, y,
@@ -322,8 +312,7 @@ RRCrtcSet (RRCrtcPtr    crtc,
 	   int		y,
 	   Rotation	rotation,
 	   int		numOutputs,
-	   RROutputPtr  *outputs,
-	   PixmapPtr	scanout_pixmap)
+	   RROutputPtr  *outputs)
 {
     ScreenPtr	pScreen = crtc->pScreen;
     Bool	ret = FALSE;
@@ -337,8 +326,7 @@ RRCrtcSet (RRCrtcPtr    crtc,
 	crtc->numOutputs == numOutputs &&
 	!memcmp (crtc->outputs, outputs, numOutputs * sizeof (RROutputPtr)) &&
 	!RRCrtcPendingProperties (crtc) &&
-	!RRCrtcPendingTransform (crtc) &&
-	crtc->scanoutPixmap == scanout_pixmap)
+	!RRCrtcPendingTransform (crtc))
     {
 	ret = TRUE;
     }
@@ -348,7 +336,7 @@ RRCrtcSet (RRCrtcPtr    crtc,
 	if (pScrPriv->rrCrtcSet)
 	{
 	    ret = (*pScrPriv->rrCrtcSet) (pScreen, crtc, mode, x, y,
-					  rotation, numOutputs, outputs, scanout_pixmap);
+					  rotation, numOutputs, outputs);
 	}
 	else
 #endif
@@ -361,7 +349,7 @@ RRCrtcSet (RRCrtcPtr    crtc,
 
 		if (!mode)
 		{
-		    RRCrtcNotify (crtc, NULL, x, y, rotation, NULL, 0, NULL, scanout_pixmap);
+		    RRCrtcNotify (crtc, NULL, x, y, rotation, NULL, 0, NULL);
 		    ret = TRUE;
 		}
 		else
@@ -387,7 +375,7 @@ RRCrtcSet (RRCrtcPtr    crtc,
 		     */
 		    if (ret)
 		    {
-			RRCrtcNotify (crtc, mode, x, y, rotation, NULL, 1, outputs, scanout_pixmap);
+			RRCrtcNotify (crtc, mode, x, y, rotation, NULL, 1, outputs);
 			RRScreenSizeNotify (pScreen);
 		    }
 		}
@@ -585,10 +573,7 @@ RRCrtcGammaNotify (RRCrtcPtr	crtc)
     return TRUE;    /* not much going on here */
 }
 
-/*
- * Compute overall scanout buffer requirements for the specified mode
- */
-void
+static void
 RRModeGetScanoutSize (RRModePtr mode, struct pixman_f_transform *transform,
 		      int *width, int *height)
 {
@@ -1064,7 +1049,7 @@ ProcRRSetCrtcConfig (ClientPtr client)
     }
 
     if (!RRCrtcSet (crtc, mode, stuff->x, stuff->y,
-		    rotation, numOutputs, outputs, NULL))
+		   rotation, numOutputs, outputs))
     {
 	rep.status = RRSetConfigFailed;
 	goto sendReply;
diff --git a/randr/rrinfo.c b/randr/rrinfo.c
index 549ebcc..fdf3726 100644
--- a/randr/rrinfo.c
+++ b/randr/rrinfo.c
@@ -168,7 +168,7 @@ RRScanOldConfig (ScreenPtr pScreen, Rotation rotations)
     /* notice current mode */
     if (newMode)
 	RRCrtcNotify (crtc, newMode, 0, 0, pScrPriv->rotation,
-		      NULL, 1, &output, NULL);
+		      NULL, 1, &output);
 }
 #endif
 
diff --git a/randr/rrpixmap.c b/randr/rrpixmap.c
deleted file mode 100644
index 7d4543c..0000000
--- a/randr/rrpixmap.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright © 2010 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of the copyright holders not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  The copyright holders make no representations
- * about the suitability of this software for any purpose.  It is provided "as
- * is" without express or implied warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- */
-
-#include "randrstr.h"
-#include "xace.h"
-
-int
-ProcRRQueryScanoutPixmaps (ClientPtr client)
-{
-    REQUEST(xRRQueryScanoutPixmapsReq);
-    xRRQueryScanoutPixmapsReply	rep;
-    RRScanoutPixmapInfo		*info;
-    xRRScanoutPixmapInfo	*x_info;
-    int				n_info;
-    int				rc;
-    DrawablePtr			drawable;
-    ScreenPtr			screen;
-    rrScrPrivPtr		screen_priv;
-    int 			n, s;
-
-    REQUEST_SIZE_MATCH(xRRQueryScanoutPixmapsReq);
-    rc = dixLookupDrawable(&drawable, stuff->drawable, client, 0, DixGetAttrAccess);
-    if (rc != Success) {
-	client->errorValue = stuff->drawable;
-	return rc;
-    }
-
-    screen = drawable->pScreen;
-    screen_priv = rrGetScrPriv(screen);
-
-    rep.type = X_Reply;
-    /* rep.status has already been filled in */
-    rep.length = 0;
-    rep.sequenceNumber = client->sequence;
-
-    info = RRQueryScanoutPixmapInfo(screen, &n_info);
-    x_info = calloc(n_info, sizeof (xRRScanoutPixmapInfo));
-    if (n_info && !x_info)
-	return BadAlloc;
-    rep.length += (n_info * sizeof (xRRScanoutPixmapInfo)) >> 2;
-    if (client->swapped) {
-	swaps(&rep.sequenceNumber, n);
-	swapl(&rep.length, n);
-    }
-
-    for (s = 0; s < n_info; s++) {
-	x_info[s].format = info[s].format->id;
-	x_info[s].maxWidth = info[s].maxWidth;
-	x_info[s].maxHeight = info[s].maxHeight;
-	x_info[s].rotations = info[s].rotations;
-	if (client->swapped) {
-	    swapl(&x_info[s].format, n);
-	    swaps(&x_info[s].maxWidth, n);
-	    swaps(&x_info[s].maxHeight, n);
-	    swaps(&x_info[s].rotations, n);
-	}
-    }
-
-    WriteToClient(client, sizeof(rep), (char *)&rep);
-    if (n_info)
-	WriteToClient(client, n_info * sizeof (xRRScanoutPixmapInfo),
-		      (char *) x_info);
-    return Success;
-}
-
-int
-ProcRRCreateScanoutPixmap (ClientPtr client)
-{
-    REQUEST(xRRCreateScanoutPixmapReq);
-    int 		rc;
-    DrawablePtr		drawable;
-    ScreenPtr		screen;
-    rrScrPrivPtr	screen_priv;
-    PixmapPtr		pixmap;
-    int			n_info;
-    RRScanoutPixmapInfo	*info;
-    int			s;
-
-    REQUEST_SIZE_MATCH(xRRCreateScanoutPixmapReq);
-    client->errorValue = stuff->pid;
-    LEGAL_NEW_RESOURCE(stuff->pid, client);
-
-    rc = dixLookupDrawable(&drawable, stuff->drawable, client, 0, DixGetAttrAccess);
-    if (rc != Success) {
-	client->errorValue = stuff->drawable;
-	return rc;
-    }
-    screen = drawable->pScreen;
-    screen_priv = rrGetScrPriv(screen);
-    if (!screen_priv)
-	return BadValue;
-
-    info = RRQueryScanoutPixmapInfo(screen, &n_info);
-    for (s = 0; s < n_info; s++) {
-	if (info[s].format->id == stuff->format)
-	    break;
-    }
-    if (s == n_info || !screen_priv->rrCreateScanoutPixmap) {
-	client->errorValue = stuff->format;
-	return BadValue;
-    }
-    info = &info[s];
-    if (!stuff->width || stuff->width > info->maxWidth) {
-	client->errorValue = stuff->width;
-	return BadValue;
-    }
-    if (!stuff->height || stuff->height > info->maxHeight) {
-	client->errorValue = stuff->height;
-	return BadValue;
-    }
-    if ((stuff->rotations & info->rotations) != stuff->rotations) {
-	client->errorValue = stuff->rotations;
-	return BadValue;
-    }
-
-    pixmap = screen_priv->rrCreateScanoutPixmap (screen,
-						 stuff->width, stuff->height,
-						 info->depth,
-						 stuff->rotations,
-						 info->format);
-    if (!pixmap)
-	return BadAlloc;
-
-    pixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
-    pixmap->drawable.id = stuff->pid;
-    rc = XaceHook(XACE_RESOURCE_ACCESS, client, stuff->pid, RT_PIXMAP,
-		  pixmap, RT_NONE, NULL, DixCreateAccess);
-    if (rc != Success) {
-	screen->DestroyPixmap(pixmap);
-	return rc;
-    }
-    if (!AddResource(stuff->pid, RT_PIXMAP, pixmap))
-	return BadAlloc;
-    return Success;
-}
diff --git a/randr/rrscreen.c b/randr/rrscreen.c
index c738726..af09f68 100644
--- a/randr/rrscreen.c
+++ b/randr/rrscreen.c
@@ -794,10 +794,8 @@ ProcRRSetScreenConfig (ClientPtr client)
     }
     
     rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0, DixWriteAccess);
-    if (rc != Success) {
-	client->errorValue = stuff->drawable;
+    if (rc != Success)
 	return rc;
-    }
 
     pScreen = pDraw->pScreen;
 
@@ -954,7 +952,7 @@ ProcRRSetScreenConfig (ClientPtr client)
 	for (c = 0; c < pScrPriv->numCrtcs; c++)
 	{
 	    if (!RRCrtcSet (pScrPriv->crtcs[c], NULL, 0, 0, RR_Rotate_0,
-			    0, NULL, NULL))
+			    0, NULL))
 	    {
 		rep.status = RRSetConfigFailed;
 		/* XXX recover from failure */
@@ -970,7 +968,7 @@ ProcRRSetScreenConfig (ClientPtr client)
 	}
     }
 
-    if (!RRCrtcSet (crtc, mode, 0, 0, stuff->rotation, 1, &output, NULL))
+    if (!RRCrtcSet (crtc, mode, 0, 0, stuff->rotation, 1, &output))
 	rep.status = RRSetConfigFailed;
     else {
 	pScrPriv->lastSetTime = time;
commit 9f47780ecdc7693f756587a758ec0141e75cb1eb
Author: Keith Packard <keithp at keithp.com>
Date:   Wed Feb 23 11:17:36 2011 -0800

    Revert "randr: Hook up the new RandR 1.4 functionality"
    
    This reverts commit afb6ebf1d5829346c40fe1053c9f50afe926e6c6.

diff --git a/include/protocol-versions.h b/include/protocol-versions.h
index c8c7f5f..1d33bdd 100644
--- a/include/protocol-versions.h
+++ b/include/protocol-versions.h
@@ -65,7 +65,7 @@
 
 /* RandR */
 #define SERVER_RANDR_MAJOR_VERSION		1
-#define SERVER_RANDR_MINOR_VERSION		4
+#define SERVER_RANDR_MINOR_VERSION		3
 
 /* Record */
 #define SERVER_RECORD_MAJOR_VERSION		1
diff --git a/randr/rrdispatch.c b/randr/rrdispatch.c
index b0b451c..ac4d2ac 100644
--- a/randr/rrdispatch.c
+++ b/randr/rrdispatch.c
@@ -224,11 +224,5 @@ int (*ProcRandrVector[RRNumberRequests])(ClientPtr) = {
     ProcRRSetPanning,		/* 29 */
     ProcRRSetOutputPrimary,	/* 30 */
     ProcRRGetOutputPrimary,	/* 31 */
-/* V1.4 additions */
-    ProcRRQueryScanoutPixmaps,	/* 32 */
-    ProcRRCreateScanoutPixmap,	/* 33 */
-    ProcRRSetCrtcSpriteTransform,/* 34 */
-    ProcRRGetCrtcSpriteTransform,/* 35 */
-    ProcRRSetCrtcConfigs,	 /* 36 */
 };
 
diff --git a/randr/rrsdispatch.c b/randr/rrsdispatch.c
index c848f91..e16090a 100644
--- a/randr/rrsdispatch.c
+++ b/randr/rrsdispatch.c
@@ -461,132 +461,6 @@ SProcRRGetOutputPrimary (ClientPtr client)
     return ProcRandrVector[stuff->randrReqType](client);
 }
 
-static int
-SProcRRQueryScanoutPixmaps (ClientPtr client)
-{
-    int n;
-    REQUEST(xRRQueryScanoutPixmapsReq);
-
-    REQUEST_SIZE_MATCH(xRRQueryScanoutPixmapsReq);
-    swaps(&stuff->length, n);
-    swapl(&stuff->drawable, n);
-    return ProcRandrVector[stuff->randrReqType](client);
-}
-
-static int
-SProcRRCreateScanoutPixmap (ClientPtr client)
-{
-    int n;
-    REQUEST(xRRCreateScanoutPixmapReq);
-
-    REQUEST_SIZE_MATCH(xRRCreateScanoutPixmapReq);
-    swaps(&stuff->length, n);
-    swapl(&stuff->pid, n);
-    swapl(&stuff->drawable, n);
-    swaps(&stuff->width, n);
-    swaps(&stuff->height, n);
-    swapl(&stuff->format, n);
-    swaps(&stuff->rotations, n);
-    return ProcRandrVector[stuff->randrReqType](client);
-}
-
-static void
-swap_transform(xRenderTransform *t)
-{
-    int n;
-    swapl(&t->matrix11, n);
-    swapl(&t->matrix12, n);
-    swapl(&t->matrix13, n);
-    swapl(&t->matrix21, n);
-    swapl(&t->matrix22, n);
-    swapl(&t->matrix23, n);
-    swapl(&t->matrix31, n);
-    swapl(&t->matrix32, n);
-    swapl(&t->matrix33, n);
-}
-
-static int
-SProcRRSetCrtcSpriteTransform (ClientPtr client)
-{
-    int n;
-    REQUEST(xRRSetCrtcSpriteTransformReq);
-
-    REQUEST_SIZE_MATCH(xRRSetCrtcSpriteTransformReq);
-    swaps(&stuff->length, n);
-    swapl(&stuff->crtc, n);
-    swap_transform(&stuff->positionTransform);
-    swap_transform(&stuff->imageTransform);
-    return ProcRandrVector[stuff->randrReqType](client);
-}
-
-static int
-SProcRRGetCrtcSpriteTransform (ClientPtr client)
-{
-    int n;
-    REQUEST(xRRGetCrtcSpriteTransformReq);
-
-    REQUEST_SIZE_MATCH(xRRGetCrtcSpriteTransformReq);
-    swaps(&stuff->length, n);
-    swapl(&stuff->crtc, n);
-    return ProcRandrVector[stuff->randrReqType](client);
-}
-
-static int
-SProcRRSetCrtcConfigs (ClientPtr client)
-{
-    int n;
-    REQUEST(xRRSetCrtcConfigsReq);
-    int c;
-    int extra_len;
-    int num_configs;
-    int num_output_ids;
-    xRRCrtcConfig *x_configs;
-
-    REQUEST_AT_LEAST_SIZE(xRRSetCrtcConfigsReq);
-    swaps(&stuff->length, n);
-    swapl(&stuff->drawable, n);
-    swaps(&stuff->screenPixmapWidth, n);
-    swaps(&stuff->screenPixmapHeight, n);
-    swaps(&stuff->screenWidth, n);
-    swaps(&stuff->screenHeight, n);
-    swapl(&stuff->widthInMillimeters, n);
-    swapl(&stuff->heightInMillimeters, n);
-    swaps(&stuff->nConfigs, n);
-
-    extra_len = client->req_len - bytes_to_int32(sizeof(xRRSetCrtcConfigsReq));
-
-    num_configs = stuff->nConfigs;
-
-    /* Check request length against number of configs specified */
-    if (num_configs * (sizeof (xRRCrtcConfig) >> 2) > extra_len)
-	return BadLength;
-
-    x_configs = (xRRCrtcConfig *) (stuff + 1);
-    for (c = 0; c < num_configs; c++) {
-	swapl(&x_configs->crtc, n);
-	swaps(&x_configs->x, n);
-	swaps(&x_configs->y, n);
-	swapl(&x_configs->mode, n);
-	swaps(&x_configs->rotation, n);
-	swaps(&x_configs->nOutput, n);
-	swap_transform(&x_configs->spritePositionTransform);
-	swap_transform(&x_configs->spriteImageTransform);
-	swapl(&x_configs->pixmap, n);
-	swaps(&x_configs->xPixmap, n);
-	swaps(&x_configs->yPixmap, n);
-	x_configs++;
-    }
-
-    /* Let the other dispatch function deal with verifying that
-     * the right number of output ids are present, just
-     * swap whatever is here
-     */
-    num_output_ids = extra_len - (num_configs * (sizeof (xRRCrtcConfig)) >> 2);
-    SwapLongs((CARD32 *) x_configs, num_output_ids);
-
-    return ProcRandrVector[stuff->randrReqType](client);
-}
-
 int (*SProcRandrVector[RRNumberRequests])(ClientPtr) = {
     SProcRRQueryVersion,	/* 0 */
 /* we skip 1 to make old clients fail pretty immediately */
@@ -625,11 +499,5 @@ int (*SProcRandrVector[RRNumberRequests])(ClientPtr) = {
     SProcRRSetPanning,		/* 29 */
     SProcRRSetOutputPrimary,	/* 30 */
     SProcRRGetOutputPrimary,	/* 31 */
-/* V1.4 additions */
-    SProcRRQueryScanoutPixmaps,	/* 32 */
-    SProcRRCreateScanoutPixmap,	/* 33 */
-    SProcRRSetCrtcSpriteTransform,/* 34 */
-    SProcRRGetCrtcSpriteTransform,/* 35 */
-    SProcRRSetCrtcConfigs,	/* 36 */
 };
 
commit 793a242c89fccdbf1a2557ba33da1da2cb4ff8c4
Author: Keith Packard <keithp at keithp.com>
Date:   Wed Feb 23 11:17:33 2011 -0800

    Revert "DIX is responsible for ref counting scanout pixmaps."
    
    This reverts commit 96b4d4787bf82edd9d06eb9a6e94bc45412c7df2.

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index b5e9dc2..94f2c50 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -414,6 +414,10 @@ done:
 	crtc->active = TRUE;
 	if (scrn->pScreen)
 	    xf86CrtcSetScreenSubpixelOrder (scrn->pScreen);
+	if (crtc->scanoutPixmap)
+	    ++crtc->scanoutPixmap->refcnt;
+	if (saved_scanout_pixmap)
+	    (*scrn->pScreen->DestroyPixmap)(saved_scanout_pixmap);
 	if (scrn->ModeSet)
 	    scrn->ModeSet(scrn);
     } else {
commit 7b7cd3f121b3904ad851155f853ce87a0e00d002
Author: Keith Packard <keithp at keithp.com>
Date:   Wed Feb 23 11:17:29 2011 -0800

    Revert "Set sprite transforms from RRSetCrtcConfigs"
    
    This reverts commit a88d70fb20a2bc3152b84adff4380857e6cfadf5.

diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
index dfe2cc3..b0eabdd 100644
--- a/hw/xfree86/modes/xf86RandR12.c
+++ b/hw/xfree86/modes/xf86RandR12.c
@@ -1819,8 +1819,8 @@ xf86RRConvertCrtcConfig(xf86CrtcSetConfigPtr	xf86_config,
 	return FALSE;
     for (o = 0; o < rr_config->numOutputs; o++)
 	xf86_config->outputs[o] = rr_config->outputs[o]->devPrivate;
-    xf86_config->sprite_position_transform = rr_config->sprite_position_f_transform;
-    xf86_config->sprite_image_transform = rr_config->sprite_image_f_transform;
+    xf86_config->sprite_position_transform = rr_config->sprite_position_transform;
+    xf86_config->sprite_image_transform = rr_config->sprite_image_transform;
     xf86_config->pixmap = rr_config->pixmap;
     xf86_config->pixmap_x = rr_config->pixmap_x;
     xf86_config->pixmap_y = rr_config->pixmap_y;
diff --git a/randr/mirrcrtc.c b/randr/mirrcrtc.c
index d493a0e..cc76797 100644
--- a/randr/mirrcrtc.c
+++ b/randr/mirrcrtc.c
@@ -60,21 +60,14 @@ miRRSetCrtcConfig(RRCrtcConfigPtr crtc_config)
 	x = crtc_config->pixmap_x;
 	y = crtc_config->pixmap_y;
     }
-    if (!RRCrtcSet(crtc_config->crtc,
-		   crtc_config->mode,
-		   x,
-		   y,
-		   crtc_config->rotation,
-		   crtc_config->numOutputs,
-		   crtc_config->outputs,
-		   crtc_config->pixmap))
-	return FALSE;
-    RRCrtcSpriteTransformSet(crtc_config->crtc,
-			     &crtc_config->sprite_position_transform,
-			     &crtc_config->sprite_image_transform,
-			     &crtc_config->sprite_position_f_transform,
-			     &crtc_config->sprite_image_f_transform);
-    return TRUE;
+    return RRCrtcSet(crtc_config->crtc,
+		     crtc_config->mode,
+		     x,
+		     y,
+		     crtc_config->rotation,
+		     crtc_config->numOutputs,
+		     crtc_config->outputs,
+		     crtc_config->pixmap);
 }
 
 Bool
diff --git a/randr/randrstr.h b/randr/randrstr.h
index 8240824..c231972 100644
--- a/randr/randrstr.h
+++ b/randr/randrstr.h
@@ -154,10 +154,8 @@ struct _rrCrtcConfig {
     Rotation			rotation;
     int				numOutputs;
     RROutputPtr			*outputs;
-    PictTransform		sprite_position_transform;
-    PictTransform		sprite_image_transform;
-    struct pict_f_transform	sprite_position_f_transform;
-    struct pict_f_transform	sprite_image_f_transform;
+    struct pict_f_transform	sprite_position_transform;
+    struct pict_f_transform	sprite_image_transform;
     PixmapPtr			pixmap;
     int				pixmap_x, pixmap_y;
 };
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index 0b2bc28..12982a8 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -430,10 +430,8 @@ RRCrtcCurrentConfig(RRCrtcPtr crtc,
     if (!crtc_config->outputs)
 	return FALSE;
     memcpy(crtc_config->outputs, crtc->outputs, crtc->numOutputs * sizeof (RROutputPtr));
-    crtc_config->sprite_position_transform = crtc->client_sprite_position_transform;
-    crtc_config->sprite_image_transform = crtc->client_sprite_image_transform;
-    crtc_config->sprite_position_f_transform = crtc->client_sprite_f_position_transform;
-    crtc_config->sprite_image_f_transform = crtc->client_sprite_f_image_transform;
+    crtc_config->sprite_position_transform = crtc->client_sprite_f_position_transform;
+    crtc_config->sprite_image_transform = crtc->client_sprite_f_image_transform;
 
     /* XXX add pixmap stuff */
     crtc_config->pixmap = NULL;
@@ -720,8 +718,8 @@ RRScreenCoversCrtc(RRScreenConfigPtr screen_config,
 			crtc_config->mode->mode.width, crtc_config->mode->mode.height,
 			crtc_config->rotation,
 			client_transform,
-			&crtc_config->sprite_position_f_transform,
-			&crtc_config->sprite_image_f_transform,
+			&crtc_config->sprite_position_transform,
+			&crtc_config->sprite_image_transform,
 			NULL, &f_transform, NULL, NULL, NULL, NULL);
 
     RRModeGetScanoutSize (crtc_config->mode, &f_transform,
@@ -1471,6 +1469,15 @@ ProcRRGetCrtcTransform (ClientPtr client)
     return Success;
 }
 
+static void
+pixman_f_transform_from_xRenderTransform(struct pixman_f_transform *f_transform,
+					 xRenderTransform *x_transform)
+{
+    struct pixman_transform	transform;
+    PictTransform_from_xRenderTransform(&transform, x_transform);
+    pixman_f_transform_from_pixman_transform(f_transform, &transform);
+}
+
 static int
 RRConvertCrtcConfig(ClientPtr client, ScreenPtr screen,
 		    RRScreenConfigPtr screen_config,
@@ -1587,14 +1594,10 @@ RRConvertCrtcConfig(ClientPtr client, ScreenPtr screen,
     config->rotation = x->rotation;
     config->numOutputs = x->nOutput;
     config->outputs = outputs;
-    PictTransform_from_xRenderTransform(&config->sprite_position_transform,
+    pixman_f_transform_from_xRenderTransform(&config->sprite_position_transform,
 					     &x->spritePositionTransform);
-    PictTransform_from_xRenderTransform(&config->sprite_image_transform,
+    pixman_f_transform_from_xRenderTransform(&config->sprite_image_transform,
 					     &x->spriteImageTransform);
-    pixman_f_transform_from_pixman_transform(&config->sprite_position_f_transform,
-					     &config->sprite_position_transform);
-    pixman_f_transform_from_pixman_transform(&config->sprite_image_f_transform,
-					     &config->sprite_image_transform);
     config->pixmap = pixmap;
     config->pixmap_x = x->xPixmap;
     config->pixmap_y = x->yPixmap;
commit fd9331f6eb39a28da7de4867b2e3a460f667d514
Author: Keith Packard <keithp at keithp.com>
Date:   Wed Feb 23 11:17:24 2011 -0800

    Revert "Separate out screen size and screen pixmap sizes in RRScreenSizeSet"
    
    This reverts commit 752c368421c1c824752cf467fba9318d75d2ca2c.

diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c
index 9e2ffaa..1a5bf8a 100644
--- a/hw/xfree86/common/xf86Helper.c
+++ b/hw/xfree86/common/xf86Helper.c
@@ -1038,12 +1038,7 @@ xf86SetRootClip (ScreenPtr pScreen, Bool enable)
 	RegionInit(&pWin->winSize, &box, 1);
 	RegionInit(&pWin->borderSize, &box, 1);
 	if (WasViewable)
-	{
-	    PixmapPtr	pPixmap = (*pScreen->GetScreenPixmap) (pScreen);
-	    box.x2 = pPixmap->drawable.width;
-	    box.y2 = pPixmap->drawable.height;
 	    RegionReset(&pWin->borderClip, &box);
-	}
 	pWin->drawable.width = pScreen->width;
 	pWin->drawable.height = pScreen->height;
         RegionBreak(&pWin->clipList);
@@ -1121,6 +1116,7 @@ xf86EnableDisableFBAccess(int scrnIndex, Bool enable)
 	 */
 	if (!xf86Resetting)
 	    xf86SetRootClip (pScreen, TRUE);
+
     }
     else
     {
diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
index 407bf35..dfe2cc3 100644
--- a/hw/xfree86/modes/xf86RandR12.c
+++ b/hw/xfree86/modes/xf86RandR12.c
@@ -659,12 +659,10 @@ xf86RandR12SetConfig (ScreenPtr		pScreen,
 
 static Bool
 xf86RandR12ScreenSetSize (ScreenPtr	pScreen,
-			  CARD16	width,
-			  CARD16	height,
-			  CARD16	pixWidth,
-			  CARD16	pixHeight,
-			  CARD32	mmWidth,
-			  CARD32	mmHeight)
+			CARD16		width,
+			CARD16		height,
+			CARD32		mmWidth,
+			CARD32		mmHeight)
 {
     XF86RandRInfoPtr	randrp = XF86RANDRINFO(pScreen);
     ScrnInfoPtr		pScrn = XF86SCRNINFO(pScreen);
@@ -672,8 +670,6 @@ xf86RandR12ScreenSetSize (ScreenPtr	pScreen,
     WindowPtr		pRoot = pScreen->root;
     PixmapPtr		pScrnPix;
     Bool		ret = FALSE;
-    Bool		pixSizeChanged = FALSE;
-    Bool		winSizeChanged = FALSE;
     int                 c;
 
     if (xf86RandR12Key) {
@@ -681,85 +677,46 @@ xf86RandR12ScreenSetSize (ScreenPtr	pScreen,
         {
 	    randrp->virtualX = pScrn->virtualX;
 	    randrp->virtualY = pScrn->virtualY;
-	    pixSizeChanged = TRUE;
         }
     }
+    if (pRoot && pScrn->vtSema)
+	(*pScrn->EnableDisableFBAccess) (pScreen->myNum, FALSE);
 
-    pScrnPix = (*pScreen->GetScreenPixmap)(pScreen);
-    if (pixWidth != pScrnPix->drawable.width ||
-	pixHeight != pScrnPix->drawable.height)
-	pixSizeChanged = TRUE;
-
-    if (width != pScreen->width || height != pScreen->height)
-	winSizeChanged = TRUE;
-
-    if (pixSizeChanged)
-    {
-	if (pRoot && pScrn->vtSema)
-	    (*pScrn->EnableDisableFBAccess) (pScreen->myNum, FALSE);
-
-	/* Let the driver update virtualX and virtualY */
-	if (!(*config->funcs->resize)(pScrn, pixWidth, pixHeight))
-	    goto finish;
-    }
+    /* Let the driver update virtualX and virtualY */
+    if (!(*config->funcs->resize)(pScrn, width, height))
+	goto finish;
 
     ret = TRUE;
-
-    if (winSizeChanged)
-    {
-	/* Update panning information */
-	for (c = 0; c < config->num_crtc; c++) {
-	    xf86CrtcPtr crtc = config->crtc[c];
-	    if (crtc->panningTotalArea.x2 > crtc->panningTotalArea.x1 ||
-		crtc->panningTotalArea.y2 > crtc->panningTotalArea.y1) {
-		if (crtc->panningTotalArea.x2 > crtc->panningTrackingArea.x1)
-		    crtc->panningTotalArea.x2 += width  - pScreen->width;
-		if (crtc->panningTotalArea.y2 > crtc->panningTrackingArea.y1)
-		    crtc->panningTotalArea.y2 += height - pScreen->height;
-		if (crtc->panningTrackingArea.x2 > crtc->panningTrackingArea.x1)
-		    crtc->panningTrackingArea.x2 += width  - pScreen->width;
-		if (crtc->panningTrackingArea.y2 > crtc->panningTrackingArea.y1)
-		    crtc->panningTrackingArea.y2 += height - pScreen->height;
-		xf86RandR13VerifyPanningArea (crtc, width, height);
-		xf86RandR13Pan (crtc, randrp->pointerX, randrp->pointerY);
-	    }
+    /* Update panning information */
+    for (c = 0; c < config->num_crtc; c++) {
+	xf86CrtcPtr crtc = config->crtc[c];
+	if (crtc->panningTotalArea.x2 > crtc->panningTotalArea.x1 ||
+	    crtc->panningTotalArea.y2 > crtc->panningTotalArea.y1) {
+	    if (crtc->panningTotalArea.x2 > crtc->panningTrackingArea.x1)
+		crtc->panningTotalArea.x2 += width  - pScreen->width;
+	    if (crtc->panningTotalArea.y2 > crtc->panningTrackingArea.y1)
+		crtc->panningTotalArea.y2 += height - pScreen->height;
+	    if (crtc->panningTrackingArea.x2 > crtc->panningTrackingArea.x1)
+		crtc->panningTrackingArea.x2 += width  - pScreen->width;
+	    if (crtc->panningTrackingArea.y2 > crtc->panningTrackingArea.y1)
+		crtc->panningTrackingArea.y2 += height - pScreen->height;
+	    xf86RandR13VerifyPanningArea (crtc, width, height);
+	    xf86RandR13Pan (crtc, randrp->pointerX, randrp->pointerY);
 	}
     }
 
     pScrnPix = (*pScreen->GetScreenPixmap)(pScreen);
-    pScreen->width = width;
-    pScreen->height = height;
-    if (pRoot)
-    {
-	BoxRec	box;
-
-	pRoot->drawable.width = width;
-	pRoot->drawable.height = height;
-	box.x1 = 0;
-	box.y1 = 0;
-	box.x2 = width;
-	box.y2 = height;
-	RegionInit(&pRoot->winSize, &box, 1);
-	RegionInit(&pRoot->borderSize, &box, 1);
-    }
-    pScrnPix->drawable.width = pixWidth;
-    pScrnPix->drawable.height = pixHeight;
+    pScreen->width = pScrnPix->drawable.width = width;
+    pScreen->height = pScrnPix->drawable.height = height;
     randrp->mmWidth = pScreen->mmWidth = mmWidth;
     randrp->mmHeight = pScreen->mmHeight = mmHeight;
 
-    if (winSizeChanged)
-    {
-	xf86SetViewport (pScreen, pScreen->width-1, pScreen->height-1);
-	xf86SetViewport (pScreen, 0, 0);
-    }
+    xf86SetViewport (pScreen, pScreen->width-1, pScreen->height-1);
+    xf86SetViewport (pScreen, 0, 0);
 
 finish:
-    if (pixSizeChanged)
-    {
-	if (pRoot && pScrn->vtSema)
-	    (*pScrn->EnableDisableFBAccess) (pScreen->myNum, TRUE);
-    }
-
+    if (pRoot && pScrn->vtSema)
+	(*pScrn->EnableDisableFBAccess) (pScreen->myNum, TRUE);
 #if RANDR_12_INTERFACE
     if (xf86RandR12Key && pScreen->root && ret)
 	RRScreenSizeNotify (pScreen);
@@ -861,8 +818,6 @@ xf86RandR12CreateScreenResources (ScreenPtr pScreen)
 	xf86RandR12ScreenSetSize (pScreen,
 				  width,
 				  height,
-				  width,
-				  height,
 				  mmWidth,
 				  mmHeight);
     }
diff --git a/randr/mirrcrtc.c b/randr/mirrcrtc.c
index a9ee6b4..d493a0e 100644
--- a/randr/mirrcrtc.c
+++ b/randr/mirrcrtc.c
@@ -28,6 +28,11 @@ miRRSetScreenConfig(ScreenPtr screen,
 {
     RRScreenConfigRec	old_screen_config;
 
+    /* XXX deal with separate pixmap/screen sizes */
+    if (screen_config->screen_pixmap_width != screen_config->screen_width ||
+	screen_config->screen_pixmap_height != screen_config->screen_height)
+	return FALSE;
+
     RRScreenCurrentConfig(screen, &old_screen_config);
 
     /* Check and see if nothing has changed */
@@ -42,8 +47,6 @@ miRRSetScreenConfig(ScreenPtr screen,
     return RRScreenSizeSet(screen,
 			   screen_config->screen_width,
 			   screen_config->screen_height,
-			   screen_config->screen_pixmap_width,
-			   screen_config->screen_pixmap_height,
 			   screen_config->mm_width,
 			   screen_config->mm_height);
 }
diff --git a/randr/randrstr.h b/randr/randrstr.h
index 7c553f2..8240824 100644
--- a/randr/randrstr.h
+++ b/randr/randrstr.h
@@ -191,8 +191,6 @@ struct _rrOutput {
 typedef Bool (*RRScreenSetSizeProcPtr) (ScreenPtr	pScreen,
 					CARD16		width,
 					CARD16		height,
-					CARD16		pixWidth,
-					CARD16		pixHeight,
 					CARD32		mmWidth,
 					CARD32		mmHeight);
 					
@@ -480,8 +478,6 @@ extern _X_EXPORT Bool
 RRScreenSizeSet (ScreenPtr  pScreen,
 		 CARD16	    width,
 		 CARD16	    height,
-		 CARD16	    pixWidth,
-		 CARD16	    pixHeight,
 		 CARD32	    mmWidth,
 		 CARD32	    mmHeight);
 
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index 97aa3d7..0b2bc28 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -435,9 +435,10 @@ RRCrtcCurrentConfig(RRCrtcPtr crtc,
     crtc_config->sprite_position_f_transform = crtc->client_sprite_f_position_transform;
     crtc_config->sprite_image_f_transform = crtc->client_sprite_f_image_transform;
 
-    crtc_config->pixmap = crtc->scanoutPixmap;
-    crtc_config->pixmap_x = crtc->x;
-    crtc_config->pixmap_y = crtc->y;
+    /* XXX add pixmap stuff */
+    crtc_config->pixmap = NULL;
+    crtc_config->pixmap_x = 0;
+    crtc_config->pixmap_y = 0;
     return TRUE;
 }
 
@@ -1509,8 +1510,6 @@ RRConvertCrtcConfig(ClientPtr client, ScreenPtr screen,
 
     if (x->pixmap == None)
 	pixmap = NULL;
-    else if (x->pixmap == RR_CurrentScanoutPixmap)
-	pixmap = crtc->scanoutPixmap;
     else
     {
 	rc = dixLookupResourceByType((pointer *) &pixmap, x->pixmap,
diff --git a/randr/rrscreen.c b/randr/rrscreen.c
index 0efc62e..c738726 100644
--- a/randr/rrscreen.c
+++ b/randr/rrscreen.c
@@ -168,8 +168,6 @@ Bool
 RRScreenSizeSet (ScreenPtr  pScreen,
 		 CARD16	    width,
 		 CARD16	    height,
-		 CARD16	    pixWidth,
-		 CARD16	    pixHeight,
 		 CARD32	    mmWidth,
 		 CARD32	    mmHeight)
 {
@@ -180,7 +178,6 @@ RRScreenSizeSet (ScreenPtr  pScreen,
     {
 	return (*pScrPriv->rrScreenSetSize) (pScreen,
 					     width, height,
-					     pixWidth, pixHeight,
 					     mmWidth, mmHeight);
     }
 #endif
@@ -321,7 +318,6 @@ ProcRRSetScreenSize (ClientPtr client)
     }
     if (!RRScreenSizeSet (pScreen, 
 			  stuff->width, stuff->height,
-			  stuff->width, stuff->height,
 			  stuff->widthInMillimeters,
 			  stuff->heightInMillimeters))
     {
@@ -965,7 +961,7 @@ ProcRRSetScreenConfig (ClientPtr client)
 		goto sendReply;
 	    }
 	}
-	if (!RRScreenSizeSet (pScreen, width, height, width, height,
+	if (!RRScreenSizeSet (pScreen, width, height,
 			      pScreen->mmWidth, pScreen->mmHeight))
 	{
 	    rep.status = RRSetConfigFailed;
commit 4d91e7a63161cdde9af53aedb3fe3e53dbe3049e
Author: Keith Packard <keithp at keithp.com>
Date:   Wed Feb 23 11:17:20 2011 -0800

    Revert "ProcRRSetCrtcConfigs uses 'configs' without being initialized"
    
    This reverts commit b0f4bd61f0caf80f3be9a176f1f7a707bc6628d8.

diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index 0fc8188..97aa3d7 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -1682,9 +1682,9 @@ ProcRRSetCrtcConfigs (ClientPtr client)
     rrScrPrivPtr	    scr_priv;
     xRRCrtcConfig	    *x_configs;
     RRScreenConfigRec	    screen_config;
-    RRCrtcConfigPtr	    configs = NULL;
+    RRCrtcConfigPtr	    configs;
     RROutput		    *output_ids;
-    int			    num_configs = 0;
+    int			    num_configs;
     int			    rc, i;
     int			    extra_len;
     int			    num_output_ids;
commit 00d0b235cfbfb162ddd58c088d2ed03e55a9c5cb
Author: Keith Packard <keithp at keithp.com>
Date:   Wed Feb 23 11:16:48 2011 -0800

    Revert "randr: handle RRSetCrtcConfigs request with zero configs"
    
    This reverts commit 0d01b66df9081ef48843b3bad81c56bb2cd1ae69.

diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index 5fe6900..0fc8188 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -1750,6 +1750,9 @@ ProcRRSetCrtcConfigs (ClientPtr client)
     screen_config.mm_width = stuff->widthInMillimeters;
     screen_config.mm_height = stuff->heightInMillimeters;
 
+    if (num_configs == 0)
+	return Success;
+
     output_ids = (RROutput *) (x_configs + num_configs);
 
     /*
@@ -1757,7 +1760,7 @@ ProcRRSetCrtcConfigs (ClientPtr client)
      * server crtc configurations
      */
     configs = calloc(num_configs, sizeof (RRCrtcConfigRec));
-    if (num_configs > 0 && configs == NULL)
+    if (!configs)
 	return BadAlloc;
     for (i = 0; i < num_configs; i++) {
 	rc = RRConvertCrtcConfig(client, screen, &screen_config,
@@ -1770,8 +1773,7 @@ ProcRRSetCrtcConfigs (ClientPtr client)
 	output_ids += x_configs[i].nOutput;
     }
 
-    if (num_configs &&
-	!RRSetCrtcConfigs (screen, &screen_config, configs, num_configs))
+    if (!RRSetCrtcConfigs (screen, &screen_config, configs, num_configs))
     {
 	rep.status = RRSetConfigFailed;
 	goto sendReply;
commit 720c895db9327bbdc32215a67236303d2ceafad4
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Feb 23 13:36:20 2011 -0500

    Add mode field to ConstrainCursorHarder
    
    For Pointer Barriers, the movement mode is important and must be passed
    through.
    
    Reviewed-by: Adam Jackson <ajax at redhat.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/include/scrnintstr.h b/include/scrnintstr.h
index 9f4fbf3..a9357e8 100644
--- a/include/scrnintstr.h
+++ b/include/scrnintstr.h
@@ -404,7 +404,7 @@ typedef    void (* DeviceCursorCleanupProcPtr)(
         ScreenPtr    /* pScreen */);
 
 typedef void (*ConstrainCursorHarderProcPtr)(
-       DeviceIntPtr, ScreenPtr, int *, int *);
+       DeviceIntPtr, ScreenPtr, int, int *, int *);
 
 typedef struct _Screen {
     int			myNum;	/* index of this instance in Screens[] */
commit a16e282200f84233041e5a565c6363a5a78be525
Author: Adam Jackson <ajax at redhat.com>
Date:   Mon Feb 8 15:40:22 2010 -0500

    xfree86: Fix the sdk headers to be multilib-safe
    
    Use _LP64 (verified on gcc and sun compilers) instead of _XSERVER64 in
    internal header usage, and always define _XSERVER64 for modules if _LP64
    is defined.  Prevents differing xorg-server.h between 32 and 64 bit
    packages.
    
    Reviewed-by: Alan Coopersmith <alan.coopersmith at oracle.com>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/include/colormapst.h b/include/colormapst.h
index 0ba5bd0..b597e2c 100644
--- a/include/colormapst.h
+++ b/include/colormapst.h
@@ -103,12 +103,12 @@ typedef struct _ColormapRec
 {
     VisualPtr	pVisual;
     short	class;		/* PseudoColor or DirectColor */
-#if defined(_XSERVER64)
+#if defined(_LP64)
     short	pad0;
     XID		pad1;
 #endif
     XID		mid;		/* client's name for colormap */
-#if defined(_XSERVER64) && (X_BYTE_ORDER == X_LITTLE_ENDIAN)
+#if defined(_LP64) && (X_BYTE_ORDER == X_LITTLE_ENDIAN)
     XID		pad2;
 #endif
     ScreenPtr	pScreen;	/* screen map is associated with */
diff --git a/include/xorg-server.h.in b/include/xorg-server.h.in
index 76cab16..b10b994 100644
--- a/include/xorg-server.h.in
+++ b/include/xorg-server.h.in
@@ -157,9 +157,6 @@
 /* Name of X server */
 #undef __XSERVERNAME__
 
-/* Define to 1 if unsigned long is 64 bits. */
-#undef _XSERVER64
-
 /* Building vgahw module */
 #undef WITH_VGAHW
 
@@ -187,4 +184,8 @@
 /* X Access Control Extension */
 #undef XACE
 
+#ifdef _LP64
+#define _XSERVER64 1
+#endif
+
 #endif /* _XORG_SERVER_H_ */
commit dc498b433f36af5d2de3065e7c64cdb575385d81
Author: Adam Jackson <ajax at redhat.com>
Date:   Mon Feb 8 15:23:04 2010 -0500

    xfree86: If the driver found modes on an output, don't add more
    
    Inferring modes from sync ranges is only valid if the monitor says it's
    valid.  If the monitor says it's valid, then we'll have already added
    those modes during EDID block parse.  If it doesn't, then we should
    believe it.
    
    If there's no EDID for an output, but sync ranges from the config, we'll
    still add default modes as normal.
    
    Reviewed-by: Alex Deucher <alexdeucher at gmail.com>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index b5e9dc2..0ae63ba 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -1595,7 +1595,7 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
 	int		    min_clock = 0;
 	int		    max_clock = 0;
 	double		    clock;
-	Bool		    add_default_modes = xf86ReturnOptValBool(output->options, OPTION_DEFAULT_MODES, TRUE);
+	Bool		    add_default_modes;
 	Bool		    debug_modes = config->debug_modes ||
 					  xf86Initialising;
 	enum det_monrec_source sync_source = sync_default;
@@ -1641,6 +1641,14 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
 	}
 	
 	output_modes = (*output->funcs->get_modes) (output);
+
+	/*
+	 * If the user has a preference, respect it.
+	 * Otherwise, don't second-guess the driver.
+	 */
+	if (!xf86GetOptValBool(output->options, OPTION_DEFAULT_MODES,
+			       &add_default_modes))
+	    add_default_modes = (output_modes == NULL);
 	
 	edid_monitor = output->MonInfo;
 	
commit 303977fbcf9c641b7e19dfde192cef585f5b455c
Author: Adam Jackson <ajax at redhat.com>
Date:   Tue Feb 8 14:52:49 2011 -0500

    glxproxy: warning fix
    
    glxvendor.c: In function ‘__glXVForwardPipe0WithReply’:
    glxvendor.c:205:10: warning: ‘be_buf’ may be used uninitialized in this function
    
    Reviewed-by: Alan Coopersmith <alan.coopersmith at oracle.com>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/dmx/glxProxy/glxvendor.c b/hw/dmx/glxProxy/glxvendor.c
index 1d7b199..0b6ba41 100644
--- a/hw/dmx/glxProxy/glxvendor.c
+++ b/hw/dmx/glxProxy/glxvendor.c
@@ -202,7 +202,7 @@ int __glXVForwardPipe0WithReply( __GLXclientState *cl, GLbyte *pc )
    xGLXVendorPrivReply be_reply;
     __GLXcontext *glxc;
    int buf_size;
-   char *be_buf;
+   char *be_buf = NULL;
    int   be_buf_size;
    DMXScreenInfo *dmxScreen;
    Display *dpy;
commit 405ad0610d6e2f4606768294b655ac52aee9ae58
Author: Adam Jackson <ajax at redhat.com>
Date:   Tue Feb 8 14:51:47 2011 -0500

    glxproxy: warning fix
    
    glxvendor.c: In function ‘__glXVForwardAllWithReply’:
    glxvendor.c:284:10: warning: ‘be_buf’ may be used uninitialized in this function
    glxvendor.c:285:10: warning: ‘be_buf_size’ may be used uninitialized in this function
    
    Reviewed-by: Alan Coopersmith <alan.coopersmith at oracle.com>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/dmx/glxProxy/glxvendor.c b/hw/dmx/glxProxy/glxvendor.c
index 7ba727d..1d7b199 100644
--- a/hw/dmx/glxProxy/glxvendor.c
+++ b/hw/dmx/glxProxy/glxvendor.c
@@ -281,8 +281,8 @@ int __glXVForwardAllWithReply( __GLXclientState *cl, GLbyte *pc )
    xGLXVendorPrivReply be_reply;
     __GLXcontext *glxc;
    int buf_size;
-   char *be_buf;
-   int   be_buf_size;
+   char *be_buf = NULL;
+   int   be_buf_size = 0;
    int from_screen = 0;
    int to_screen = 0;
    int s;
commit a4cd2e0da6415ec1b3b182579bebbe2a41f29d30
Author: Adam Jackson <ajax at redhat.com>
Date:   Tue Feb 8 14:47:05 2011 -0500

    glxproxy: warning fix
    
    glxsingle.c: In function ‘__glXForwardPipe0WithReply’:
    glxsingle.c:218:10: warning: ‘be_buf’ may be used uninitialized in this function
    
    Reviewed-by: Alan Coopersmith <alan.coopersmith at oracle.com>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/dmx/glxProxy/glxsingle.c b/hw/dmx/glxProxy/glxsingle.c
index cc7b408..33cc612 100644
--- a/hw/dmx/glxProxy/glxsingle.c
+++ b/hw/dmx/glxProxy/glxsingle.c
@@ -215,7 +215,7 @@ int __glXForwardPipe0WithReply( __GLXclientState *cl, GLbyte *pc )
    xGLXSingleReply be_reply;
     __GLXcontext *glxc;
    int buf_size;
-   char *be_buf;
+   char *be_buf = NULL;
    int   be_buf_size;
    DMXScreenInfo *dmxScreen;
    Display *dpy;
commit f928caca6e60215bc9ab423acae5542dfabc9bec
Author: Adam Jackson <ajax at redhat.com>
Date:   Tue Feb 8 14:45:31 2011 -0500

    glxproxy: warning fix
    
    glxsingle.c: In function ‘__glXForwardAllWithReply’:
    glxsingle.c:300:10: warning: ‘be_buf’ may be used uninitialized in this function
    glxsingle.c:301:10: warning: ‘be_buf_size’ may be used uninitialized in this function
    
    Reviewed-by: Alan Coopersmith <alan.coopersmith at oracle.com>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/dmx/glxProxy/glxsingle.c b/hw/dmx/glxProxy/glxsingle.c
index ae8d65f..cc7b408 100644
--- a/hw/dmx/glxProxy/glxsingle.c
+++ b/hw/dmx/glxProxy/glxsingle.c
@@ -297,8 +297,8 @@ int __glXForwardAllWithReply( __GLXclientState *cl, GLbyte *pc )
    xGLXSingleReply be_reply;
     __GLXcontext *glxc;
    int buf_size;
-   char *be_buf;
-   int   be_buf_size;
+   char *be_buf = NULL;
+   int   be_buf_size = 0;
    int from_screen = 0;
    int to_screen = 0;
    int s;
commit dad2712c9328e113db4de768a12a8dafa6c177e9
Author: Adam Jackson <ajax at redhat.com>
Date:   Tue Feb 8 14:44:03 2011 -0500

    glxproxy: warning fix
    
    glxsingle.c: In function ‘__glXDisp_ReadPixels’:
    glxsingle.c:760:11: warning: ‘buf’ may be used uninitialized in this function
    
    Reviewed-by: Alan Coopersmith <alan.coopersmith at oracle.com>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/dmx/glxProxy/glxsingle.c b/hw/dmx/glxProxy/glxsingle.c
index 4c473ff..ae8d65f 100644
--- a/hw/dmx/glxProxy/glxsingle.c
+++ b/hw/dmx/glxProxy/glxsingle.c
@@ -811,6 +811,7 @@ int __glXDisp_ReadPixels(__GLXclientState *cl, GLbyte *pc)
     }
     else {
        buf_size = 0;
+       buf = NULL;
     }
 
     if (buf_size > 0) {
commit 4270157bac645550e2c0afe89479c0bfe9d53447
Author: Adam Jackson <ajax at redhat.com>
Date:   Tue Feb 8 14:38:23 2011 -0500

    glxproxy: warning fix
    
    render2swap.c:264:13: warning: ‘swapArray’ defined but not used
    
    Reviewed-by: Alan Coopersmith <alan.coopersmith at oracle.com>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/dmx/glxProxy/render2swap.c b/hw/dmx/glxProxy/render2swap.c
index 5754ff4..81bb501 100644
--- a/hw/dmx/glxProxy/render2swap.c
+++ b/hw/dmx/glxProxy/render2swap.c
@@ -261,60 +261,6 @@ void __glXDispSwap_CallLists(GLbyte *pc)
 
 }
 
-static void swapArray(GLint numVals, GLenum datatype,
-                      GLint stride, GLint numVertexes, GLbyte *pc)
-{
-    int i,j;
-    __GLX_DECLARE_SWAP_VARIABLES;
-
-    switch (datatype) {
-      case GL_BYTE:
-      case GL_UNSIGNED_BYTE:
-	/* don't need to swap */
-	return;
-      case GL_SHORT:
-      case GL_UNSIGNED_SHORT:
-	for (i=0; i<numVertexes; i++) {
-	    GLshort *pVal = (GLshort *) pc;
-	    for (j=0; j<numVals; j++) {
-		__GLX_SWAP_SHORT(&pVal[j]);
-	    }
-	    pc += stride;
-	}
-	break;
-      case GL_INT:
-      case GL_UNSIGNED_INT:
-	for (i=0; i<numVertexes; i++) {
-	    GLint *pVal = (GLint *) pc;
-	    for (j=0; j<numVals; j++) {
-		__GLX_SWAP_INT(&pVal[j]);
-	    }
-	    pc += stride;
-	}
-	break;
-      case GL_FLOAT:
-	for (i=0; i<numVertexes; i++) {
-	    GLfloat *pVal = (GLfloat *) pc;
-	    for (j=0; j<numVals; j++) {
-		__GLX_SWAP_FLOAT(&pVal[j]);
-	    }
-	    pc += stride;
-	}
-	break;
-      case GL_DOUBLE:
-	for (i=0; i<numVertexes; i++) {
-	    GLdouble *pVal = (GLdouble *) pc;
-	    for (j=0; j<numVals; j++) {
-		__GLX_SWAP_DOUBLE(&pVal[j]);
-	    }
-	    pc += stride;
-	}
-	break;
-      default:
-	return;
-    }
-}
-
 void __glXDispSwap_DrawArrays(GLbyte *pc)
 {
     __GLXdispatchDrawArraysHeader *hdr = (__GLXdispatchDrawArraysHeader *)pc;
commit 5d0910b4fdf99e3239635a01eb2709c32d0e5bb9
Author: Adam Jackson <ajax at redhat.com>
Date:   Tue Feb 8 14:32:54 2011 -0500

    glxproxy: warning fix
    
    glxcmds.c: In function ‘CreateGLXPixmap’:
    glxcmds.c:1663:20: warning: comparison between pointer and integer
    glxcmds.c:1663:38: warning: comparison between pointer and integer
    
    Reviewed-by: Alan Coopersmith <alan.coopersmith at oracle.com>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/dmx/glxProxy/glxcmds.c b/hw/dmx/glxProxy/glxcmds.c
index 6196540..f79264e 100644
--- a/hw/dmx/glxProxy/glxcmds.c
+++ b/hw/dmx/glxProxy/glxcmds.c
@@ -1660,7 +1660,7 @@ static int CreateGLXPixmap(__GLXclientState *cl,
 	return BadMatch;
     }
 
-    if (fbconfigId == NULL && visual == NULL) {
+    if (fbconfigId == 0 && visual == 0) {
 	  return BadValue;
     }
 
commit e1b5d3e5e7f157ab769c40ad2efdc1281c25a03a
Author: Adam Jackson <ajax at redhat.com>
Date:   Tue Feb 8 14:18:53 2011 -0500

    glxproxy: warning fix
    
    glxcmds.c: In function ‘CreateGLXPixmap’:
    glxcmds.c:1641:22: warning: ‘pGlxScreen’ may be used uninitialized in this function
    
    Reviewed-by: Alan Coopersmith <alan.coopersmith at oracle.com>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/dmx/glxProxy/glxcmds.c b/hw/dmx/glxProxy/glxcmds.c
index d38319a..6196540 100644
--- a/hw/dmx/glxProxy/glxcmds.c
+++ b/hw/dmx/glxProxy/glxcmds.c
@@ -1733,6 +1733,7 @@ static int CreateGLXPixmap(__GLXclientState *cl,
     else {
        pVisual = NULL;
        pGlxVisual = NULL;
+       pGlxScreen = &__glXActiveScreens[pDraw->pScreen->myNum];
     }
 
     pGlxPixmap = (__GLXpixmap *) malloc(sizeof(__GLXpixmap));
commit 3b9de273a94fb68de51238c20c3182396aa41b84
Author: Adam Jackson <ajax at redhat.com>
Date:   Tue Feb 8 14:07:20 2011 -0500

    glxproxy: warning fix
    
    glxcmds.c: In function ‘CreateContext.clone.6’:
    glxcmds.c:105:19: warning: ‘be_fbconfigId’ may be used uninitialized in this function
    glxcmds.c:104:14: warning: ‘be_vid’ may be used uninitialized in this function
    
    Reviewed-by: Alan Coopersmith <alan.coopersmith at oracle.com>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/dmx/glxProxy/glxcmds.c b/hw/dmx/glxProxy/glxcmds.c
index 72ecdea..d38319a 100644
--- a/hw/dmx/glxProxy/glxcmds.c
+++ b/hw/dmx/glxProxy/glxcmds.c
@@ -101,8 +101,8 @@ static int CreateContext(__GLXclientState *cl,
     int from_screen = screen;
     int to_screen = screen;
     DMXScreenInfo *dmxScreen;
-    VisualID be_vid;
-    GLXFBConfigID be_fbconfigId;
+    VisualID be_vid = 0;
+    GLXFBConfigID be_fbconfigId = 0;
     int num_be_screens;
     Display *dpy;
     
commit 767b93e783a981b4fc926299a85a1a18387e693a
Author: Adam Jackson <ajax at redhat.com>
Date:   Tue Feb 8 14:02:37 2011 -0500

    glxproxy: warning fix
    
    glxcmds.c: In function ‘__glXGetDrawableAttributes’:
    glxcmds.c:3295:8: warning: ‘screen’ may be used uninitialized in this function
    glxcmds.c:3298:8: warning: ‘attribs_size’ may be used uninitialized in this function
    
    Reviewed-by: Alan Coopersmith <alan.coopersmith at oracle.com>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/dmx/glxProxy/glxcmds.c b/hw/dmx/glxProxy/glxcmds.c
index cbefdfa..72ecdea 100644
--- a/hw/dmx/glxProxy/glxcmds.c
+++ b/hw/dmx/glxProxy/glxcmds.c
@@ -3295,27 +3295,23 @@ int __glXGetDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
    int screen, rc;
    DMXScreenInfo *dmxScreen;
    CARD32 *attribs = NULL;
-   int attribs_size;
+   int attribs_size = 0;
 #ifdef PANORAMIX
     PanoramiXRes *pXinDraw = NULL;
 #endif
 
    if (drawId != None) {
       rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixGetAttrAccess);
-      if (rc == Success) {
-	 if (pDraw->type == DRAWABLE_WINDOW) {
-		WindowPtr pWin = (WindowPtr)pDraw;
-		be_drawable = 0;
-		screen = pWin->drawable.pScreen->myNum;
-
-	 }
-	 else {
-	    /*
-	     ** Drawable is not a Window , GLXWindow or a GLXPixmap.
-	     */
-	    client->errorValue = drawId;
-	    return __glXBadDrawable;
-	 }
+      if (rc == Success && pDraw->type == DRAWABLE_WINDOW) {
+	 WindowPtr pWin = (WindowPtr)pDraw;
+	 be_drawable = 0;
+	 screen = pWin->drawable.pScreen->myNum;
+      } else {
+	 /*
+	  ** Drawable is not a Window , GLXWindow or a GLXPixmap.
+	  */
+	 client->errorValue = drawId;
+	 return __glXBadDrawable;
       }
 
       if (!pDraw) {
@@ -3353,17 +3349,15 @@ int __glXGetDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
 	    be_drawable = pGlxPbuffer->be_xids[screen];
 	 }
       }
-
-
-      if (!pDraw) {
-	 /*
-	  ** Drawable is not a Window , GLXWindow or a GLXPixmap.
-	  */
-	 client->errorValue = drawId;
-	 return __glXBadDrawable;
-      }
     }
 
+    if (!pDraw) {
+	/*
+	 ** Drawable is not a Window , GLXWindow or a GLXPixmap.
+	 */
+	client->errorValue = drawId;
+	return __glXBadDrawable;
+   }
 
    /* if the drawable is a window or GLXWindow - 
     * we need to find the base id on the back-end server
commit a391089186cd1063d807bf14a9651e6861b248de
Author: Adam Jackson <ajax at redhat.com>
Date:   Tue Feb 8 13:55:23 2011 -0500

    glxproxy: warning fix
    
    glxcmds.c: In function ‘__glXChangeDrawableAttributes’:
    glxcmds.c:3464:8: warning: ‘screen’ may be used uninitialized in this function
    
    Reviewed-by: Alan Coopersmith <alan.coopersmith at oracle.com>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/dmx/glxProxy/glxcmds.c b/hw/dmx/glxProxy/glxcmds.c
index a58eb35..cbefdfa 100644
--- a/hw/dmx/glxProxy/glxcmds.c
+++ b/hw/dmx/glxProxy/glxcmds.c
@@ -3466,20 +3466,15 @@ int __glXChangeDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
 
    if (drawId != None) {
       rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixSetAttrAccess);
-      if (rc == Success) {
-	 if (pDraw->type == DRAWABLE_WINDOW) {
-		WindowPtr pWin = (WindowPtr)pDraw;
-		be_drawable = 0;
-		screen = pWin->drawable.pScreen->myNum;
-
-	 }
-	 else {
-	    /*
-	     ** Drawable is not a Window , GLXWindow or a GLXPixmap.
-	     */
-	    client->errorValue = drawId;
-	    return __glXBadDrawable;
-	 }
+      if (rc == Success && pDraw->type == DRAWABLE_WINDOW) {
+	  be_drawable = 0;
+	  screen = pDraw->pScreen->myNum;
+      } else {
+	 /*
+	  ** Drawable is not a Window , GLXWindow or a GLXPixmap.
+	  */
+	 client->errorValue = drawId;
+	 return __glXBadDrawable;
       }
 
       if (!pDraw) {
@@ -3517,17 +3512,15 @@ int __glXChangeDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
 	    be_drawable = pGlxPbuffer->be_xids[screen];
 	 }
       }
+   }
 
-
-      if (!pDraw) {
+   if (!pDraw) {
 	 /*
 	  ** Drawable is not a Window , GLXWindow or a GLXPixmap.
 	  */
 	 client->errorValue = drawId;
 	 return __glXBadDrawable;
-      }
-    }
-
+   }
 
    /* if the drawable is a window or GLXWindow - 
     * we need to find the base id on the back-end server
commit 4102a00962f568b1d34cf72ad524e1cc705b0b1c
Author: Cyril Brulebois <kibi at debian.org>
Date:   Wed Feb 23 14:44:23 2011 +0100

    xfree86: Fix undefined reference to `XNFsprintf' on sparc.
    
    Build failure on sparc:
    | copying selected object files to avoid basename conflicts...
    |   CCLD   Xorg
    | ./.libs/libxorg.a(xf86sbusBus.o): In function `xf86SbusConfigureNewDev':
    | […]/hw/xfree86/common/xf86sbusBus.c:712: undefined reference to `XNFsprintf'
    | collect2: ld returned 1 exit status
    
    Fix typo introduced in:
      3a9bb93dd178084f4ff1abcea331ca5a62f88ce6
    
    Reviewed-by: Alan Coopersmith <alan.coopersmith at oracle.com>
    Apologized-for-by: Alan Coopersmith <alan.coopersmith at oracle.com>
    Signed-off-by: Cyril Brulebois <kibi at debian.org>

diff --git a/hw/xfree86/common/xf86sbusBus.c b/hw/xfree86/common/xf86sbusBus.c
index 8cfac84..181c6ab 100644
--- a/hw/xfree86/common/xf86sbusBus.c
+++ b/hw/xfree86/common/xf86sbusBus.c
@@ -709,6 +709,6 @@ xf86SbusConfigureNewDev(void *busData, sbusDevicePtr sBus, GDevRec *GDev)
         XNFasprintf(&GDev->busID, "SBUS:%s", promPath);
         free(promPath);
     } else {
-        XNFsprintf(&GDev->busID, "SBUS:fb%d", sBus->fbNum);
+        XNFasprintf(&GDev->busID, "SBUS:fb%d", sBus->fbNum);
     }
 }
commit 93a73993708b1345c86ec3ec06b02ed236595673
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Feb 21 15:40:40 2011 +1000

    test: write some event → XI1 conversion tests.
    
    Don't test everything, but hey, life is short and I'm trying to have one.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/test/input.c b/test/input.c
index 879e14f..e0e9e6a 100644
--- a/test/input.c
+++ b/test/input.c
@@ -36,6 +36,7 @@
 #include "inputstr.h"
 #include "eventconvert.h"
 #include "exevents.h"
+#include "exglobals.h"
 #include "dixgrabs.h"
 #include "eventstr.h"
 #include "inpututils.h"
@@ -285,6 +286,143 @@ static void dix_event_to_core_conversion(void)
     dix_event_to_core(ET_Motion);
 }
 
+static void
+_dix_test_xi_convert(DeviceEvent *ev, int expected_rc, int expected_count)
+{
+    xEvent *xi;
+    int count = 0;
+    int rc;
+
+    rc = EventToXI((InternalEvent*)ev, &xi, &count);
+    g_assert(rc == expected_rc);
+    g_assert(count >= expected_count);
+    if (count > 0){
+        deviceKeyButtonPointer *kbp = (deviceKeyButtonPointer*)xi;
+        g_assert(kbp->type == IEventBase + ev->type);
+        g_assert(kbp->detail == ev->detail.key);
+        g_assert(kbp->time == ev->time);
+        g_assert((kbp->deviceid & ~MORE_EVENTS) == ev->deviceid);
+        g_assert(kbp->root_x == ev->root_x);
+        g_assert(kbp->root_y == ev->root_y);
+        g_assert(kbp->state == ev->corestate);
+        g_assert(kbp->event_x == 0);
+        g_assert(kbp->event_y == 0);
+        g_assert(kbp->root == ev->root);
+        g_assert(kbp->event == 0);
+        g_assert(kbp->child == 0);
+        g_assert(kbp->same_screen == FALSE);
+
+        while (--count > 0) {
+            deviceValuator *v = (deviceValuator*)&xi[count];
+            g_assert(v->type == DeviceValuator);
+            g_assert(v->num_valuators <= 6);
+        }
+
+
+        free(xi);
+    }
+}
+
+/**
+ * This tests for internal event → XI1 event conversion
+ * - all conversions should generate the right XI event type
+ * - right number of events generated
+ * - extra events are valuators
+ */
+static void dix_event_to_xi1_conversion(void)
+{
+    DeviceEvent ev = {0};
+    int time;
+    int x, y;
+    int state;
+    int detail;
+    const int ROOT_WINDOW_ID = 0x100;
+    int deviceid;
+
+    IEventBase = 80;
+    DeviceValuator      = IEventBase - 1;
+    DeviceKeyPress      = IEventBase + ET_KeyPress;
+    DeviceKeyRelease    = IEventBase + ET_KeyRelease;
+    DeviceButtonPress   = IEventBase + ET_ButtonPress;
+    DeviceButtonRelease = IEventBase + ET_ButtonRelease;
+    DeviceMotionNotify  = IEventBase + ET_Motion;
+    DeviceFocusIn       = IEventBase + ET_FocusIn;
+    DeviceFocusOut      = IEventBase + ET_FocusOut;
+    ProximityIn         = IEventBase + ET_ProximityIn;
+    ProximityOut        = IEventBase + ET_ProximityOut;
+
+    /* EventToXI callocs */
+    x = 0;
+    y = 0;
+    time = 12345;
+    state = 0;
+    detail = 0;
+    deviceid = 4;
+
+    ev.header   = 0xFF;
+
+    ev.header           = 0xFF;
+    ev.length           = sizeof(DeviceEvent);
+    ev.time             = time;
+    ev.root_y           = x;
+    ev.root_x           = y;
+    SetBit(ev.valuators.mask, 0);
+    SetBit(ev.valuators.mask, 1);
+    ev.root             = ROOT_WINDOW_ID;
+    ev.corestate        = state;
+    ev.detail.key       = detail;
+    ev.deviceid         = deviceid;
+
+    /* test all types for bad match */
+    ev.type = ET_KeyPress;         _dix_test_xi_convert(&ev, Success, 1);
+    ev.type = ET_KeyRelease;       _dix_test_xi_convert(&ev, Success, 1);
+    ev.type = ET_ButtonPress;      _dix_test_xi_convert(&ev, Success, 1);
+    ev.type = ET_ButtonRelease;    _dix_test_xi_convert(&ev, Success, 1);
+    ev.type = ET_Motion;           _dix_test_xi_convert(&ev, Success, 1);
+    ev.type = ET_ProximityIn;      _dix_test_xi_convert(&ev, Success, 1);
+    ev.type = ET_ProximityOut;     _dix_test_xi_convert(&ev, Success, 1);
+
+    /* No axes */
+    ClearBit(ev.valuators.mask, 0);
+    ClearBit(ev.valuators.mask, 1);
+    ev.type = ET_KeyPress;         _dix_test_xi_convert(&ev, Success, 1);
+    ev.type = ET_KeyRelease;       _dix_test_xi_convert(&ev, Success, 1);
+    ev.type = ET_ButtonPress;      _dix_test_xi_convert(&ev, Success, 1);
+    ev.type = ET_ButtonRelease;    _dix_test_xi_convert(&ev, Success, 1);
+    ev.type = ET_Motion;           _dix_test_xi_convert(&ev, BadMatch, 0);
+    ev.type = ET_ProximityIn;      _dix_test_xi_convert(&ev, BadMatch, 0);
+    ev.type = ET_ProximityOut;     _dix_test_xi_convert(&ev, BadMatch, 0);
+
+    /* more than 6 axes → 2 valuator events */
+    SetBit(ev.valuators.mask, 0);
+    SetBit(ev.valuators.mask, 1);
+    SetBit(ev.valuators.mask, 2);
+    SetBit(ev.valuators.mask, 3);
+    SetBit(ev.valuators.mask, 4);
+    SetBit(ev.valuators.mask, 5);
+    SetBit(ev.valuators.mask, 6);
+    ev.type = ET_KeyPress;         _dix_test_xi_convert(&ev, Success, 2);
+    ev.type = ET_KeyRelease;       _dix_test_xi_convert(&ev, Success, 2);
+    ev.type = ET_ButtonPress;      _dix_test_xi_convert(&ev, Success, 2);
+    ev.type = ET_ButtonRelease;    _dix_test_xi_convert(&ev, Success, 2);
+    ev.type = ET_Motion;           _dix_test_xi_convert(&ev, Success, 2);
+    ev.type = ET_ProximityIn;      _dix_test_xi_convert(&ev, Success, 2);
+    ev.type = ET_ProximityOut;     _dix_test_xi_convert(&ev, Success, 2);
+
+
+    /* keycode too high */
+    ev.type = ET_KeyPress;
+    ev.detail.key = 256;
+    _dix_test_xi_convert(&ev, Success, 0);
+
+    /* deviceid too high */
+    ev.type = ET_KeyPress;
+    ev.detail.key = 18;
+    ev.deviceid = 128;
+    _dix_test_xi_convert(&ev, Success, 0);
+}
+
+
 static void xi2_struct_sizes(void)
 {
 #define compare(req) \
@@ -1070,6 +1208,7 @@ int main(int argc, char** argv)
     g_test_add_func("/dix/input/attributes", dix_input_attributes);
     g_test_add_func("/dix/input/init-valuators", dix_init_valuators);
     g_test_add_func("/dix/input/event-core-conversion", dix_event_to_core_conversion);
+    g_test_add_func("/dix/input/event-xi1-conversion", dix_event_to_xi1_conversion);
     g_test_add_func("/dix/input/check-grab-values", dix_check_grab_values);
     g_test_add_func("/dix/input/xi2-struct-sizes", xi2_struct_sizes);
     g_test_add_func("/dix/input/grab_matching", dix_grab_matching);
commit 4cdf1013771bc86fe2f6d9223bc4a46753bc918f
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Feb 21 15:32:57 2011 +1000

    dix: a valuator number of 0 is valid (#34510)
    
    For all but motion and proximity events, having no valuators is ok.
    Regression from 1.9, keyboard events are not converted to protocol events.
    
    X.Org Bug 34510 <http://bugs.freedesktop.org/show_bug.cgi?id=34510>
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>
    Tested-by: Timo Aaltonen <timo.aaltonen at canonical.com>

diff --git a/dix/eventconvert.c b/dix/eventconvert.c
index 7b894f0..dd1ca46 100644
--- a/dix/eventconvert.c
+++ b/dix/eventconvert.c
@@ -263,8 +263,20 @@ eventToKeyButtonPointer(DeviceEvent *ev, xEvent **xi, int *count)
     num_events = (countValuators(ev, &first) + 5)/6; /* valuator ev */
     if (num_events <= 0)
     {
-        *count = 0;
-        return BadMatch;
+        switch (ev->type)
+        {
+            case ET_KeyPress:
+            case ET_KeyRelease:
+            case ET_ButtonPress:
+            case ET_ButtonRelease:
+                /* no axes is ok */
+                break;
+            case ET_Motion:
+            case ET_ProximityIn:
+            case ET_ProximityOut:
+                *count = 0;
+                return BadMatch;
+        }
     }
 
     num_events++; /* the actual event event */
commit b4ef34d4664e0eaac7211f7a22a2025958aa1527
Author: Maarten Maathuis <madman2003 at gmail.com>
Date:   Sun Feb 20 11:59:41 2011 +0100

    Revert "exa/mixed: Exclude frontbuffer from deferred pixmap handling."
    
    This reverts commit 541b25038a5de74411a094570b407c5ae018c2ba.
    
    - It turns out that the high latency was a driver problem.
    - catting a large amount of text turns out to look prettier when the
      throughput is lower, but it's not worth the loss for a minor
      improvement that may not even exist on someone else's computer.
    
    Reviewed-by: Michel Dänzer <michel at daenzer.net>
    Signed-off-by: Maarten Maathuis <madman2003 at gmail.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/exa/exa_migration_mixed.c b/exa/exa_migration_mixed.c
index 4f49905..fb47151 100644
--- a/exa/exa_migration_mixed.c
+++ b/exa/exa_migration_mixed.c
@@ -138,7 +138,6 @@ void
 exaDamageReport_mixed(DamagePtr pDamage, RegionPtr pRegion, void *closure)
 {
     PixmapPtr pPixmap = closure;
-    ScreenPtr pScreen = pPixmap->drawable.pScreen;
     ExaPixmapPriv(pPixmap);
 
     /* Move back results of software rendering on system memory copy of mixed driver
@@ -150,18 +149,10 @@ exaDamageReport_mixed(DamagePtr pDamage, RegionPtr pRegion, void *closure)
     if (!pExaPixmap->use_gpu_copy && exaPixmapHasGpuCopy(pPixmap)) {
 	ExaScreenPriv(pPixmap->drawable.pScreen);
 
-	/* Front buffer: Don't wait for the block handler to copy back the data.
-	 * This avoids annoying latency if you encounter a lot of software rendering.
-	 */
-	if (pPixmap == pScreen->GetScreenPixmap(pScreen))
-		exaMoveInPixmap_mixed(pPixmap);
-	else {
-		if (pExaScr->deferred_mixed_pixmap &&
-		    pExaScr->deferred_mixed_pixmap != pPixmap)
-		    exaMoveInPixmap_mixed(pExaScr->deferred_mixed_pixmap);
-
-		pExaScr->deferred_mixed_pixmap = pPixmap;
-	}
+	if (pExaScr->deferred_mixed_pixmap &&
+	    pExaScr->deferred_mixed_pixmap != pPixmap)
+	    exaMoveInPixmap_mixed(pExaScr->deferred_mixed_pixmap);
+	pExaScr->deferred_mixed_pixmap = pPixmap;
     }
 }
 
commit 443d75446bcbe7d97a23860a1e2d46c0b7e7cb26
Author: Keith Packard <keithp at keithp.com>
Date:   Fri Feb 18 14:46:33 2011 -0800

    Version bumped to 1.9.99.902 (1.10 RC2)
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index 9b3e2be..ac4bf8c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,8 +26,8 @@ dnl
 dnl Process this file with autoconf to create configure.
 
 AC_PREREQ(2.57)
-AC_INIT([xorg-server], 1.9.99.901, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
-RELEASE_DATE="2010-12-06"
+AC_INIT([xorg-server], 1.9.99.902, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+RELEASE_DATE="2011-2-18"
 AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([foreign dist-bzip2])
 AM_MAINTAINER_MODE
commit 2c77aeb39f59f1a94cc603a2e6256a62ce785c36
Merge: 816d67d... 402b329...
Author: Keith Packard <keithp at keithp.com>
Date:   Fri Feb 18 14:29:32 2011 -0800

    Merge remote branch 'jcristau/for-keith'

commit 816d67de2ba9bdfe652da32cb6447a3056342b98
Merge: a73c28f... 3bbb70a...
Author: Keith Packard <keithp at keithp.com>
Date:   Fri Feb 18 12:20:26 2011 -0800

    Merge remote branch 'whot/for-keith'

commit a73c28f0bdafb1c5cb8129179188a99c0ca052e2
Author: Justin Dou <Justin.Dou at intel.com>
Date:   Thu Feb 10 16:27:29 2011 -0500

    Replace malloc with calloc to initialize the buffers[] as NULL in do_get_buffers function
    
    The calling for allocate_or_reuse_buffer may fail due to some reason, e.g. out of memory.
    If the buffers[] were not initialized to be NULL, the following err_out may try to access an illegal memory, which will cause X crash afterward.
    
    Reviewed-by: Kristian Høgsberg <krh at bitplanet.net>
    Signed-off-by: Justin Dou <Justin.Dou at intel.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
index 39996f9..9ca378f 100644
--- a/hw/xfree86/dri2/dri2.c
+++ b/hw/xfree86/dri2/dri2.c
@@ -403,7 +403,7 @@ do_get_buffers(DrawablePtr pDraw, int *width, int *height,
 	&& (pDraw->height == pPriv->height)
 	&& (pPriv->serialNumber == DRI2DrawableSerial(pDraw));
 
-    buffers = malloc((count + 1) * sizeof(buffers[0]));
+    buffers = calloc((count + 1), sizeof(buffers[0]));
 
     for (i = 0; i < count; i++) {
 	const unsigned attachment = *(attachments++);
commit 0bc9b15a622377c57e617411ccd26c4b5bf8cba4
Merge: d1123b6... 93cd4b1...
Author: Keith Packard <keithp at keithp.com>
Date:   Fri Feb 18 12:04:41 2011 -0800

    Merge remote branch 'ajax/for-keithp'

commit d1123b66ebbcf96dd816236f54befc568a5f7c68
Merge: 5d020c3... f6e4ace...
Author: Keith Packard <keithp at keithp.com>
Date:   Fri Feb 18 11:59:25 2011 -0800

    Merge remote branch 'jturney/master'

commit 3bbb70a1a7b24d3d1375b20a13db7011cf961c86
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Feb 16 07:56:58 2011 +1000

    xfree86: fix up an out-of-date comment.
    
    InitInput simply initialises all input devices now.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index a1fda54..e664ce4 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -808,7 +808,7 @@ InitInput(int argc, char **argv)
 
     GetEventList(&xf86Events);
 
-    /* Call the PreInit function for each input device instance. */
+    /* Initialize all configured input devices */
     for (pDev = xf86ConfigLayout.inputs; pDev && *pDev; pDev++) {
         /* Replace obsolete keyboard driver with kbd */
         if (!xf86NameCmp((*pDev)->driver, "keyboard")) {
commit 402b329c3aa8ddbebaa1f593306a02d4cd6fed26
Author: Julien Cristau <jcristau at debian.org>
Date:   Sun Jan 23 13:35:54 2011 +0100

    glx: Work around wrong request lengths sent by mesa
    
    mesa used to send too long requests for GLXDestroyPixmap,
    GLXDestroyWindow, GLXChangeDrawableAttributes, GLXGetDrawableAttributes
    and GLXGetFBConfigsSGIX.
    
    Fixes a regression introduced in ec9c97c6bf70b523bc500bd3adf62176f1bb33a4
    X.Org bug#33324 <https://bugs.freedesktop.org/show_bug.cgi?id=33324>
    
    Reported-by: xunx.fang at intel.com
    Signed-off-by: Julien Cristau <jcristau at debian.org>
    Reviewed-by: Adam Jackson <ajax at redhat.com>

diff --git a/glx/glxcmds.c b/glx/glxcmds.c
index 5d633df..9b4bc9e 100644
--- a/glx/glxcmds.c
+++ b/glx/glxcmds.c
@@ -1132,7 +1132,8 @@ int __glXDisp_GetFBConfigsSGIX(__GLXclientState *cl, GLbyte *pc)
 {
     ClientPtr client = cl->client;
     xGLXGetFBConfigsSGIXReq *req = (xGLXGetFBConfigsSGIXReq *) pc;
-    REQUEST_SIZE_MATCH(xGLXGetFBConfigsSGIXReq);
+    /* work around mesa bug, don't use REQUEST_SIZE_MATCH */
+    REQUEST_AT_LEAST_SIZE(xGLXGetFBConfigsSGIXReq);
     return DoGetFBConfigs(cl, req->screen);
 }
 
@@ -1356,7 +1357,9 @@ int __glXDisp_DestroyPixmap(__GLXclientState *cl, GLbyte *pc)
     ClientPtr client = cl->client;
     xGLXDestroyPixmapReq *req = (xGLXDestroyPixmapReq *) pc;
 
-    REQUEST_SIZE_MATCH(xGLXDestroyPixmapReq);
+    /* should be REQUEST_SIZE_MATCH, but mesa's glXDestroyPixmap used to set
+     * length to 3 instead of 2 */
+    REQUEST_AT_LEAST_SIZE(xGLXDestroyPixmapReq);
 
     return DoDestroyDrawable(cl, req->glxpixmap, GLX_DRAWABLE_PIXMAP);
 }
@@ -1498,7 +1501,13 @@ int __glXDisp_ChangeDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
 	client->errorValue = req->numAttribs;
 	return BadValue;
     }
+#if 0
+    /* mesa sends an additional 8 bytes */
     REQUEST_FIXED_SIZE(xGLXChangeDrawableAttributesReq, req->numAttribs << 3);
+#else
+    if (((sizeof(xGLXChangeDrawableAttributesReq) + (req->numAttribs << 3)) >> 2) < client->req_len)
+	    return BadLength;
+#endif
 
     return DoChangeDrawableAttributes(cl->client, req->drawable,
 				      req->numAttribs, (CARD32 *) (req + 1));
@@ -1563,7 +1572,8 @@ int __glXDisp_DestroyWindow(__GLXclientState *cl, GLbyte *pc)
     ClientPtr client = cl->client;
     xGLXDestroyWindowReq *req = (xGLXDestroyWindowReq *) pc;
 
-    REQUEST_SIZE_MATCH(xGLXDestroyWindowReq);
+    /* mesa's glXDestroyWindow used to set length to 3 instead of 2 */
+    REQUEST_AT_LEAST_SIZE(xGLXDestroyWindowReq);
 
     return DoDestroyDrawable(cl, req->glxwindow, GLX_DRAWABLE_WINDOW);
 }
@@ -1872,7 +1882,8 @@ int __glXDisp_GetDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
     ClientPtr client = cl->client;
     xGLXGetDrawableAttributesReq *req = (xGLXGetDrawableAttributesReq *)pc;
 
-    REQUEST_SIZE_MATCH(xGLXGetDrawableAttributesReq);
+    /* this should be REQUEST_SIZE_MATCH, but mesa sends an additional 4 bytes */
+    REQUEST_AT_LEAST_SIZE(xGLXGetDrawableAttributesReq);
 
     return DoGetDrawableAttributes(cl, req->drawable);
 }
diff --git a/glx/glxcmdsswap.c b/glx/glxcmdsswap.c
index d58de62..76e6fb6 100644
--- a/glx/glxcmdsswap.c
+++ b/glx/glxcmdsswap.c
@@ -279,7 +279,7 @@ int __glXDispSwap_GetFBConfigsSGIX(__GLXclientState *cl, GLbyte *pc)
     xGLXGetFBConfigsSGIXReq *req = (xGLXGetFBConfigsSGIXReq *) pc;
     __GLX_DECLARE_SWAP_VARIABLES;
 
-    REQUEST_SIZE_MATCH(xGLXGetFBConfigsSGIXReq);
+    REQUEST_AT_LEAST_SIZE(xGLXGetFBConfigsSGIXReq);
 
     __GLX_SWAP_INT(&req->screen);
     return __glXDisp_GetFBConfigsSGIX(cl, pc);
@@ -368,7 +368,7 @@ int __glXDispSwap_DestroyPixmap(__GLXclientState *cl, GLbyte *pc)
     xGLXDestroyGLXPixmapReq *req = (xGLXDestroyGLXPixmapReq *) pc;
     __GLX_DECLARE_SWAP_VARIABLES;
 
-    REQUEST_SIZE_MATCH(xGLXDestroyGLXPixmapReq);
+    REQUEST_AT_LEAST_SIZE(xGLXDestroyGLXPixmapReq);
 
     __GLX_SWAP_SHORT(&req->length);
     __GLX_SWAP_INT(&req->glxpixmap);
@@ -476,7 +476,9 @@ int __glXDispSwap_ChangeDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
 	client->errorValue = req->numAttribs;
 	return BadValue;
     }
-    REQUEST_FIXED_SIZE(xGLXChangeDrawableAttributesReq, req->numAttribs << 3);
+    if (((sizeof(xGLXChangeDrawableAttributesReq) + (req->numAttribs << 3)) >> 2) < client->req_len)
+	return BadLength;
+
     attribs = (CARD32*)(req + 1);
     __GLX_SWAP_INT_ARRAY(attribs, req->numAttribs << 1);
 
@@ -542,7 +544,7 @@ int __glXDispSwap_DestroyWindow(__GLXclientState *cl, GLbyte *pc)
     xGLXDestroyWindowReq *req = (xGLXDestroyWindowReq *) pc;
     __GLX_DECLARE_SWAP_VARIABLES;
 
-    REQUEST_SIZE_MATCH(xGLXDestroyWindowReq);
+    REQUEST_AT_LEAST_SIZE(xGLXDestroyWindowReq);
 
     __GLX_SWAP_INT(&req->glxwindow);
 
@@ -742,7 +744,7 @@ int __glXDispSwap_GetDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
     xGLXGetDrawableAttributesReq *req = (xGLXGetDrawableAttributesReq *)pc;
     __GLX_DECLARE_SWAP_VARIABLES;
 
-    REQUEST_SIZE_MATCH(xGLXGetDrawableAttributesReq);
+    REQUEST_AT_LEAST_SIZE(xGLXGetDrawableAttributesReq);
 
     __GLX_SWAP_SHORT(&req->length);
     __GLX_SWAP_INT(&req->drawable);
commit 1137c11be0f82049d28024eaf963c6f76e0d4334
Author: Julien Cristau <jcristau at debian.org>
Date:   Wed Jan 26 13:06:53 2011 +0100

    glx: fix BindTexImageEXT length check
    
    The request is followed by a list of attributes.
    
    X.Org bug#33449
    
    Reported-and-tested-by: meng <mengmeng.meng at intel.com>
    Signed-off-by: Julien Cristau <jcristau at debian.org>
    Reviewed-by: Adam Jackson <ajax at redhat.com>

diff --git a/glx/glxcmds.c b/glx/glxcmds.c
index 0b375c3..5d633df 100644
--- a/glx/glxcmds.c
+++ b/glx/glxcmds.c
@@ -1697,13 +1697,21 @@ int __glXDisp_BindTexImageEXT(__GLXclientState *cl, GLbyte *pc)
     GLXDrawable		 drawId;
     int			 buffer;
     int			 error;
+    CARD32		 num_attribs;
 
-    REQUEST_FIXED_SIZE(xGLXVendorPrivateReq, 8);
+    if ((sizeof(xGLXVendorPrivateReq) + 12) >> 2 > client->req_len)
+	return BadLength;
 
     pc += __GLX_VENDPRIV_HDR_SIZE;
 
     drawId = *((CARD32 *) (pc));
     buffer = *((INT32 *)  (pc + 4));
+    num_attribs = *((CARD32 *) (pc + 8));
+    if (num_attribs > (UINT32_MAX >> 3)) {
+	client->errorValue = num_attribs;
+	return BadValue;
+    }
+    REQUEST_FIXED_SIZE(xGLXVendorPrivateReq, 12 + (num_attribs << 3));
 
     if (buffer != GLX_FRONT_LEFT_EXT)
 	return __glXError(GLXBadPixmap);
diff --git a/glx/glxcmdsswap.c b/glx/glxcmdsswap.c
index 9d96c9d..d58de62 100644
--- a/glx/glxcmdsswap.c
+++ b/glx/glxcmdsswap.c
@@ -648,19 +648,23 @@ int __glXDispSwap_BindTexImageEXT(__GLXclientState *cl, GLbyte *pc)
     xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *) pc;
     GLXDrawable		 *drawId;
     int			 *buffer;
+    CARD32		 *num_attribs;
     __GLX_DECLARE_SWAP_VARIABLES;
 
-    REQUEST_FIXED_SIZE(xGLXVendorPrivateReq, 8);
+    if ((sizeof(xGLXVendorPrivateReq) + 12) >> 2 > client->req_len)
+	return BadLength;
 
     pc += __GLX_VENDPRIV_HDR_SIZE;
 
     drawId = ((GLXDrawable *) (pc));
     buffer = ((int *)	      (pc + 4));
+    num_attribs = ((CARD32 *) (pc + 8));
     
     __GLX_SWAP_SHORT(&req->length);
     __GLX_SWAP_INT(&req->contextTag);
     __GLX_SWAP_INT(drawId);
     __GLX_SWAP_INT(buffer);
+    __GLX_SWAP_INT(num_attribs);
 
     return __glXDisp_BindTexImageEXT(cl, (GLbyte *)pc);
 }
commit a883cf1545abd89bb2cadfa659718884b56fd234
Author: Julien Cristau <jcristau at debian.org>
Date:   Sun Jan 23 17:05:26 2011 +0100

    glx: fix request length check for CreateGLXPbufferSGIX
    
    The request is followed by an attribute list.
    
    Signed-off-by: Julien Cristau <jcristau at debian.org>
    Reviewed-by: Adam Jackson <ajax at redhat.com>

diff --git a/glx/glxcmds.c b/glx/glxcmds.c
index 3ef567d..0b375c3 100644
--- a/glx/glxcmds.c
+++ b/glx/glxcmds.c
@@ -1436,7 +1436,7 @@ int __glXDisp_CreateGLXPbufferSGIX(__GLXclientState *cl, GLbyte *pc)
     ClientPtr client = cl->client;
     xGLXCreateGLXPbufferSGIXReq *req = (xGLXCreateGLXPbufferSGIXReq *) pc;
 
-    REQUEST_SIZE_MATCH(xGLXCreateGLXPbufferSGIXReq);
+    REQUEST_AT_LEAST_SIZE(xGLXCreateGLXPbufferSGIXReq);
 
     return DoCreatePbuffer(cl->client, req->screen, req->fbconfig,
 			   req->width, req->height, req->pbuffer);
diff --git a/glx/glxcmdsswap.c b/glx/glxcmdsswap.c
index 3bb4cad..9d96c9d 100644
--- a/glx/glxcmdsswap.c
+++ b/glx/glxcmdsswap.c
@@ -421,7 +421,7 @@ int __glXDispSwap_CreateGLXPbufferSGIX(__GLXclientState *cl, GLbyte *pc)
     xGLXCreateGLXPbufferSGIXReq *req = (xGLXCreateGLXPbufferSGIXReq *) pc;    
     __GLX_DECLARE_SWAP_VARIABLES;
 
-    REQUEST_SIZE_MATCH(xGLXCreateGLXPbufferSGIXReq);
+    REQUEST_AT_LEAST_SIZE(xGLXCreateGLXPbufferSGIXReq);
 
     __GLX_SWAP_INT(&req->screen);
     __GLX_SWAP_INT(&req->fbconfig);
commit c9f7b303a36ca501c6ecf1196c266ee8e8f49d2d
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Feb 11 13:50:10 2011 +1000

    xfixes: calloc, not malloc the cursorScreenRec
    
    Debugging NULL pointers is significantly easier than random memory.
    Plus, if new fields (such as pointer barriers) are added they may just be
    properly initialised.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Keith Packard <keithp at keithp.com>

diff --git a/xfixes/cursor.c b/xfixes/cursor.c
index 54e5d75..fb608f6 100644
--- a/xfixes/cursor.c
+++ b/xfixes/cursor.c
@@ -1045,7 +1045,7 @@ XFixesCursorInit (void)
 	ScreenPtr	pScreen = screenInfo.screens[i];
 	CursorScreenPtr	cs;
 
-	cs = (CursorScreenPtr) malloc(sizeof (CursorScreenRec));
+	cs = (CursorScreenPtr) calloc(1, sizeof (CursorScreenRec));
 	if (!cs)
 	    return FALSE;
 	Wrap (cs, pScreen, CloseScreen, CursorCloseScreen);
commit d3499556d8d83396fa2585bd00371a81e086be36
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Feb 10 15:12:14 2011 +1000

    xkb: if the keymap failed to compile, load the default keymap instead.
    
    We really need symbols, compat, keynames, vmods and types for a sensible keymap.
    
    Try this in your xorg.conf.d snippets for all keyboards:
            Option "XkbLayout" "us"
            Option "XkbVariant" "nodeadkeys"
    
    us(nodeadkeys) doesn't exist so xkbcomp provides everything but the symbols
    map. We say we want everything but don't _need_ anything, the server happily
    gives us a keymap with every key mapped to NoSymbol. This in turn isn't what
    we want after all.
    
    So instead, require symbols, compat, keynames, vmods and types from the
    keymap and if that fails, load the default keymap instead. If that fails
    too, all bets are off.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Dan Nicholson <dbn.lists at gmail.com>

diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c
index b968c43..ac587fc 100644
--- a/xkb/ddxLoad.c
+++ b/xkb/ddxLoad.c
@@ -470,13 +470,34 @@ XkbDescPtr
 XkbCompileKeymap(DeviceIntPtr dev, XkbRMLVOSet *rmlvo)
 {
     XkbDescPtr xkb;
+    unsigned int need;
 
     if (!dev || !rmlvo) {
         LogMessage(X_ERROR, "XKB: No device or RMLVO specified\n");
         return NULL;
     }
 
-    xkb = XkbCompileKeymapForDevice(dev, rmlvo, 0);
+    /* These are the components we really really need */
+    need = XkmSymbolsMask | XkmCompatMapMask | XkmTypesMask |
+           XkmKeyNamesMask | XkmVirtualModsMask;
+
+
+    xkb = XkbCompileKeymapForDevice(dev, rmlvo, need);
+
+    if (!xkb) {
+        XkbRMLVOSet dflts;
+
+        /* we didn't get what we really needed. And that will likely leave
+         * us with a keyboard that doesn't work. Use the defaults instead */
+        LogMessage(X_ERROR, "XKB: Failed to load keymap. Loading default "
+                   "keymap instead.\n");
+
+        XkbGetRulesDflts(&dflts);
+
+        xkb = XkbCompileKeymapForDevice(dev, &dflts, 0);
+
+        XkbFreeRMLVOSet(&dflts, FALSE);
+    }
 
     return xkb;
 }
commit 47d1d2fed656c3a3b2600491078da90962c46934
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Feb 10 15:11:34 2011 +1000

    xkb: split out keymap compilation.
    
    Refactoring for simpler double-use in the next patch. No functional changes.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Dan Nicholson <dbn.lists at gmail.com>

diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c
index 51b5777..b968c43 100644
--- a/xkb/ddxLoad.c
+++ b/xkb/ddxLoad.c
@@ -425,35 +425,58 @@ XkbRF_RulesPtr	rules;
     return complete;
 }
 
-XkbDescPtr
-XkbCompileKeymap(DeviceIntPtr dev, XkbRMLVOSet *rmlvo)
+static Bool
+XkbRMLVOtoKcCGST(DeviceIntPtr dev, XkbRMLVOSet *rmlvo, XkbComponentNamesPtr kccgst)
 {
-    XkbComponentNamesRec kccgst;
     XkbRF_VarDefsRec mlvo;
-    XkbDescPtr xkb;
-    char name[PATH_MAX];
-
-    if (!dev || !rmlvo) {
-        LogMessage(X_ERROR, "XKB: No device or RMLVO specified\n");
-        return NULL;
-    }
 
     mlvo.model = rmlvo->model;
     mlvo.layout = rmlvo->layout;
     mlvo.variant = rmlvo->variant;
     mlvo.options = rmlvo->options;
 
-    /* XDNFR already logs for us. */
-    if (!XkbDDXNamesFromRules(dev, rmlvo->rules, &mlvo, &kccgst))
+    return XkbDDXNamesFromRules(dev, rmlvo->rules, &mlvo, kccgst);
+}
+
+/**
+ * Compile the given RMLVO keymap and return it. Returns the XkbDescPtr on
+ * success or NULL on failure. If the components compiled are not a superset
+ * or equal to need, the compiliation is treated as failure.
+ */
+static XkbDescPtr
+XkbCompileKeymapForDevice(DeviceIntPtr dev, XkbRMLVOSet *rmlvo, int need)
+{
+    XkbDescPtr xkb;
+    unsigned int provided;
+    XkbComponentNamesRec kccgst;
+    char name[PATH_MAX];
+
+    if (!XkbRMLVOtoKcCGST(dev, rmlvo, &kccgst))
         return NULL;
 
-    /* XDLKBN too, but it might return 0 as well as allocating. */
-    if (!XkbDDXLoadKeymapByNames(dev, &kccgst, XkmAllIndicesMask, 0, &xkb, name,
-                                 PATH_MAX)) {
-        if (xkb)
+    provided = XkbDDXLoadKeymapByNames(dev, &kccgst, XkmAllIndicesMask, need,
+                                       &xkb, name, PATH_MAX);
+    if ((need & provided) != need) {
+        if (xkb) {
             XkbFreeKeyboard(xkb, 0, TRUE);
+            xkb = NULL;
+        }
+    }
+
+    return xkb;
+}
+
+XkbDescPtr
+XkbCompileKeymap(DeviceIntPtr dev, XkbRMLVOSet *rmlvo)
+{
+    XkbDescPtr xkb;
+
+    if (!dev || !rmlvo) {
+        LogMessage(X_ERROR, "XKB: No device or RMLVO specified\n");
         return NULL;
     }
 
+    xkb = XkbCompileKeymapForDevice(dev, rmlvo, 0);
+
     return xkb;
 }
commit 787ba25a8a3af52b38448a1a6f8c9704ea8b7905
Author: Carlos Garnacho <carlosg at gnome.org>
Date:   Mon Feb 7 18:21:31 2011 +0100

    Xi: make XIQueryPointer return the current modifiers/group as documented.
    
    The previous XKB info was being returned instead of the current
    one, producing inconsistent results between the latest events
    and the modifiers/group returned by this call.
    
    Signed-off-by: Carlos Garnacho <carlosg at gnome.org>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>`
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/xiquerypointer.c b/Xi/xiquerypointer.c
index b521c48..8df958e 100644
--- a/Xi/xiquerypointer.c
+++ b/Xi/xiquerypointer.c
@@ -129,7 +129,7 @@ ProcXIQueryPointer(ClientPtr client)
 
     if (kbd)
     {
-        state = &kbd->key->xkbInfo->prev_state;
+        state = &kbd->key->xkbInfo->state;
         rep.mods.base_mods = state->base_mods;
         rep.mods.latched_mods = state->latched_mods;
         rep.mods.locked_mods = state->locked_mods;
commit 85f9017393c9bb19553e9afcf554673a44a09993
Author: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira at nokia.com>
Date:   Tue Feb 8 11:10:10 2011 +0200

    ProcXkbGetXkbByName: fix use of uninitialised bytes valgrind error.
    
    ==9999== Syscall param writev(vector[...]) points to uninitialised byte(s)
    ==9999==    at 0x4AB5154: writev (writev.c:51)
    ==9999==    by 0x7C7C3: _XSERVTransWritev (Xtrans.c:912)
    ==9999==    by 0x61C8B: FlushClient (io.c:924)
    ==9999==    by 0x62423: WriteToClient (io.c:846)
    ==9999==    by 0xCE39B: XkbSendMap (xkb.c:1408)
    ==9999==    by 0xD247B: ProcXkbGetKbdByName (xkb.c:5814)
    ==9999==    by 0x4AB53: Dispatch (dispatch.c:432)
    ==9999==    by 0x205BF: main (main.c:291)
    ==9999==  Address 0x557eb68 is 40 bytes inside a block of size 4,096 alloc'd
    ==9999==    at 0x48334A4: calloc (vg_replace_malloc.c:467)
    ==9999==    by 0x62567: WriteToClient (io.c:1065)
    ==9999==    by 0x452EB: ProcEstablishConnection (dispatch.c:3685)
    ==9999==    by 0x4AB53: Dispatch (dispatch.c:432)
    ==9999==    by 0x205BF: main (main.c:291)
    ==9999==  Uninitialised value was created by a stack allocation
    ==9999==    at 0xD1910: ProcXkbGetKbdByName (xkb.c:5559)
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Oliver McFadden <oliver.mcfadden at nokia.com>
    Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira at nokia.com>

diff --git a/xkb/xkb.c b/xkb/xkb.c
index a2cbbf3..a57139f 100644
--- a/xkb/xkb.c
+++ b/xkb/xkb.c
@@ -5569,13 +5569,13 @@ ProcXkbGetKbdByName(ClientPtr client)
 {
     DeviceIntPtr 		dev;
     DeviceIntPtr                tmpd;
-    xkbGetKbdByNameReply 	rep;
-    xkbGetMapReply		mrep;
-    xkbGetCompatMapReply	crep;
-    xkbGetIndicatorMapReply	irep;
-    xkbGetNamesReply		nrep;
-    xkbGetGeometryReply		grep;
-    XkbComponentNamesRec	names;
+    xkbGetKbdByNameReply 	rep = {0};
+    xkbGetMapReply		mrep = {0};
+    xkbGetCompatMapReply	crep = {0};
+    xkbGetIndicatorMapReply	irep = {0};
+    xkbGetNamesReply		nrep = {0};
+    xkbGetGeometryReply		grep = {0};
+    XkbComponentNamesRec	names = {0};
     XkbDescPtr			xkb, new;
     unsigned char *		str;
     char 			mapFile[PATH_MAX];
commit 8a34d7a8532c7ca013e67307f3baf200167abb92
Author: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira at nokia.com>
Date:   Tue Feb 8 11:10:11 2011 +0200

    XkbSendNames: fix use of uninitialised bytes valgrind error.
    
    ==537== Syscall param writev(vector[...]) points to uninitialised byte(s)
    ==537==    at 0x4AB7154: writev (writev.c:51)
    ==537==    by 0x8935B: _XSERVTransWritev (Xtrans.c:912)
    ==537==    by 0x6C55F: FlushClient (io.c:924)
    ==537==    by 0x6CCF3: WriteToClient (io.c:846)
    ==537==    by 0xD51D3: XkbSendNames (xkb.c:3765)
    ==537==    by 0xD8183: ProcXkbGetKbdByName (xkb.c:5825)
    ==537==    by 0x27B7B: Dispatch (dispatch.c:432)
    ==537==    by 0x205B7: main (main.c:291)
    ==537==  Address 0x55899f2 is 154 bytes inside a block of size 1,896 alloc'd
    ==537==    at 0x4834C48: malloc (vg_replace_malloc.c:236)
    ==537==    by 0xD47AF: XkbSendNames (xkb.c:3642)
    ==537==    by 0xD8183: ProcXkbGetKbdByName (xkb.c:5825)
    ==537==    by 0x27B7B: Dispatch (dispatch.c:432)
    ==537==    by 0x205B7: main (main.c:291)
    ==537==  Uninitialised value was created by a heap allocation
    ==537==    at 0x4834C48: malloc (vg_replace_malloc.c:236)
    ==537==    by 0xD47AF: XkbSendNames (xkb.c:3642)
    ==537==    by 0xD8183: ProcXkbGetKbdByName (xkb.c:5825)
    ==537==    by 0x27B7B: Dispatch (dispatch.c:432)
    ==537==    by 0x205B7: main (main.c:291)
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Oliver McFadden <oliver.mcfadden at nokia.com>
    Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira at nokia.com>

diff --git a/xkb/xkb.c b/xkb/xkb.c
index 6fd66c5..a2cbbf3 100644
--- a/xkb/xkb.c
+++ b/xkb/xkb.c
@@ -3644,7 +3644,7 @@ register int            n;
 	swapl(&rep->indicators,n);
     }
 
-    start = desc = malloc(length);
+    start = desc = calloc(1, length);
     if ( !start )
 	return BadAlloc;
     if (xkb->names) {
commit 87fbef9157a6f1e1318382e368d27942d7ad72ab
Author: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira at nokia.com>
Date:   Tue Feb 8 11:10:09 2011 +0200

    ProcRRCreateMode: fix use of uninitialised bytes valgrind error.
    
    ==543== Syscall param writev(vector[...]) points to uninitialised byte(s)
    ==543==    at 0x4AB7154: writev (writev.c:51)
    ==543==    by 0x8935B: _XSERVTransWritev (Xtrans.c:912)
    ==543==    by 0x6C55F: FlushClient (io.c:924)
    ==543==    by 0x6D013: FlushAllOutput (io.c:668)
    ==543==    by 0x27A83: Dispatch (dispatch.c:453)
    ==543==    by 0x205B7: main (main.c:291)
    ==543==  Address 0x556dc8c is 12 bytes inside a block of size 4,096 alloc'd
    ==543==    at 0x48334A4: calloc (vg_replace_malloc.c:467)
    ==543==    by 0x6CE37: WriteToClient (io.c:1065)
    ==543==    by 0x223A7: ProcEstablishConnection (dispatch.c:3685)
    ==543==    by 0x27B7B: Dispatch (dispatch.c:432)
    ==543==    by 0x205B7: main (main.c:291)
    ==543==  Uninitialised value was created by a stack allocation
    ==543==    at 0xA3350: ProcRRCreateMode (rrmode.c:289)
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Oliver McFadden <oliver.mcfadden at nokia.com>
    Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira at nokia.com>

diff --git a/randr/rrmode.c b/randr/rrmode.c
index 5ffa400..d7560dc 100644
--- a/randr/rrmode.c
+++ b/randr/rrmode.c
@@ -288,7 +288,7 @@ int
 ProcRRCreateMode (ClientPtr client)
 {
     REQUEST(xRRCreateModeReq);
-    xRRCreateModeReply	rep;
+    xRRCreateModeReply	rep = {0};
     WindowPtr		pWin;
     ScreenPtr		pScreen;
     rrScrPrivPtr	pScrPriv;
commit 0ef5973860e17c5edc996c923610f7ad88b4dfbe
Author: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira at nokia.com>
Date:   Tue Feb 8 11:10:08 2011 +0200

    ProcRRQueryVersion: fix use of uninitialised bytes valgrind error.
    
    ==9999== Syscall param writev(vector[...]) points to uninitialised byte(s)
    ==9999==    at 0x4AB5154: writev (writev.c:51)
    ==9999==    by 0x7C7C3: _XSERVTransWritev (Xtrans.c:912)
    ==9999==    by 0x61C8B: FlushClient (io.c:924)
    ==9999==    by 0x62743: FlushAllOutput (io.c:668)
    ==9999==    by 0x4AA5B: Dispatch (dispatch.c:453)
    ==9999==    by 0x205BF: main (main.c:291)
    ==9999==  Address 0x55711b9 is 1 bytes inside a block of size 4,096 alloc'd
    ==9999==    at 0x48334A4: calloc (vg_replace_malloc.c:467)
    ==9999==    by 0x62567: WriteToClient (io.c:1065)
    ==9999==    by 0x452EB: ProcEstablishConnection (dispatch.c:3685)
    ==9999==    by 0x4AB53: Dispatch (dispatch.c:432)
    ==9999==    by 0x205BF: main (main.c:291)
    ==9999==  Uninitialised value was created by a stack allocation
    ==9999==    at 0x160E78: ProcRRQueryVersion (rrdispatch.c:37)
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Oliver McFadden <oliver.mcfadden at nokia.com>
    Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira at nokia.com>

diff --git a/randr/rrdispatch.c b/randr/rrdispatch.c
index aed746b..b0b451c 100644
--- a/randr/rrdispatch.c
+++ b/randr/rrdispatch.c
@@ -35,7 +35,7 @@ RRClientKnowsRates (ClientPtr	pClient)
 static int
 ProcRRQueryVersion (ClientPtr client)
 {
-    xRRQueryVersionReply rep;
+    xRRQueryVersionReply rep = {0};
     register int n;
     REQUEST(xRRQueryVersionReq);
     rrClientPriv(client);
commit 81daba8ce906bfbbe44cd71d0ff269ad34e2f6b5
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Jan 31 13:53:08 2011 +1000

    Xi: constify XIChangeDeviceProperty()
    
    We don't modify "value", make it official.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas at canonical.com>
    Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira at nokia.com>

diff --git a/Xi/xiproperty.c b/Xi/xiproperty.c
index b9f53f7..17835e2 100644
--- a/Xi/xiproperty.c
+++ b/Xi/xiproperty.c
@@ -701,7 +701,7 @@ XIDeleteDeviceProperty (DeviceIntPtr device, Atom property, Bool fromClient)
 int
 XIChangeDeviceProperty (DeviceIntPtr dev, Atom property, Atom type,
                         int format, int mode, unsigned long len,
-                        pointer value, Bool sendevent)
+                        const pointer value, Bool sendevent)
 {
     XIPropertyPtr               prop;
     int                         size_in_bytes;
diff --git a/include/exevents.h b/include/exevents.h
index dc59430..2b22698 100644
--- a/include/exevents.h
+++ b/include/exevents.h
@@ -69,7 +69,7 @@ extern _X_EXPORT int XIChangeDeviceProperty(
         int                     /* format*/,
         int                     /* mode*/,
         unsigned long           /* len*/,
-        pointer                 /* value*/,
+        const pointer           /* value*/,
         Bool                    /* sendevent*/
         );
 
commit 93cd4b1034e3c8bed32c5acd391eadd7605e10f0
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Jan 20 00:27:00 2011 -0500

    shadow: Remove hw/xfree86/ from includes
    
    Reviewed-by: Matt Turner <mattst88 at gmail.com>
    Reviewed-by: Julien Cristau <jcristau at debian.org>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/miext/shadow/Makefile.am b/miext/shadow/Makefile.am
index a73d0ec..30f7bda 100644
--- a/miext/shadow/Makefile.am
+++ b/miext/shadow/Makefile.am
@@ -2,8 +2,6 @@ noinst_LTLIBRARIES = libshadow.la
 
 AM_CFLAGS = $(DIX_CFLAGS)
 
-INCLUDES = -I$(top_srcdir)/hw/xfree86/os-support
-
 if XORG
 sdk_HEADERS = shadow.h
 endif
commit 0c230728f3af2c4250e93a070c0851a597069447
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Jan 20 00:25:57 2011 -0500

    rootless: Remove hw/xfree86/ from includes
    
    Reviewed-by: Matt Turner <mattst88 at gmail.com>
    Reviewed-by: Julien Cristau <jcristau at debian.org>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/miext/rootless/Makefile.am b/miext/rootless/Makefile.am
index f09300d..c97bebe 100644
--- a/miext/rootless/Makefile.am
+++ b/miext/rootless/Makefile.am
@@ -1,5 +1,4 @@
 AM_CFLAGS = $(DIX_CFLAGS) $(XSERVER_CFLAGS)
-AM_CPPFLAGS = -I$(top_srcdir)/hw/xfree86/os-support
 
 noinst_LTLIBRARIES = librootless.la
 librootless_la_SOURCES = \
commit 505defd270e49cfbcbe6a04d1de817d305edb3c2
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Jan 20 00:24:20 2011 -0500

    damage: Remove hw/xfree86/ from includes
    
    Reviewed-by: Matt Turner <mattst88 at gmail.com>
    Reviewed-by: Julien Cristau <jcristau at debian.org>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/miext/damage/Makefile.am b/miext/damage/Makefile.am
index 5958357..767a65a 100644
--- a/miext/damage/Makefile.am
+++ b/miext/damage/Makefile.am
@@ -2,7 +2,7 @@ noinst_LTLIBRARIES = libdamage.la
 
 AM_CFLAGS = $(DIX_CFLAGS)
 
-INCLUDES = -I$(srcdir)/../cw -I$(top_srcdir)/hw/xfree86/os-support
+INCLUDES = -I$(srcdir)/../cw
 
 if XORG
 sdk_HEADERS = damage.h damagestr.h
commit 59d8e3cbdba032c7354c28c86cbd155e9da6447a
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Jan 20 00:23:07 2011 -0500

    fb: Remove hw/xfree86/ from includes
    
    Reviewed-by: Matt Turner <mattst88 at gmail.com>
    Reviewed-by: Julien Cristau <jcristau at debian.org>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/fb/Makefile.am b/fb/Makefile.am
index f9f34c4..89f3bab 100644
--- a/fb/Makefile.am
+++ b/fb/Makefile.am
@@ -1,9 +1,5 @@
 noinst_LTLIBRARIES = libfb.la libwfb.la
 
-INCLUDES = \
-	-I$(top_srcdir)/hw/xfree86/os-support \
-	-I$(top_srcdir)/hw/xfree86/os-support/bus \
-	-I$(top_srcdir)/hw/xfree86/common
 AM_CFLAGS = $(DIX_CFLAGS)
 
 if XORG
commit 994b7b3dc97f9afa713fe636af45a78002a4366f
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Jan 20 00:17:52 2011 -0500

    xfree86: warning fix
    
    Did you know that anonymous enums with function scope will not only
    override the enum values from global scope, but will be treated as
    entirely different types?  C's type system just rules.
    
    xf86Crtc.c: In function 'handle_detailed_monrec':
    xf86Crtc.c:1555:33: warning: comparison between 'enum det_monrec_source' and 'enum <anonymous>'
    xf86Crtc.c:1562:33: warning: comparison between 'enum det_monrec_source' and 'enum <anonymous>'
    
    Reviewed-by: Matt Turner <mattst88 at gmail.com>
    Reviewed-by: Julien Cristau <jcristau at debian.org>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 47d3ad1..b5e9dc2 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -1542,7 +1542,6 @@ struct det_monrec_parameter {
 static void handle_detailed_monrec(struct detailed_monitor_section *det_mon,
                                    void *data)
 {
-    enum { sync_config, sync_edid, sync_default };
     struct det_monrec_parameter *p;
     p = (struct det_monrec_parameter *)data;
 
commit ae16c5796fdb22fb6b2f680fe5123bfd2c89a825
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Jan 20 00:14:11 2011 -0500

    fbdevhw: Remove the non-sysfs hack for mapping from PCI to fbdev
    
    It's broken for devices with BARs above 4G, and the sysfs method should
    work everywhere anyway.  As a pleasant side effect, this fixes some
    warnings:
    
    fbdevhw.c: In function 'fbdev_open_pci':
    fbdevhw.c:333:4: warning: cast from pointer to integer of different size
    fbdevhw.c:334:4: warning: cast from pointer to integer of different size
    fbdevhw.c:336:4: warning: cast from pointer to integer of different size
    fbdevhw.c:337:4: warning: cast from pointer to integer of different size
    
    Reviewed-by: Matt Turner <mattst88 at gmail.com>
    Reviewed-by: Julien Cristau <jcristau at debian.org>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c
index a5b59e7..17fba36 100644
--- a/hw/xfree86/fbdevhw/fbdevhw.c
+++ b/hw/xfree86/fbdevhw/fbdevhw.c
@@ -264,14 +264,7 @@ fbdev_open_pci(struct pci_device * pPci, char **namep)
 {
     struct	fb_fix_screeninfo fix;
     char	filename[256];
-    int	fd,i,j;
-
-
-    /* There are two ways to that we can determine which fb device is
-     * associated with this PCI device.  The more modern way is to look in
-     * the sysfs directory for the PCI device for a file named
-     * "graphics/fb*"
-     */
+    int	fd, i;
 
     for (i = 0; i < 8; i++) {
 	sprintf(filename, 
@@ -304,55 +297,10 @@ fbdev_open_pci(struct pci_device * pPci, char **namep)
 	}
     }
 
-
-    /* The other way is to examine the resources associated with each fb
-     * device and see if there is a match with the PCI device.  This technique
-     * has some problems on certain mixed 64-bit / 32-bit architectures.
-     * There is a flaw in the fb_fix_screeninfo structure in that it only
-     * returns the low 32-bits of the address of the resources associated with
-     * a device.  However, on a mixed architecture the base addresses of PCI
-     * devices, even for 32-bit applications, may be higher than 0x0f0000000.
-     */
-
-    for (i = 0; i < 8; i++) {
-	sprintf(filename,"/dev/fb%d",i);
-	if (-1 == (fd = open(filename,O_RDWR,0))) {
-	    xf86DrvMsg(-1, X_WARNING,
-		       "open %s: %s\n", filename, strerror(errno));
-	    continue;
-	}
-	if (-1 == ioctl(fd,FBIOGET_FSCREENINFO,(void*)&fix)) {
-	    close(fd);
-	    continue;
-	}
-	for (j = 0; j < 6; j++) {
-	    const pciaddr_t res_start = pPci->regions[j].base_addr;
-	    const pciaddr_t res_end = res_start + pPci->regions[j].size;
-
-	    if ((0 != fix.smem_len &&
-		 (pciaddr_t) fix.smem_start >= res_start &&
-		 (pciaddr_t) fix.smem_start < res_end) ||
-		(0 != fix.mmio_len &&
-		 (pciaddr_t) fix.mmio_start >= res_start &&
-		 (pciaddr_t) fix.mmio_start < res_end))
-	      break;
-	}
-	if (j == 6) {
-	    close(fd);
-	    continue;
-	}
-	if (namep) {
-	    *namep = xnfalloc(16);
-	    strncpy(*namep,fix.id,16);
-	}
-	return fd;
-    }
-
     if (namep)
       *namep = NULL;
 
-    xf86DrvMsg(-1, X_ERROR,
-	       "Unable to find a valid framebuffer device\n");
+    xf86DrvMsg(-1, X_ERROR, "Unable to find a valid framebuffer device\n");
     return -1;
 }
 
commit f1b7c9cead94b520e6b96774d605d63d3f341b50
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Jan 20 00:09:19 2011 -0500

    int10: warning fix
    
    helper_exec.c: In function 'pciCfg1in':
    helper_exec.c:507:4: warning: passing argument 2 of 'pci_device_cfg_read_u32' from incompatible pointer type
    /usr/include/pciaccess.h:153:5: note: expected 'uint32_t *' but argument is of type 'CARD32 *'
    
    Reviewed-by: Matt Turner <mattst88 at gmail.com>
    Reviewed-by: Julien Cristau <jcristau at debian.org>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/xfree86/int10/helper_exec.c b/hw/xfree86/int10/helper_exec.c
index b9af473..ec84200 100644
--- a/hw/xfree86/int10/helper_exec.c
+++ b/hw/xfree86/int10/helper_exec.c
@@ -504,7 +504,7 @@ pciCfg1in(CARD16 addr, CARD32 *val)
     }
     if (addr == 0xCFC) {
 	pci_device_cfg_read_u32(pci_device_for_cfg_address(PciCfg1Addr),
-			val, PCI_OFFSET(PciCfg1Addr));
+			(uint32_t *)val, PCI_OFFSET(PciCfg1Addr));
 	if (PRINT_PORT && DEBUG_IO_TRACE())
 	    ErrorF(" cfg_inl(%#lx) = %8.8lx\n", PciCfg1Addr, *val);
 	return 1;
commit be186586e504197623c69637b8122fb814f59429
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Jan 20 00:06:48 2011 -0500

    xf86vidmode: warning fix
    
    xf86VidMode.c: In function 'VidModeGetMonitorValue':
    xf86VidMode.c:637:19: warning: 'ret.i' may be used uninitialized in this function
    
    Reviewed-by: Matt Turner <mattst88 at gmail.com>
    Reviewed-by: Julien Cristau <jcristau at debian.org>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/xfree86/common/xf86VidMode.c b/hw/xfree86/common/xf86VidMode.c
index 1788fa1..4dd454d 100644
--- a/hw/xfree86/common/xf86VidMode.c
+++ b/hw/xfree86/common/xf86VidMode.c
@@ -634,7 +634,7 @@ VidModeSetModeValue(pointer mode, int valtyp, int val)
 vidMonitorValue
 VidModeGetMonitorValue(pointer monitor, int valtyp, int indx)
 {
-  vidMonitorValue ret;
+  vidMonitorValue ret = { NULL, };
   
   switch (valtyp) {
     case VIDMODE_MON_VENDOR:
commit f6e4ace9eabea1bb2a06dd86b6ffb954917a74ce
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Sun Jul 18 13:24:48 2010 +0100

    Cygwin/X: Fix for Canadian Multilingual Standard keyboard layout handling
    
    Add a keycode mapping for VK_OEM_8 as RCtrl, which is issued by Canadian
    Multilingual Standard layout
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Colin Harrison <colin.harrison at virgin.net>

diff --git a/hw/xwin/winkeybd.h b/hw/xwin/winkeybd.h
index 662392b..4e4c35c 100644
--- a/hw/xwin/winkeybd.h
+++ b/hw/xwin/winkeybd.h
@@ -266,7 +266,7 @@ g_iKeyMap [] = {
   /* 220 */	0,		0,		0,
   /* 221 */	0,		0,		0,
   /* 222 */	0,		0,		0,
-  /* 223 */	0,		0,		0,
+  /* 223 */	VK_OEM_8,	0,		KEY_RCtrl,  /* at least on Candian Multilingual Standard layout */
   /* 224 */	0,		0,		0,
   /* 225 */	0,		0,		0,
   /* 226 */	0,		0,		0,
commit b421f5e5122dbe125a5629969cc657bd966b4261
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Thu Apr 1 23:10:58 2010 +0100

    Cygwin/X: Ignore MappingNotify events sent to clipboard integration client
    
    Ignore MappingNotify events sent to clipboard integration client,
    xmodmap changes aren't of interest to it, but there is no mechanism
    to express that disinterest.
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Colin Harrison <colin.harrison at virgin.net>

diff --git a/hw/xwin/winclipboardxevents.c b/hw/xwin/winclipboardxevents.c
index 2f042fd..8b502b1 100644
--- a/hw/xwin/winclipboardxevents.c
+++ b/hw/xwin/winclipboardxevents.c
@@ -789,6 +789,9 @@ winClipboardFlushXEvents (HWND hwnd,
 	case PropertyNotify:
 	  break;
 
+	case MappingNotify:
+	  break;
+
 	default:
           ErrorF ("winClipboardFlushXEvents - unexpected event type %d\n", event.type);
 	  break;
commit e930aa7bbc7f04a128df8e6fd441aed5123a2eb6
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Tue Sep 14 16:02:53 2010 +0100

    Cygwin/X: Add Turkish keyboard layouts to keyboard layout mapping table
    
    0x0000041f "Turkish Q" => layout tr
    0x0001041f "Turkish F" => layout tr variant f
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Colin Harrison <colin.harrison at virgin.net>

diff --git a/hw/xwin/winlayouts.h b/hw/xwin/winlayouts.h
index 288af19..ce502a0 100644
--- a/hw/xwin/winlayouts.h
+++ b/hw/xwin/winlayouts.h
@@ -81,6 +81,8 @@ WinKBLayoutRec winKBLayouts[] =
     {  0x00000816, -1, "pc105",     "pt",        NULL,        NULL, "Portuguese (Portugal)"},
     {  0x0000041a, -1, "pc105",     "hr",        NULL,        NULL, "Croatian"},
     {  0x0000041d, -1, "pc105",     "se",        NULL,        NULL, "Swedish (Sweden)"},
+    {  0x0000041f, -1, "pc105",     "tr",        NULL,        NULL, "Turkish (Q)"},
+    {  0x0001041f, -1, "pc105",     "tr",        "f",         NULL, "Turkish (F)"},
     {  0x00000424, -1, "pc105",     "si",        NULL,        NULL, "Slovenian"},
     {  0x00000425, -1, "pc105",     "ee",        NULL,        NULL, "Estonian"},
     {  0x00000452, -1, "pc105",     "gb",        "intl",      NULL, "United Kingdom (Extended)"},
commit ae99a6f895a3a5b6f71e2dd4874cd4bb0235aff0
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Sun Jul 18 13:42:29 2010 +0100

    Cygwin/X: Make the keyboard layout detection logging a bit clearer
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Colin Harrison <colin.harrison at virgin.net>

diff --git a/hw/xwin/winconfig.c b/hw/xwin/winconfig.c
index 758c54d..76bf8e2 100644
--- a/hw/xwin/winconfig.c
+++ b/hw/xwin/winconfig.c
@@ -240,6 +240,7 @@ Bool
 winConfigKeyboard (DeviceIntPtr pDevice)
 {
   char                          layoutName[KL_NAMELENGTH];
+  unsigned char                 layoutFriendlyName[256];
   static unsigned int           layoutNum = 0;
   int                           keyboardType;
 #ifdef XWIN_XF86CONFIG
@@ -299,11 +300,32 @@ winConfigKeyboard (DeviceIntPtr pDevice)
 	    if (LoadKeyboardLayout("00000409", KLF_ACTIVATE) != NULL)
 	      winMsg (X_INFO, "Loading US keyboard layout.\n");
 	    else
-	      winMsg (X_ERROR, "LoadKeyboardLaout failed.\n");
+	      winMsg (X_ERROR, "LoadKeyboardLayout failed.\n");
 	  }
     }
-    winMsg (X_PROBED, "winConfigKeyboard - Layout: \"%s\" (%08x) \n", 
-            layoutName, layoutNum);
+
+    /* Discover the friendly name of the current layout */
+    {
+      HKEY                regkey = NULL;
+      const char          regtempl[] = "SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\";
+      char                *regpath;
+      DWORD               namesize = sizeof(layoutFriendlyName);
+
+      regpath = malloc(sizeof(regtempl) + KL_NAMELENGTH + 1);
+      strcpy(regpath, regtempl);
+      strcat(regpath, layoutName);
+
+      if (!RegOpenKey(HKEY_LOCAL_MACHINE, regpath, &regkey))
+          RegQueryValueEx(regkey, "Layout Text", 0, NULL, layoutFriendlyName, &namesize);
+
+      /* Close registry key */
+      if (regkey)
+        RegCloseKey (regkey);
+      free(regpath);
+    }
+
+    winMsg (X_PROBED, "Windows keyboard layout: \"%s\" (%08x) \"%s\", type %d\n",
+            layoutName, layoutNum, layoutFriendlyName, keyboardType);
 
     for (pLayout = winKBLayouts; pLayout->winlayout != -1; pLayout++)
       {
@@ -311,46 +333,35 @@ winConfigKeyboard (DeviceIntPtr pDevice)
 	  continue;
 	if (pLayout->winkbtype > 0 && pLayout->winkbtype != keyboardType)
 	  continue;
-	
+
         bfound = TRUE;
 	winMsg (X_PROBED,
-		"Using preset keyboard for \"%s\" (%x), type \"%d\"\n",
-		pLayout->layoutname, pLayout->winlayout, keyboardType);
-	
+		"Found matching XKB configuration \"%s\"\n",
+		pLayout->layoutname);
+
+        winMsg(X_PROBED,
+               "Model = \"%s\" Layout = \"%s\""
+               " Variant = \"%s\" Options = \"%s\"\n",
+               pLayout->xkbmodel ? pLayout->xkbmodel : "none",
+               pLayout->xkblayout ? pLayout->xkblayout : "none",
+               pLayout->xkbvariant ? pLayout->xkbvariant : "none",
+               pLayout->xkboptions ? pLayout->xkboptions : "none");
+
 	g_winInfo.xkb.model = pLayout->xkbmodel;
 	g_winInfo.xkb.layout = pLayout->xkblayout;
 	g_winInfo.xkb.variant = pLayout->xkbvariant;
-	g_winInfo.xkb.options = pLayout->xkboptions; 
+	g_winInfo.xkb.options = pLayout->xkboptions;
+
+
 	break;
       }
-    
+
     if (!bfound)
       {
-        HKEY                regkey = NULL;
-        const char          regtempl[] = 
-          "SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\";
-        char                *regpath;
-        unsigned char       lname[256];
-        DWORD               namesize = sizeof(lname);
-
-        regpath = malloc(sizeof(regtempl) + KL_NAMELENGTH + 1);
-        strcpy(regpath, regtempl);
-        strcat(regpath, layoutName);
-
-        if (!RegOpenKey(HKEY_LOCAL_MACHINE, regpath, &regkey) &&
-          !RegQueryValueEx(regkey, "Layout Text", 0, NULL, lname, &namesize))
-          {
-	    winMsg (X_ERROR,
-		"Keyboardlayout \"%s\" (%s) is unknown\n", lname, layoutName);
-          }
-
-	/* Close registry key */
-	if (regkey)
-	  RegCloseKey (regkey);
-        free(regpath);
+        winMsg (X_ERROR, "Keyboardlayout \"%s\" (%s) is unknown, using X server default layout\n", layoutFriendlyName, layoutName);
       }
-  }  
-  
+  }
+
   /* parse the configuration */
 #ifdef XWIN_XF86CONFIG
   if (g_cmdline.keyboard)
commit 57ca09441ee5ff2a8deb95eaa17a2625a756d912
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Thu Jul 1 14:54:48 2010 +0100

    Cygwin/X: Update mapping for Canadian keyboard layouts
    
    0x00000c0c "Canadian French (legacy)" => layout ca variant fr-legacy
    0x00001009 "Canadian French" => layout ca variant fr
    0x00011009 "Canadian Multilingual Standard" => layout ca variant multix
    
    Signed-off-by: Yaakov Selkowitz <yselkowitz at users.sourceforge.net>
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Colin Harrison <colin.harrison at virgin.net>

diff --git a/hw/xwin/winlayouts.h b/hw/xwin/winlayouts.h
index 9500689..288af19 100644
--- a/hw/xwin/winlayouts.h
+++ b/hw/xwin/winlayouts.h
@@ -55,13 +55,15 @@ WinKBLayoutRec winKBLayouts[] =
     {  0x00010409, -1, "pc105",     "dvorak",    NULL,        NULL, "English (USA,Dvorak)"},
     {  0x00020409, -1, "pc105",     "us_intl",   NULL,        NULL, "English (USA,International)"},
     {  0x00000809, -1, "pc105",     "gb",        NULL,        NULL, "English (United Kingdom)"},
+    {  0x00001009, -1, "pc105",     "ca",        "fr",        NULL, "French (Canada)"},
+    {  0x00011009, -1, "pc105",     "ca",        "multix",    NULL, "Canadian Multilingual Standard"},
     {  0x00001809, -1, "pc105",     "ie",        NULL,        NULL, "Irish"},
     {  0x0000040a, -1, "pc105",     "es",        NULL,        NULL, "Spanish (Spain,Traditional Sort)"},
     {  0x0000080a, -1, "pc105",     "latam",     NULL,        NULL, "Latin American"},
     {  0x0000040b, -1, "pc105",     "fi",        NULL,        NULL, "Finnish"},
     {  0x0000040c, -1, "pc105",     "fr",        NULL,        NULL, "French (Standard)"},
     {  0x0000080c, -1, "pc105",     "be",        NULL,        NULL, "French (Belgian)"},
-    {  0x00000c0c, -1, "pc105",     "ca",        "fr",        NULL, "French (Canada)"},
+    {  0x00000c0c, -1, "pc105",     "ca",        "fr-legacy", NULL, "French (Canada, Legacy)"},
     {  0x0000100c, -1, "pc105",     "ch",        "fr",        NULL, "French (Switzerland)"},
     {  0x0000040d, -1, "pc105",     "il",        NULL,        NULL, "Hebrew"},
     {  0x0000040e, -1, "pc105",     "hu",        NULL,        NULL, "Hungarian"},
@@ -89,5 +91,3 @@ WinKBLayoutRec winKBLayouts[] =
   See http://technet.microsoft.com/en-us/library/cc766503%28WS.10%29.aspx
   for a listing of input locale (keyboard layout) codes
 */
-
-
commit be3e5bb50178406e46368be00860331e1b6c4093
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Wed Apr 14 21:45:29 2010 +0100

    Cygwin/X: Better keycode debugging output
    
    Replace useless #if 0/ErrorF/#endif with winDebug
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Colin Harrison <colin.harrison at virgin.net>

diff --git a/hw/xwin/winkeybd.c b/hw/xwin/winkeybd.c
index 83fea21..9e5a9b0 100644
--- a/hw/xwin/winkeybd.c
+++ b/hw/xwin/winkeybd.c
@@ -73,6 +73,8 @@ winTranslateKey (WPARAM wParam, LPARAM lParam, int *piScanCode)
   int		iParam = HIWORD (lParam);
   int		iParamScanCode = LOBYTE (iParam);
 
+  winDebug("winTranslateKey: wParam %08x lParam %08x\n", wParam, lParam);
+
 /* WM_ key messages faked by Vista speech recognition (WSR) don't have a
  * scan code.
  *
@@ -488,10 +490,8 @@ winSendKeyEvent (DWORD dwKey, Bool fDown)
   for (i = 0; i < nevents; i++)
     mieqEnqueue(g_pwinKeyboard, (InternalEvent*)events[i].event);
 
-#if CYGDEBUG
-  ErrorF("winSendKeyEvent: dwKey: %d, fDown: %d, nEvents %d\n",
-          dwKey, fDown, nevents);
-#endif
+  winDebug("winSendKeyEvent: dwKey: %d, fDown: %d, nEvents %d\n",
+           dwKey, fDown, nevents);
 }
 
 BOOL winCheckKeyPressed(WPARAM wParam, LPARAM lParam)
diff --git a/hw/xwin/winkeyhook.c b/hw/xwin/winkeyhook.c
index fe1156d..cbee7cb 100644
--- a/hw/xwin/winkeyhook.c
+++ b/hw/xwin/winkeyhook.c
@@ -88,9 +88,7 @@ winKeyboardMessageHookLL (int iCode, WPARAM wParam, LPARAM lParam)
   /* Pass keystrokes on to our main message loop */
   if (iCode == HC_ACTION)
     {
-#if 0
-      ErrorF ("vkCode: %08x\tscanCode: %08x\n", p->vkCode, p->scanCode);
-#endif
+      winDebug("winKeyboardMessageHook: vkCode: %08x scanCode: %08x\n", p->vkCode, p->scanCode);
 
       switch (wParam)
 	{
commit 81892bf6b7e3730ebd19318183734f55dbaa5d4b
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Wed Apr 14 21:34:39 2010 +0100

    Cygwin/X: Generate X keycodes for multimedia keys
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Colin Harrison <colin.harrison at virgin.net>

diff --git a/hw/xwin/winkeybd.h b/hw/xwin/winkeybd.h
index 5b2a589..662392b 100644
--- a/hw/xwin/winkeybd.h
+++ b/hw/xwin/winkeybd.h
@@ -216,13 +216,13 @@ g_iKeyMap [] = {
   /* 170 */	0,		0,		0,
   /* 171 */	0,		0,		0,
   /* 172 */	0,		0,		0,
-  /* 173 */	0,		0,		0,
-  /* 174 */	0,		0,		0,
-  /* 175 */	0,		0,		0,
-  /* 176 */	0,		0,		0,
-  /* 177 */	0,		0,		0,
-  /* 178 */	0,		0,		0,
-  /* 179 */	0,		0,		0,
+  /* 173 */	VK_VOLUME_MUTE,	0,		KEY_Mute,
+  /* 174 */	VK_VOLUME_DOWN,	0,		KEY_AudioLower,
+  /* 175 */	VK_VOLUME_UP,	0,		KEY_AudioRaise,
+  /* 176 */	VK_MEDIA_NEXT_TRACK,	0,	KEY_NEXTSONG,
+  /* 177 */	VK_MEDIA_PREV_TRACK,	0,	KEY_PREVIOUSSONG,
+  /* 178 */	VK_MEDIA_STOP,	0,		KEY_STOPCD,
+  /* 179 */	VK_MEDIA_PLAY_PAUSE,	0,	KEY_PLAYPAUSE,
   /* 180 */	0,		0,		0,
   /* 181 */	0,		0,		0,
   /* 182 */	0,		0,		0,
diff --git a/hw/xwin/winkeynames.h b/hw/xwin/winkeynames.h
index 3d59383..914016a 100644
--- a/hw/xwin/winkeynames.h
+++ b/hw/xwin/winkeynames.h
@@ -23,10 +23,6 @@
  *
  */
 
-#define XK_TECHNICAL
-#define	XK_KATAKANA
-#include <X11/keysym.h>
-
 #define GLYPHS_PER_KEY	4
 #define NUM_KEYCODES	248
 #define MIN_KEYCODE     8
@@ -194,6 +190,15 @@
 #define KEY_HKTG         /* Hirugana/Katakana tog 0xc8  */  200
 #define KEY_BSlash2      /* \           _         0xcb  */  203
 
+#define KEY_Mute         /* Audio Mute                  */  152
+#define KEY_AudioLower   /* Audio Lower                 */  168
+#define KEY_AudioRaise   /* Audio Raise                 */  166
+
+#define KEY_NEXTSONG     /* Media next                  */  145
+#define KEY_PLAYPAUSE    /* Media play/pause toggle     */  154
+#define KEY_PREVIOUSSONG /* Media previous              */  136
+#define KEY_STOPCD       /* Media stop                  */  156
+
 /* These are for "notused" and "unknown" entries in translation maps. */
 #define KEY_NOTUSED	  0
 #define KEY_UNKNOWN	255
commit 5d020c31351594c104fb46615ce41f256cd8e8b9
Author: Pauli Nieminen <ext-pauli.nieminen at nokia.com>
Date:   Fri Jan 14 15:03:28 2011 +0200

    xf86/xv: Only register PostValidateTree hook when there is work to do
    
    If none of Xv ports were affected by window tree modifications we don't
    want scan the port list. To avoid useless scanning of port list
    PostValidateTree hook is only registered when ClipNotify was called for
    any port.
    
    Signed-off-by: Pauli Nieminen <ext-pauli.nieminen at nokia.com>
    Reviewed-by: Ville Syrjälä <ville.syrjala at nokia.com>

diff --git a/hw/xfree86/common/xf86xv.c b/hw/xfree86/common/xf86xv.c
index ea286df..53ebe8f 100644
--- a/hw/xfree86/common/xf86xv.c
+++ b/hw/xfree86/common/xf86xv.c
@@ -100,6 +100,8 @@ static void xf86XVWindowExposures(WindowPtr pWin, RegionPtr r1, RegionPtr r2);
 static void xf86XVPostValidateTree(WindowPtr pWin, WindowPtr pLayerWin, VTKind kind);
 static void xf86XVClipNotify(WindowPtr pWin, int dx, int dy);
 
+#define PostValidateTreeUndefined ((PostValidateTreeProcPtr)-1)
+
 /* ScrnInfoRec functions */
 
 static Bool xf86XVEnterVT(int, int);
@@ -283,7 +285,7 @@ xf86XVScreenInit(
 
   ScreenPriv->DestroyWindow = pScreen->DestroyWindow;
   ScreenPriv->WindowExposures = pScreen->WindowExposures;
-  ScreenPriv->PostValidateTree = pScreen->PostValidateTree;
+  ScreenPriv->PostValidateTree = PostValidateTreeUndefined;
   ScreenPriv->ClipNotify = pScreen->ClipNotify;
   ScreenPriv->EnterVT = pScrn->EnterVT;
   ScreenPriv->LeaveVT = pScrn->LeaveVT;
@@ -292,7 +294,6 @@ xf86XVScreenInit(
 
   pScreen->DestroyWindow = xf86XVDestroyWindow;
   pScreen->WindowExposures = xf86XVWindowExposures;
-  pScreen->PostValidateTree = xf86XVPostValidateTree;
   pScreen->ClipNotify = xf86XVClipNotify;
   pScrn->EnterVT = xf86XVEnterVT;
   pScrn->LeaveVT = xf86XVLeaveVT;
@@ -1165,12 +1166,11 @@ xf86XVPostValidateTree(WindowPtr pWin, WindowPtr pLayerWin, VTKind kind)
 
     xf86XVReputOrStopAllPorts(pScrn, TRUE);
 
-    if (ScreenPriv->PostValidateTree) {
-	pScreen->PostValidateTree = ScreenPriv->PostValidateTree;
+    pScreen->PostValidateTree = ScreenPriv->PostValidateTree;
+    if (pScreen->PostValidateTree) {
 	(*pScreen->PostValidateTree)(pWin, pLayerWin, kind);
-	ScreenPriv->PostValidateTree = pScreen->PostValidateTree;
-	pScreen->PostValidateTree = xf86XVPostValidateTree;
     }
+    ScreenPriv->PostValidateTree = PostValidateTreeUndefined;
 }
 
 static void
@@ -1247,6 +1247,11 @@ xf86XVClipNotify(WindowPtr pWin, int dx, int dy)
 
      pPriv->clipChanged = TRUE;
 
+     if (ScreenPriv->PostValidateTree == PostValidateTreeUndefined) {
+        ScreenPriv->PostValidateTree = pScreen->PostValidateTree;
+        pScreen->PostValidateTree = xf86XVPostValidateTree;
+     }
+
      WinPriv = WinPriv->next;
   }
 
@@ -1274,7 +1279,6 @@ xf86XVCloseScreen(int i, ScreenPtr pScreen)
 
   pScreen->DestroyWindow = ScreenPriv->DestroyWindow;
   pScreen->WindowExposures = ScreenPriv->WindowExposures;
-  pScreen->PostValidateTree = ScreenPriv->PostValidateTree;
   pScreen->ClipNotify = ScreenPriv->ClipNotify;
 
   pScrn->EnterVT = ScreenPriv->EnterVT;
commit ddf32df5cc2e73b833f6e414276d938fdc38869e
Author: Pauli Nieminen <ext-pauli.nieminen at nokia.com>
Date:   Thu Jan 13 20:50:16 2011 +0200

    xf86/xv: Use PostValidateTree to do reput
    
    ValidateTree calls first ClipNotify and later might call
    WindowExposures. To avoid useless double reput ClipNotify delays reput
    to WindowExposures or PostValidateTree.
    
    PostValidatTree checks all ports if there is clip changes. On clip
    changes reput is done to move or scale the overlay.
    
    Signed-off-by: Pauli Nieminen <ext-pauli.nieminen at nokia.com>
    Reviewed-by: Ville Syrjälä <ville.syrjala at nokia.com>

diff --git a/hw/xfree86/common/xf86xv.c b/hw/xfree86/common/xf86xv.c
index 21e0035..ea286df 100644
--- a/hw/xfree86/common/xf86xv.c
+++ b/hw/xfree86/common/xf86xv.c
@@ -97,6 +97,7 @@ static int xf86XVQueryImageAttributes(ClientPtr, XvPortPtr, XvImagePtr,
 
 static Bool xf86XVDestroyWindow(WindowPtr pWin);
 static void xf86XVWindowExposures(WindowPtr pWin, RegionPtr r1, RegionPtr r2);
+static void xf86XVPostValidateTree(WindowPtr pWin, WindowPtr pLayerWin, VTKind kind);
 static void xf86XVClipNotify(WindowPtr pWin, int dx, int dy);
 
 /* ScrnInfoRec functions */
@@ -282,6 +283,7 @@ xf86XVScreenInit(
 
   ScreenPriv->DestroyWindow = pScreen->DestroyWindow;
   ScreenPriv->WindowExposures = pScreen->WindowExposures;
+  ScreenPriv->PostValidateTree = pScreen->PostValidateTree;
   ScreenPriv->ClipNotify = pScreen->ClipNotify;
   ScreenPriv->EnterVT = pScrn->EnterVT;
   ScreenPriv->LeaveVT = pScrn->LeaveVT;
@@ -290,6 +292,7 @@ xf86XVScreenInit(
 
   pScreen->DestroyWindow = xf86XVDestroyWindow;
   pScreen->WindowExposures = xf86XVWindowExposures;
+  pScreen->PostValidateTree = xf86XVPostValidateTree;
   pScreen->ClipNotify = xf86XVClipNotify;
   pScrn->EnterVT = xf86XVEnterVT;
   pScrn->LeaveVT = xf86XVLeaveVT;
@@ -1038,6 +1041,7 @@ xf86XVRemovePortFromWindow(WindowPtr pWin, XvPortRecPrivatePtr portPriv)
 	RegionDestroy(portPriv->ckeyFilled);
 	portPriv->ckeyFilled = NULL;
      }
+     portPriv->clipChanged = FALSE;
 }
 
 static void
@@ -1072,7 +1076,7 @@ xf86XVReputOrStopPort(XvPortRecPrivatePtr pPriv,
 }
 
 static void
-xf86XVReputOrStopAllPorts(ScrnInfoPtr pScrn)
+xf86XVReputOrStopAllPorts(ScrnInfoPtr pScrn, Bool onlyChanged)
 {
     ScreenPtr pScreen = pScrn->pScreen;
     XvScreenPtr pxvs = GET_XV_SCREEN(pScreen);
@@ -1090,6 +1094,9 @@ xf86XVReputOrStopAllPorts(ScrnInfoPtr pScrn)
 	    if (pPriv->isOn == XV_OFF || !pWin)
 		continue;
 
+	    if (onlyChanged && !pPriv->clipChanged)
+		continue;
+
 	    visible = pWin->visibility == VisibilityUnobscured ||
 		      pWin->visibility == VisibilityPartiallyObscured;
 
@@ -1101,6 +1108,8 @@ xf86XVReputOrStopAllPorts(ScrnInfoPtr pScrn)
 		visible = FALSE;
 
 	    xf86XVReputOrStopPort(pPriv, pWin, visible);
+
+	    pPriv->clipChanged = FALSE;
 	}
     }
 }
@@ -1139,6 +1148,30 @@ xf86XVDestroyWindow(WindowPtr pWin)
   return ret;
 }
 
+static void
+xf86XVPostValidateTree(WindowPtr pWin, WindowPtr pLayerWin, VTKind kind)
+{
+    ScreenPtr pScreen;
+    XF86XVScreenPtr ScreenPriv;
+    ScrnInfoPtr pScrn;
+
+    if (pWin)
+	pScreen = pWin->drawable.pScreen;
+    else
+	pScreen = pLayerWin->drawable.pScreen;
+
+    ScreenPriv = GET_XF86XV_SCREEN(pScreen);
+    pScrn = xf86Screens[pScreen->myNum];
+
+    xf86XVReputOrStopAllPorts(pScrn, TRUE);
+
+    if (ScreenPriv->PostValidateTree) {
+	pScreen->PostValidateTree = ScreenPriv->PostValidateTree;
+	(*pScreen->PostValidateTree)(pWin, pLayerWin, kind);
+	ScreenPriv->PostValidateTree = pScreen->PostValidateTree;
+	pScreen->PostValidateTree = xf86XVPostValidateTree;
+    }
+}
 
 static void
 xf86XVWindowExposures(WindowPtr pWin, RegionPtr reg1, RegionPtr reg2)
@@ -1187,10 +1220,11 @@ xf86XVWindowExposures(WindowPtr pWin, RegionPtr reg1, RegionPtr reg2)
 
      WinPriv = WinPriv->next;
      xf86XVReputOrStopPort(pPriv, pWin, visible);
+
+     pPriv->clipChanged = FALSE;
   }
 }
 
-
 static void
 xf86XVClipNotify(WindowPtr pWin, int dx, int dy)
 {
@@ -1200,9 +1234,6 @@ xf86XVClipNotify(WindowPtr pWin, int dx, int dy)
   XvPortRecPrivatePtr pPriv;
 
   while(WinPriv) {
-     Bool visible = pWin->visibility == VisibilityUnobscured ||
-		    pWin->visibility == VisibilityPartiallyObscured;
-
      pPriv = WinPriv->PortRec;
 
      if(pPriv->pCompositeClip && pPriv->FreeCompositeClip)
@@ -1214,15 +1245,9 @@ xf86XVClipNotify(WindowPtr pWin, int dx, int dy)
         (*pPriv->AdaptorRec->ClipNotify)(pPriv->pScrn, pPriv->DevPriv.ptr,
                                          pWin, dx, dy);
 
-     /*
-      * Stop and remove still/images if
-      * ReputImage isn't supported.
-      */
-     if (!pPriv->type && !pPriv->AdaptorRec->ReputImage)
-	visible = FALSE;
+     pPriv->clipChanged = TRUE;
 
      WinPriv = WinPriv->next;
-     xf86XVReputOrStopPort(pPriv, pWin, visible);
   }
 
   if(ScreenPriv->ClipNotify) {
@@ -1249,6 +1274,7 @@ xf86XVCloseScreen(int i, ScreenPtr pScreen)
 
   pScreen->DestroyWindow = ScreenPriv->DestroyWindow;
   pScreen->WindowExposures = ScreenPriv->WindowExposures;
+  pScreen->PostValidateTree = ScreenPriv->PostValidateTree;
   pScreen->ClipNotify = ScreenPriv->ClipNotify;
 
   pScrn->EnterVT = ScreenPriv->EnterVT;
@@ -1355,7 +1381,7 @@ xf86XVAdjustFrame(int index, int x, int y, int flags)
 	pScrn->AdjustFrame = xf86XVAdjustFrame;
   }
 
-  xf86XVReputOrStopAllPorts(pScrn);
+  xf86XVReputOrStopAllPorts(pScrn, FALSE);
 }
 
 static void
@@ -1376,7 +1402,7 @@ xf86XVModeSet(ScrnInfoPtr pScrn)
 	pScrn->ModeSet = xf86XVModeSet;
     }
 
-    xf86XVReputOrStopAllPorts(pScrn);
+    xf86XVReputOrStopAllPorts(pScrn, FALSE);
 }
 
 /**** XvAdaptorRec fields ****/
diff --git a/hw/xfree86/common/xf86xvpriv.h b/hw/xfree86/common/xf86xvpriv.h
index 3f1106d..2a459f1 100644
--- a/hw/xfree86/common/xf86xvpriv.h
+++ b/hw/xfree86/common/xf86xvpriv.h
@@ -40,6 +40,7 @@ typedef struct {
    DestroyWindowProcPtr		DestroyWindow;
    ClipNotifyProcPtr		ClipNotify;
    WindowExposuresProcPtr	WindowExposures;
+   PostValidateTreeProcPtr	PostValidateTree;
    void                         (*AdjustFrame)(int, int, int, int);
    Bool                         (*EnterVT)(int, int);
    void                         (*LeaveVT)(int, int);
@@ -73,6 +74,7 @@ typedef struct {
    Bool FreeCompositeClip;
    XvAdaptorRecPrivatePtr AdaptorRec;
    XvStatus isOn;
+   Bool clipChanged;
    int vid_x, vid_y, vid_w, vid_h;
    int drw_x, drw_y, drw_w, drw_h;
    DevUnion DevPriv;
commit 5678a41f6bc0ef8965bd50a88c5ef01ba7eb8b24
Author: Pauli Nieminen <ext-pauli.nieminen at nokia.com>
Date:   Mon Jan 17 16:58:00 2011 +0200

    xf86/xv: Fill color key on expose
    
    If window gets exposed but clipboxes doesn't change drivers would avoid
    color key fill. This makes XResizeWindo&co to lose colorkey if
    background is painted.
    
    To help drivers to avoid filling colorkey for each put server can
    provide helper function if there is exposed areas. Server can subtract
    exposed areas from filled region.
    
    As a side effect we can avoid useless color key fills if window only
    moves in screen without background fills.
    
    v3:
    * Change tracking to filled area to account for client initiated clip
      changes
    * Make overlaid XvPutImage behavior like textured XvPutImage or PutImage
    * Make region dynamically allocated only when required.
    
    v4:
    * Simplify new driver interface to reduce duplicate code
    
    Signed-off-by: Pauli Nieminen <ext-pauli.nieminen at nokia.com>
    Reviewed-by: Ville Syrjälä <ville.syrjala at nokia.com>

diff --git a/hw/xfree86/common/xf86xv.c b/hw/xfree86/common/xf86xv.c
index 6dcd497..21e0035 100644
--- a/hw/xfree86/common/xf86xv.c
+++ b/hw/xfree86/common/xf86xv.c
@@ -331,6 +331,8 @@ xf86XVFreeAdaptor(XvAdaptorPtr pAdaptor)
 		RegionDestroy(pPriv->clientClip);
 	     if(pPriv->pCompositeClip && pPriv->FreeCompositeClip)
 		RegionDestroy(pPriv->pCompositeClip);
+	     if (pPriv->ckeyFilled)
+		RegionDestroy(pPriv->ckeyFilled);
 	     free(pPriv);
 	  }
       }
@@ -1016,7 +1018,6 @@ static void
 xf86XVRemovePortFromWindow(WindowPtr pWin, XvPortRecPrivatePtr portPriv)
 {
      XF86XVWindowPtr winPriv, prevPriv = NULL;
-
      winPriv = GET_XF86XV_WINDOW(pWin);
 
      while(winPriv) {
@@ -1033,6 +1034,10 @@ xf86XVRemovePortFromWindow(WindowPtr pWin, XvPortRecPrivatePtr portPriv)
 	winPriv = winPriv->next;
      }
      portPriv->pDraw = NULL;
+     if (portPriv->ckeyFilled) {
+	RegionDestroy(portPriv->ckeyFilled);
+	portPriv->ckeyFilled = NULL;
+     }
 }
 
 static void
@@ -1165,6 +1170,21 @@ xf86XVWindowExposures(WindowPtr pWin, RegionPtr reg1, RegionPtr reg2)
      if (!pPriv->type && !pPriv->AdaptorRec->ReputImage)
 	visible = !AreasExposed;
 
+     /*
+      * Subtract exposed areas from overlaid image to match textured video
+      * behavior.
+      */
+     if (!pPriv->type && pPriv->clientClip)
+	    RegionSubtract(pPriv->clientClip, pPriv->clientClip, reg1);
+
+     if (visible && pPriv->ckeyFilled) {
+        RegionRec tmp;
+        RegionNull(&tmp);
+        RegionCopy(&tmp, reg1);
+        RegionTranslate(&tmp, pWin->drawable.x, pWin->drawable.y);
+        RegionSubtract(pPriv->ckeyFilled, pPriv->ckeyFilled, &tmp);
+     }
+
      WinPriv = WinPriv->next;
      xf86XVReputOrStopPort(pPriv, pWin, visible);
   }
@@ -1860,12 +1880,12 @@ xf86XVQueryImageAttributes(
 }
 
 void
-xf86XVFillKeyHelperDrawable (DrawablePtr pDraw, CARD32 key, RegionPtr clipboxes)
+xf86XVFillKeyHelperDrawable (DrawablePtr pDraw, CARD32 key, RegionPtr fillboxes)
 {
    ScreenPtr pScreen = pDraw->pScreen;
    ChangeGCVal pval[2];
-   BoxPtr pbox = RegionRects(clipboxes);
-   int i, nbox = RegionNumRects(clipboxes);
+   BoxPtr pbox = RegionRects(fillboxes);
+   int i, nbox = RegionNumRects(fillboxes);
    xRectangle *rects;
    GCPtr gc;
 
@@ -1894,11 +1914,57 @@ xf86XVFillKeyHelperDrawable (DrawablePtr pDraw, CARD32 key, RegionPtr clipboxes)
 }
 
 void
-xf86XVFillKeyHelper (ScreenPtr pScreen, CARD32 key, RegionPtr clipboxes)
+xf86XVFillKeyHelper (ScreenPtr pScreen, CARD32 key, RegionPtr fillboxes)
 {
-    xf86XVFillKeyHelperDrawable (&pScreen->root->drawable, key, clipboxes);
+    xf86XVFillKeyHelperDrawable (&pScreen->root->drawable, key, fillboxes);
 }
 
+void
+xf86XVFillKeyHelperPort (DrawablePtr pDraw, pointer data, CARD32 key, RegionPtr clipboxes, Bool fillEverything)
+{
+    WindowPtr pWin = (WindowPtr)pDraw;
+    XF86XVWindowPtr WinPriv = GET_XF86XV_WINDOW(pWin);
+    XvPortRecPrivatePtr portPriv = NULL;
+    RegionRec reg;
+    RegionPtr fillboxes;
+
+    while (WinPriv) {
+	XvPortRecPrivatePtr pPriv = WinPriv->PortRec;
+
+	if (data == pPriv->DevPriv.ptr) {
+	    portPriv = pPriv;
+	    break;
+	}
+
+	WinPriv = WinPriv->next;
+    }
+
+    if (!portPriv)
+	return;
+
+    if (!portPriv->ckeyFilled)
+	portPriv->ckeyFilled = RegionCreate(NULL, 0);
+
+    if (!fillEverything) {
+	RegionNull(&reg);
+	fillboxes = ®
+	RegionSubtract(fillboxes, clipboxes, portPriv->ckeyFilled);
+
+	if (!RegionNotEmpty(fillboxes))
+	    goto out;
+    } else
+	fillboxes = clipboxes;
+
+
+    RegionCopy(portPriv->ckeyFilled, clipboxes);
+
+    xf86XVFillKeyHelperDrawable(pDraw, key, fillboxes);
+out:
+    if (!fillEverything)
+        RegionUninit(&reg);
+}
+
+
 /* xf86XVClipVideoHelper -
 
    Takes the dst box in standard X BoxRec form (top and left
diff --git a/hw/xfree86/common/xf86xv.h b/hw/xfree86/common/xf86xv.h
index 47061fe..f0d8495 100644
--- a/hw/xfree86/common/xf86xv.h
+++ b/hw/xfree86/common/xf86xv.h
@@ -244,6 +244,9 @@ xf86XVFillKeyHelper (ScreenPtr pScreen, CARD32 key, RegionPtr clipboxes);
 extern _X_EXPORT void
 xf86XVFillKeyHelperDrawable (DrawablePtr pDraw, CARD32 key, RegionPtr clipboxes);
 
+extern _X_EXPORT void
+xf86XVFillKeyHelperPort (DrawablePtr pDraw, pointer data, CARD32 key, RegionPtr clipboxes, Bool fillEverything);
+
 extern _X_EXPORT Bool
 xf86XVClipVideoHelper(
     BoxPtr dst,
diff --git a/hw/xfree86/common/xf86xvpriv.h b/hw/xfree86/common/xf86xvpriv.h
index 4572218..3f1106d 100644
--- a/hw/xfree86/common/xf86xvpriv.h
+++ b/hw/xfree86/common/xf86xvpriv.h
@@ -68,6 +68,7 @@ typedef struct {
    unsigned char type;
    unsigned int subWindowMode;
    RegionPtr clientClip;
+   RegionPtr ckeyFilled;
    RegionPtr pCompositeClip;
    Bool FreeCompositeClip;
    XvAdaptorRecPrivatePtr AdaptorRec;
commit 9b048ca420864e19862f63f4a491a4da0ff9b54f
Author: Pauli Nieminen <ext-pauli.nieminen at nokia.com>
Date:   Mon Jan 17 15:07:28 2011 +0200

    xf86/xv: Remove unused variable from XvPortRecPrivate
    
    Signed-off-by: Pauli Nieminen <ext-pauli.nieminen at nokia.com>
    Reviewed-by: Ville Syrjälä <ville.syrjala at nokia.com>

diff --git a/hw/xfree86/common/xf86xvpriv.h b/hw/xfree86/common/xf86xvpriv.h
index c667926..4572218 100644
--- a/hw/xfree86/common/xf86xvpriv.h
+++ b/hw/xfree86/common/xf86xvpriv.h
@@ -72,7 +72,6 @@ typedef struct {
    Bool FreeCompositeClip;
    XvAdaptorRecPrivatePtr AdaptorRec;
    XvStatus isOn;
-   Bool moved;
    int vid_x, vid_y, vid_w, vid_h;
    int drw_x, drw_y, drw_w, drw_h;
    DevUnion DevPriv;
commit 4f8f803280894a8c41691e350b7a34bfd719fe05
Author: Pauli Nieminen <ext-pauli.nieminen at nokia.com>
Date:   Thu Jan 13 20:21:09 2011 +0200

    xf86/xv: Remove unused GC pointers
    
    Signed-off-by: Pauli Nieminen <ext-pauli.nieminen at nokia.com>
    Reviewed-by: Ville Syrjälä <ville.syrjala at nokia.com>

diff --git a/hw/xfree86/common/xf86xv.c b/hw/xfree86/common/xf86xv.c
index f1a87f1..6dcd497 100644
--- a/hw/xfree86/common/xf86xv.c
+++ b/hw/xfree86/common/xf86xv.c
@@ -280,8 +280,6 @@ xf86XVScreenInit(
 
   pScrn = xf86Screens[pScreen->myNum];
 
-  ScreenPriv->videoGC = NULL;  /* for the helper */
-
   ScreenPriv->DestroyWindow = pScreen->DestroyWindow;
   ScreenPriv->WindowExposures = pScreen->WindowExposures;
   ScreenPriv->ClipNotify = pScreen->ClipNotify;
@@ -1123,9 +1121,6 @@ xf86XVDestroyWindow(WindowPtr pWin)
 
      pPriv->pDraw = NULL;
      tmp = WinPriv;
-     if(WinPriv->pGC) {
-       FreeGC(WinPriv->pGC, 0);
-     }
      WinPriv = WinPriv->next;
      free(tmp);
   }
@@ -1232,11 +1227,6 @@ xf86XVCloseScreen(int i, ScreenPtr pScreen)
 
   if(!ScreenPriv) return TRUE;
 
-  if(ScreenPriv->videoGC) {
-     FreeGC(ScreenPriv->videoGC, 0);
-     ScreenPriv->videoGC = NULL;
-  }
-
   pScreen->DestroyWindow = ScreenPriv->DestroyWindow;
   pScreen->WindowExposures = ScreenPriv->WindowExposures;
   pScreen->ClipNotify = ScreenPriv->ClipNotify;
diff --git a/hw/xfree86/common/xf86xvpriv.h b/hw/xfree86/common/xf86xvpriv.h
index 88e7a0e..c667926 100644
--- a/hw/xfree86/common/xf86xvpriv.h
+++ b/hw/xfree86/common/xf86xvpriv.h
@@ -43,7 +43,6 @@ typedef struct {
    void                         (*AdjustFrame)(int, int, int, int);
    Bool                         (*EnterVT)(int, int);
    void                         (*LeaveVT)(int, int);
-   GCPtr			videoGC;
    xf86ModeSetProc		*ModeSet;
 } XF86XVScreenRec, *XF86XVScreenPtr;
 
@@ -82,7 +81,6 @@ typedef struct {
 typedef struct _XF86XVWindowRec{
    XvPortRecPrivatePtr PortRec;
    struct _XF86XVWindowRec *next;
-   GCPtr pGC;
 } XF86XVWindowRec, *XF86XVWindowPtr;
 
 #endif  /* _XF86XVPRIV_H_ */
commit e012f2312b4bcdf31bb5d622ddd34571f3c12429
Author: Pauli Nieminen <ext-pauli.nieminen at nokia.com>
Date:   Thu Jan 13 20:19:18 2011 +0200

    xf86/xv: Remove copy paste code.
    
    xf86XVFillKeyHelperDrawable can be used to implement
    xf86XVFillKeyHelper.
    
    V2:
    * Remove RegionTranslate that clobbered parameter region.
    
    Signed-off-by: Pauli Nieminen <ext-pauli.nieminen at nokia.com>
    Reviewed-by: Ville Syrjälä <ville.syrjala at nokia.com>

diff --git a/hw/xfree86/common/xf86xv.c b/hw/xfree86/common/xf86xv.c
index 016db1f..f1a87f1 100644
--- a/hw/xfree86/common/xf86xv.c
+++ b/hw/xfree86/common/xf86xv.c
@@ -1869,62 +1869,10 @@ xf86XVQueryImageAttributes(
 			format->id, width, height, pitches, offsets);
 }
 
-
 void
 xf86XVFillKeyHelperDrawable (DrawablePtr pDraw, CARD32 key, RegionPtr clipboxes)
 {
    ScreenPtr pScreen = pDraw->pScreen;
-   WindowPtr pWin = (WindowPtr)pDraw;
-   XF86XVWindowPtr pPriv = GET_XF86XV_WINDOW(pWin);
-   GCPtr pGC = NULL;
-   BoxPtr pbox = RegionRects(clipboxes);
-   int i, nbox = RegionNumRects(clipboxes);
-   xRectangle *rects;
-
-   if(!xf86Screens[pScreen->myNum]->vtSema) return;
-
-   if(pPriv)
-      pGC = pPriv->pGC;
-
-   if(!pGC) {
-       int status;
-       XID pval[2];
-       pval[0] = key;
-       pval[1] = IncludeInferiors;
-       pGC = CreateGC(pDraw, GCForeground | GCSubwindowMode, pval, &status,
-		      (XID)0, serverClient);
-       if(!pGC) return;
-       ValidateGC(pDraw, pGC);
-       if (pPriv) pPriv->pGC = pGC;
-   } else if (key != pGC->fgPixel){
-       ChangeGCVal val;
-       val.val = key;
-       ChangeGC(NullClient, pGC, GCForeground, &val);
-       ValidateGC(pDraw, pGC);
-   }
-
-   RegionTranslate(clipboxes, -pDraw->x, -pDraw->y);
-
-   rects = malloc(nbox * sizeof(xRectangle));
-
-   for(i = 0; i < nbox; i++, pbox++) {
-      rects[i].x = pbox->x1;
-      rects[i].y = pbox->y1;
-      rects[i].width = pbox->x2 - pbox->x1;
-      rects[i].height = pbox->y2 - pbox->y1;
-   }
-
-   (*pGC->ops->PolyFillRect)(pDraw, pGC, nbox, rects);
-
-   if (!pPriv) FreeGC(pGC, 0);
-
-   free(rects);
-}
-
-void
-xf86XVFillKeyHelper (ScreenPtr pScreen, CARD32 key, RegionPtr clipboxes)
-{
-   DrawablePtr root = &pScreen->root->drawable;
    ChangeGCVal pval[2];
    BoxPtr pbox = RegionRects(clipboxes);
    int i, nbox = RegionNumRects(clipboxes);
@@ -1933,28 +1881,34 @@ xf86XVFillKeyHelper (ScreenPtr pScreen, CARD32 key, RegionPtr clipboxes)
 
    if(!xf86Screens[pScreen->myNum]->vtSema) return;
 
-   gc = GetScratchGC(root->depth, pScreen);
+   gc = GetScratchGC(pDraw->depth, pScreen);
    pval[0].val = key;
    pval[1].val = IncludeInferiors;
    (void) ChangeGC(NullClient, gc, GCForeground|GCSubwindowMode, pval);
-   ValidateGC(root, gc);
+   ValidateGC(pDraw, gc);
 
    rects = malloc(nbox * sizeof(xRectangle));
 
    for(i = 0; i < nbox; i++, pbox++) 
    {
-      rects[i].x = pbox->x1;
-      rects[i].y = pbox->y1;
+      rects[i].x = pbox->x1 - pDraw->x;
+      rects[i].y = pbox->y1 - pDraw->y;
       rects[i].width = pbox->x2 - pbox->x1;
       rects[i].height = pbox->y2 - pbox->y1;
    }
    
-   (*gc->ops->PolyFillRect)(root, gc, nbox, rects);
+   (*gc->ops->PolyFillRect)(pDraw, gc, nbox, rects);
    
    free(rects);
    FreeScratchGC (gc);
 }
 
+void
+xf86XVFillKeyHelper (ScreenPtr pScreen, CARD32 key, RegionPtr clipboxes)
+{
+    xf86XVFillKeyHelperDrawable (&pScreen->root->drawable, key, clipboxes);
+}
+
 /* xf86XVClipVideoHelper -
 
    Takes the dst box in standard X BoxRec form (top and left
commit ea1ffd3e60bdcedbec5a6f28929f8677bf45d450
Merge: 12b0f7d... 53602c3...
Author: Keith Packard <keithp at keithp.com>
Date:   Wed Feb 2 15:19:55 2011 -0800

    Merge remote branch 'whot/for-keith'

commit 12b0f7df2caa78d68b453aaa91248bb3577fd724
Author: Evan Broder <ebroder at mokafive.com>
Date:   Tue Feb 1 16:09:50 2011 -0800

    xfree86/modes: Be sure to only use new EDID for physical output dimensions
    
    The EDID processing regards physical dimensions of 0mm x 0mm as
    invalid. Previously the old values for height and width would be
    preserved if none of the physical dimension specifications in the new
    EDID were considered valid.
    
    This will come up in particular if first a monitor is connected to an
    output, and then a projector is connected. Since projectors generally
    report physical dimensions of 0mm x 0mm, this would result in the
    projector claiming to have the physical dimensions of the monitor.
    
    Signed-off-by: Evan Broder <ebroder at mokafive.com>
    Reviewed-by: Adam Jackson <ajax at redhat.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index c4470c3..47d3ad1 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -3016,6 +3016,8 @@ xf86OutputSetEDID (xf86OutputPtr output, xf86MonPtr edid_mon)
     free(output->MonInfo);
     
     output->MonInfo = edid_mon;
+    output->mm_width = 0;
+    output->mm_height = 0;
 
     if (debug_modes) {
 	xf86DrvMsg(scrn->scrnIndex, X_INFO, "EDID for output %s\n",
commit 0b15033031d78836582bd1b641c3160c3803a708
Author: Samuel Thibault <samuel.thibault at ens-lyon.org>
Date:   Mon Jan 31 23:25:10 2011 +0100

    xserver: enable TLS even if AIGLX is not enabled
    
    This aligns the xorg server build with the mesa build, which is needed on
    systems where aiglx with dri support is not enabled. Else the following error is
    obtained when trying to load the software raster:
    
    (EE) AIGLX error: dlopen of /usr/lib/dri/swrast_dri.so failed (/usr/lib/dri/swrast_dri.so: undefined symbol: _glapi_tls_Context)
    (EE) GLX: could not load software renderer
    (II) GLX: no usable GL providers found for screen 0
    
    because mesa always enables TLS use in GLX, even if dri is not available.
    
    Signed-off-by: Samuel Thibault <samuel.thibault at ens-lyon.org>
    Signed-off-by: Julien Cristau <jcristau at debian.org>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index 628760e..9b3e2be 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1013,7 +1013,7 @@ else
 fi
 AM_CONDITIONAL(AIGLX, test "x$AIGLX" = xyes)
 
-if test "x$GLX_USE_TLS" = xyes -a "x$AIGLX" = xyes; then
+if test "x$GLX_USE_TLS" = xyes ; then
 	GLX_DEFINES="-DGLX_USE_TLS -DPTHREADS"
 	GLX_SYS_LIBS="$GLX_SYS_LIBS -lpthread"
 fi
commit 541b25038a5de74411a094570b407c5ae018c2ba
Author: Maarten Maathuis <madman2003 at gmail.com>
Date:   Sun Jan 30 14:06:16 2011 +0100

    exa/mixed: Exclude frontbuffer from deferred pixmap handling.
    
    - Apps like xterm can trigger a lot of fallback rendering.
    - This can lead to (annoyingly) high latencies, because you
      have to wait for the block handler.
    - You need a driver that doesn't directly access the front
      buffer to trigger this (NV50+ nouveau for example).
    - Repeatingly doing dmesg on an xterm with a bitmap font
      will reveal that you never see part of the text.
    - I have recieved at least one complaint in the past of slow
      terminal performance, which was related to core font
      rendering.
    - This does sacrifice some throughput, roughly 33% slower.
    
    Reviewed-by: Michel Dänzer <michel at daenzer.net>
    Signed-off-by: Maarten Maathuis <madman2003 at gmail.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/exa/exa_migration_mixed.c b/exa/exa_migration_mixed.c
index fb47151..4f49905 100644
--- a/exa/exa_migration_mixed.c
+++ b/exa/exa_migration_mixed.c
@@ -138,6 +138,7 @@ void
 exaDamageReport_mixed(DamagePtr pDamage, RegionPtr pRegion, void *closure)
 {
     PixmapPtr pPixmap = closure;
+    ScreenPtr pScreen = pPixmap->drawable.pScreen;
     ExaPixmapPriv(pPixmap);
 
     /* Move back results of software rendering on system memory copy of mixed driver
@@ -149,10 +150,18 @@ exaDamageReport_mixed(DamagePtr pDamage, RegionPtr pRegion, void *closure)
     if (!pExaPixmap->use_gpu_copy && exaPixmapHasGpuCopy(pPixmap)) {
 	ExaScreenPriv(pPixmap->drawable.pScreen);
 
-	if (pExaScr->deferred_mixed_pixmap &&
-	    pExaScr->deferred_mixed_pixmap != pPixmap)
-	    exaMoveInPixmap_mixed(pExaScr->deferred_mixed_pixmap);
-	pExaScr->deferred_mixed_pixmap = pPixmap;
+	/* Front buffer: Don't wait for the block handler to copy back the data.
+	 * This avoids annoying latency if you encounter a lot of software rendering.
+	 */
+	if (pPixmap == pScreen->GetScreenPixmap(pScreen))
+		exaMoveInPixmap_mixed(pPixmap);
+	else {
+		if (pExaScr->deferred_mixed_pixmap &&
+		    pExaScr->deferred_mixed_pixmap != pPixmap)
+		    exaMoveInPixmap_mixed(pExaScr->deferred_mixed_pixmap);
+
+		pExaScr->deferred_mixed_pixmap = pPixmap;
+	}
     }
 }
 
commit af87f6367ef733d1a4f3cfca4eeb92bfd84c2b6f
Author: Maarten Maathuis <madman2003 at gmail.com>
Date:   Sun Jan 30 14:06:15 2011 +0100

    exa: Only call driver FinishAccess hook if PrepareAccess hook succeeded.
    
    Reviewed-by: Michel Dänzer <michel at daenzer.net>
    Signed-off-by: Maarten Maathuis <madman2003 at gmail.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/exa/exa.c b/exa/exa.c
index 8adf847..a4e294a 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -421,7 +421,8 @@ exaFinishAccess(DrawablePtr pDrawable, int index)
     /* We always hide the devPrivate.ptr. */
     pPixmap->devPrivate.ptr = NULL;
 
-    if (!pExaScr->info->FinishAccess || !exaPixmapHasGpuCopy(pPixmap))
+    /* Only call FinishAccess if PrepareAccess was called and succeeded. */
+    if (!pExaScr->info->FinishAccess || !pExaScr->access[i].retval)
 	return;
 
     if (i >= EXA_PREPARE_AUX_DEST &&
commit 648d4fe5172cad33c6f09e05dd3d8d7171ef1a7f
Author: Maarten Maathuis <madman2003 at gmail.com>
Date:   Sun Jan 30 14:06:14 2011 +0100

    exa/driver: set pExaPixmap->use_gpu_copy to the right value
    
    - Not sure if it was causing problems, but you never know.
    
    Reviewed-by: Michel Dänzer <michel at daenzer.net>
    Signed-off-by: Maarten Maathuis <madman2003 at gmail.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/exa/exa_driver.c b/exa/exa_driver.c
index a913cfb..b9903d1 100644
--- a/exa/exa_driver.c
+++ b/exa/exa_driver.c
@@ -115,6 +115,8 @@ exaCreatePixmap_driver(ScreenPtr pScreen, int w, int h, int depth,
     exaSetAccelBlock(pExaScr, pExaPixmap,
                      w, h, bpp);
 
+    pExaPixmap->use_gpu_copy = exaPixmapHasGpuCopy(pPixmap);
+
     /* During a fallback we must prepare access. */
     if (pExaScr->fallback_counter)
 	exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_AUX_DEST);
commit 246d40b685292fa6393ba22127152137494af2af
Merge: 70f2d39... 8c1f75a...
Author: Keith Packard <keithp at keithp.com>
Date:   Wed Feb 2 14:51:33 2011 -0800

    Merge remote branch 'jeremyhu/master'

commit 70f2d39fbde38d0baa687f1755b6c4c686f23052
Merge: 3a91c2d... a9d3c43...
Author: Keith Packard <keithp at keithp.com>
Date:   Wed Feb 2 14:43:19 2011 -0800

    Merge remote branch 'jturney/master'

commit 3a91c2d21c3231e2a011d95c3cfc01785430c1cf
Merge: ac0a00a... 82b1eaa...
Author: Keith Packard <keithp at keithp.com>
Date:   Wed Feb 2 14:37:00 2011 -0800

    Merge remote branch 'dbn/build-fixes'

commit ac0a00a840a5d8d8374e5db2b849e5959550ca4e
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Jan 20 23:01:03 2011 -0500

    xselinux: Fix GetDrawableContext
    
    M_DRAWABLE_PIXMAP is the lookup mask to dixLookupDrawable, and _not_ the
    type value in the drawable itself.
    
    Signed-off-by: Adam Jackson <ajax at redhat.com>
    Reviewed-by: Eamon Walsh <ewalsh at tycho.nsa.gov>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xext/xselinux_ext.c b/Xext/xselinux_ext.c
index 93c1b59..374571c 100644
--- a/Xext/xselinux_ext.c
+++ b/Xext/xselinux_ext.c
@@ -231,13 +231,11 @@ ProcSELinuxGetDrawableContext(ClientPtr client)
     REQUEST(SELinuxGetContextReq);
     REQUEST_SIZE_MATCH(SELinuxGetContextReq);
 
-    rc = dixLookupDrawable(&pDraw, stuff->id, client,
-			   M_WINDOW | M_DRAWABLE_PIXMAP,
-			   DixGetAttrAccess);
+    rc = dixLookupDrawable(&pDraw, stuff->id, client, 0, DixGetAttrAccess);
     if (rc != Success)
 	return rc;
 
-    if (pDraw->type == M_DRAWABLE_PIXMAP)
+    if (pDraw->type == DRAWABLE_PIXMAP)
 	privatePtr = &((PixmapPtr)pDraw)->devPrivates;
     else
 	privatePtr = &((WindowPtr)pDraw)->devPrivates;
commit 53602c36217487e0a80880e8328f89ab302d85c8
Author: Ville Syrjala <syrjala at sci.fi>
Date:   Mon Jan 24 01:06:49 2011 +0200

    xfree86/dga: Remove DGAIsDgaEvent()
    
    DGAIsDgaEvent() is not used anymore.
    
    Signed-off-by: Ville Syrjala <syrjala at sci.fi>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
index 28fffc1..74eb739 100644
--- a/hw/xfree86/common/xf86DGA.c
+++ b/hw/xfree86/common/xf86DGA.c
@@ -999,18 +999,6 @@ DGAStealButtonEvent(DeviceIntPtr dev, int index, int button, int is_down)
 
 /* We have the power to steal or modify events that are about to get queued */
 
-Bool
-DGAIsDgaEvent (xEvent *e)
-{
-    int	    coreEquiv;
-    if (!DGAScreenKeyRegistered || XDGAEventBase == 0)
-	return FALSE;
-    coreEquiv = e->u.u.type - *XDGAEventBase;
-    if (KeyPress <= coreEquiv && coreEquiv <= MotionNotify)
-	return TRUE;
-    return FALSE;
-}
-
 #define NoSuchEvent 0x80000000	/* so doesn't match NoEventMask */
 static Mask filters[] =
 {
diff --git a/hw/xfree86/dixmods/extmod/dgaproc.h b/hw/xfree86/dixmods/extmod/dgaproc.h
index 6745a6e..a13a517 100644
--- a/hw/xfree86/dixmods/extmod/dgaproc.h
+++ b/hw/xfree86/dixmods/extmod/dgaproc.h
@@ -124,7 +124,6 @@ extern _X_EXPORT Bool DGAStealButtonEvent(DeviceIntPtr dev, int Index, int butto
                          int is_down);
 extern _X_EXPORT Bool DGAStealMotionEvent(DeviceIntPtr dev, int Index, int dx, int dy);
 extern _X_EXPORT Bool DGAStealKeyEvent(DeviceIntPtr dev, int Index, int key_code, int is_down);
-extern _X_EXPORT Bool DGAIsDgaEvent (xEvent *e);
 	    
 extern _X_EXPORT Bool DGAOpenFramebuffer(int Index, char **name, unsigned char **mem,
 			int *size, int *offset, int *flags);
commit 2081728b7432e949c274e0dbbabc296fa4db17f9
Author: Ville Syrjala <syrjala at sci.fi>
Date:   Mon Jan 24 01:06:48 2011 +0200

    xfree86/dga: Only send DGA events for master devices
    
    Signed-off-by: Ville Syrjala <syrjala at sci.fi>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
index d3c0577..28fffc1 100644
--- a/hw/xfree86/common/xf86DGA.c
+++ b/hw/xfree86/common/xf86DGA.c
@@ -1210,6 +1210,9 @@ DGAHandleEvent(int screen_num, InternalEvent *ev, DeviceIntPtr device)
     if (!pScreenPriv)
 	return;
 
+    if (!IsMaster(device))
+	return;
+
     switch (event->subtype) {
     case KeyPress:
     case KeyRelease:
commit 9f09b62e594321a8e45a33f4f13559827d660ed3
Author: Ville Syrjala <syrjala at sci.fi>
Date:   Mon Jan 24 01:06:47 2011 +0200

    xfree86/dga: Remove useless ifdefs
    
    Move some variables to the scope where they are used.
    
    Signed-off-by: Ville Syrjala <syrjala at sci.fi>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index 6fdf1eb..74365e1 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -1011,11 +1011,6 @@ xf86PostMotionEventM(DeviceIntPtr	device,
     DeviceEvent *event;
     int flags = 0;
 
-#if XFreeXDGA
-    int index;
-    int dx = 0, dy = 0;
-#endif
-
     if (valuator_mask_num_valuators(mask) > 0)
     {
         if (is_absolute)
@@ -1029,7 +1024,9 @@ xf86PostMotionEventM(DeviceIntPtr	device,
     if (valuator_mask_isset(mask, 0) ||
         valuator_mask_isset(mask, 1))
         if (miPointerGetScreen(device)) {
-            index = miPointerGetScreen(device)->myNum;
+            int index = miPointerGetScreen(device)->myNum;
+            int dx = 0, dy = 0;
+
             if (valuator_mask_isset(mask, 0))
             {
                 dx = valuator_mask_get(mask, 0);
@@ -1160,10 +1157,6 @@ xf86PostButtonEventM(DeviceIntPtr	device,
     int i = 0, nevents = 0;
     int flags = 0;
 
-#if XFreeXDGA
-    int index;
-#endif
-
     if (valuator_mask_num_valuators(mask) > 0)
     {
         if (is_absolute)
@@ -1174,7 +1167,8 @@ xf86PostButtonEventM(DeviceIntPtr	device,
 
 #if XFreeXDGA
     if (miPointerGetScreen(device)) {
-        index = miPointerGetScreen(device)->myNum;
+        int index = miPointerGetScreen(device)->myNum;
+
         if (DGAStealButtonEvent(device, index, button, is_down))
             return;
     }
@@ -1241,13 +1235,13 @@ xf86PostKeyEventM(DeviceIntPtr	device,
     int i = 0, nevents = 0;
 
 #if XFreeXDGA
-    int index;
     DeviceIntPtr pointer;
 
     /* Some pointers send key events, paired device is wrong then. */
     pointer = IsPointerDevice(device) ? device : GetPairedDevice(device);
     if (miPointerGetScreen(pointer)) {
-        index = miPointerGetScreen(pointer)->myNum;
+        int index = miPointerGetScreen(pointer)->myNum;
+
         if (DGAStealKeyEvent(device, index, key_code, is_down))
             return;
     }
commit 5c941c04ca68cdc2b236c524970bc23f91906af4
Author: Ville Syrjala <syrjala at sci.fi>
Date:   Mon Jan 24 01:06:46 2011 +0200

    xfree86/dga: DGAProcessKeyboardEvent() forgot ET_Internal
    
    Signed-off-by: Ville Syrjala <syrjala at sci.fi>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
index 77d1ff8..d3c0577 100644
--- a/hw/xfree86/common/xf86DGA.c
+++ b/hw/xfree86/common/xf86DGA.c
@@ -1032,6 +1032,7 @@ DGAProcessKeyboardEvent (ScreenPtr pScreen, DGAEvent *event, DeviceIntPtr keybd)
     DeviceEvent     ev;
 
     memset(&ev, 0, sizeof(ev));
+    ev.header = ET_Internal;
     ev.length = sizeof(ev);
     ev.detail.key = event->detail;
     ev.type = event->subtype;
commit ce4e0f660beb097e90110c97d039981702f0b0bd
Author: Ville Syrjala <syrjala at sci.fi>
Date:   Mon Jan 24 01:06:45 2011 +0200

    xfree86/dga: Remove DGAMouseX and DGAMouseY
    
    Previously some sort of absolute coordinates were sent out in
    the padding of the DGA2 Motion and Button events. DGAMouseX
    and DGAMouseY were used to keep track of said coordinates.
    libXxf86dga doesn't use that data for anything, and at least
    git history didn't show any past usage either. So let's just
    remove the last remnants of of this mess.
    
    Signed-off-by: Ville Syrjala <syrjala at sci.fi>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
index 3093505..77d1ff8 100644
--- a/hw/xfree86/common/xf86DGA.c
+++ b/hw/xfree86/common/xf86DGA.c
@@ -942,8 +942,6 @@ DGAStealKeyEvent(DeviceIntPtr dev, int index, int key_code, int is_down)
    return TRUE;
 }  
 
-static int  DGAMouseX, DGAMouseY;
-
 Bool
 DGAStealMotionEvent(DeviceIntPtr dev, int index, int dx, int dy)
 {
@@ -958,17 +956,6 @@ DGAStealMotionEvent(DeviceIntPtr dev, int index, int dx, int dy)
    if(!pScreenPriv || !pScreenPriv->grabMouse) /* no direct mode */
         return FALSE;
 
-    DGAMouseX += dx;
-    if (DGAMouseX < 0)
-        DGAMouseX = 0;
-    else if (DGAMouseX > screenInfo.screens[index]->width)
-        DGAMouseX = screenInfo.screens[index]->width;
-    DGAMouseY += dy;
-    if (DGAMouseY < 0)
-        DGAMouseY = 0;
-    else if (DGAMouseY > screenInfo.screens[index]->height)
-        DGAMouseY = screenInfo.screens[index]->height;
-
     memset(&event, 0, sizeof(event));
     event.header = ET_Internal;
     event.type = ET_DGAEvent;
commit ee8faeadb60f51a36edce19e568600dab7c8b357
Author: Ville Syrjala <syrjala at sci.fi>
Date:   Mon Jan 24 01:06:44 2011 +0200

    xfree86/dga: DGA2 events are missing the dx/dy information
    
    Copy dx/dy from the internal event to the DGA2 Motion/Button events.
    Do the same for Key events for the sake of keeping the code consistent.
    
    Signed-off-by: Ville Syrjala <syrjala at sci.fi>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
index 9d0c621..3093505 100644
--- a/hw/xfree86/common/xf86DGA.c
+++ b/hw/xfree86/common/xf86DGA.c
@@ -1064,8 +1064,8 @@ DGAProcessKeyboardEvent (ScreenPtr pScreen, DGAEvent *event, DeviceIntPtr keybd)
         de.u.u.type = *XDGAEventBase + GetCoreType((InternalEvent*)&ev);
         de.u.u.detail = event->detail;
         de.u.event.time = event->time;
-        de.u.event.dx = 0;
-        de.u.event.dy = 0;
+        de.u.event.dx = event->dx;
+        de.u.event.dy = event->dy;
         de.u.event.screen = pScreen->myNum;
         de.u.event.state = ev.corestate;
 
@@ -1120,8 +1120,8 @@ DGAProcessPointerEvent (ScreenPtr pScreen, DGAEvent *event, DeviceIntPtr mouse)
         de.u.u.type = *XDGAEventBase + coreEquiv;
         de.u.u.detail = event->detail;
         de.u.event.time = event->time;
-        de.u.event.dx = 0;
-        de.u.event.dy = 0;
+        de.u.event.dx = event->dx;
+        de.u.event.dy = event->dy;
         de.u.event.screen = pScreen->myNum;
         de.u.event.state = ev.corestate;
 
commit e3fef815cf85cf59256f3edeaa21c1267898b42c
Author: Ville Syrjala <syrjala at sci.fi>
Date:   Mon Jan 24 01:06:43 2011 +0200

    xfree86/dga: Make mieq_install Bool
    
    mieq_installed is used as a boolean, so why not make it such. Also
    it's a static variable, so the the explicit zero initialization can
    be removed.
    
    Signed-off-by: Ville Syrjala <syrjala at sci.fi>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
index c4b2d7d..9d0c621 100644
--- a/hw/xfree86/common/xf86DGA.c
+++ b/hw/xfree86/common/xf86DGA.c
@@ -53,7 +53,7 @@
 
 static DevPrivateKeyRec DGAScreenKeyRec;
 #define DGAScreenKeyRegistered dixPrivateKeyRegistered(&DGAScreenKeyRec)
-static int mieq_installed = 0;
+static Bool mieq_installed;
 
 static Bool DGACloseScreen(int i, ScreenPtr pScreen);
 static void DGADestroyColormap(ColormapPtr pmap);
@@ -252,7 +252,7 @@ DGACloseScreen(int i, ScreenPtr pScreen)
 
    if (mieq_installed) {
        mieqSetHandler(ET_DGAEvent, NULL);
-       mieq_installed = 0;
+       mieq_installed = FALSE;
    }
 
    FreeMarkedVisuals(pScreen);
@@ -449,7 +449,7 @@ xf86SetDGAMode(
 
    if (!mieq_installed) {
       mieqSetHandler(ET_DGAEvent, DGAHandleEvent);
-      mieq_installed = 1;
+      mieq_installed = TRUE;
    }
 
    return Success;
@@ -472,7 +472,7 @@ DGASetInputMode(int index, Bool keyboard, Bool mouse)
 
       if (!mieq_installed) {
           mieqSetHandler(ET_DGAEvent, DGAHandleEvent);
-          mieq_installed = 1;
+          mieq_installed = TRUE;
       }
    }
 }
commit f4cb25c2ed832bf4cfcd4d25198fe5a895430fed
Author: Ville Syrjala <syrjala at sci.fi>
Date:   Mon Jan 24 01:06:42 2011 +0200

    xfree86/dga: Remove the ET_DGAEvent handler only if it was installed
    
    Remove the handler only if it was installed. Also mark it as
    uninstalled, otherwise it wouldn't get reinstalled after a
    server reset.
    
    Signed-off-by: Ville Syrjala <syrjala at sci.fi>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
index 3cded85..c4b2d7d 100644
--- a/hw/xfree86/common/xf86DGA.c
+++ b/hw/xfree86/common/xf86DGA.c
@@ -250,9 +250,10 @@ DGACloseScreen(int i, ScreenPtr pScreen)
 {
    DGAScreenPtr pScreenPriv = DGA_GET_SCREEN_PRIV(pScreen);
 
-   if (XDGAEventBase) {
+   if (mieq_installed) {
        mieqSetHandler(ET_DGAEvent, NULL);
-    }
+       mieq_installed = 0;
+   }
 
    FreeMarkedVisuals(pScreen);
 
commit e1547a9f1f6d7991219b7711f4cacc2852dbf88c
Author: Ville Syrjala <syrjala at sci.fi>
Date:   Mon Jan 24 01:06:41 2011 +0200

    xfree86/dga: Install the DGA event handler when DGA2 is used
    
    The ET_DGAEvent handler is only installed when a client
    requests relative events via DGA1. Do it also when a client
    requests DGA2 events.
    
    Signed-off-by: Ville Syrjala <syrjala at sci.fi>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
index 1058a46..3cded85 100644
--- a/hw/xfree86/common/xf86DGA.c
+++ b/hw/xfree86/common/xf86DGA.c
@@ -446,6 +446,11 @@ xf86SetDGAMode(
    pScreenPriv->grabMouse = TRUE;
    pScreenPriv->grabKeyboard = TRUE;
 
+   if (!mieq_installed) {
+      mieqSetHandler(ET_DGAEvent, DGAHandleEvent);
+      mieq_installed = 1;
+   }
+
    return Success;
 }
 
commit 7b16e8633d5a95167aac0c19e43fcfe38bd4a6a4
Author: Ville Syrjala <syrjala at sci.fi>
Date:   Mon Jan 24 01:06:40 2011 +0200

    xfree86/input: Restore DGAStealKeyEvent()
    
    DGA key event support was lost in commit
    8da0ff2d51086666d10ca7330d428e8610a4a0e3. Bring it back.
    
    Signed-off-by: Ville Syrjala <syrjala at sci.fi>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index b9006ab..6fdf1eb 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -1240,6 +1240,19 @@ xf86PostKeyEventM(DeviceIntPtr	device,
 {
     int i = 0, nevents = 0;
 
+#if XFreeXDGA
+    int index;
+    DeviceIntPtr pointer;
+
+    /* Some pointers send key events, paired device is wrong then. */
+    pointer = IsPointerDevice(device) ? device : GetPairedDevice(device);
+    if (miPointerGetScreen(pointer)) {
+        index = miPointerGetScreen(pointer)->myNum;
+        if (DGAStealKeyEvent(device, index, key_code, is_down))
+            return;
+    }
+#endif
+
     if (is_absolute) {
         nevents = GetKeyboardValuatorEvents(xf86Events, device,
                                             is_down ? KeyPress : KeyRelease,
commit a2c481821997ae14aa5816895ae36db2ca2e4dec
Author: Ville Syrjala <syrjala at sci.fi>
Date:   Mon Jan 24 01:06:39 2011 +0200

    include: Fix a copy/paste error in a comment
    
    Signed-off-by: Ville Syrjala <syrjala at sci.fi>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/include/eventstr.h b/include/eventstr.h
index 377cceb..673207c 100644
--- a/include/eventstr.h
+++ b/include/eventstr.h
@@ -177,7 +177,7 @@ struct _DGAEvent
     Time time;            /**<  Time in ms */
     int subtype;          /**<  KeyPress, KeyRelease, ButtonPress,
                                 ButtonRelease, MotionNotify */
-    int detail;           /**<  Relative x coordinate */
+    int detail;           /**<  Button number or key code */
     int dx;               /**<  Relative x coordinate */
     int dy;               /**<  Relative y coordinate */
     int screen;           /**<  Screen number this event applies to */
commit 77af0dc5217fc9c446097d6d487c8ddaf00bdd2a
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Jan 24 10:06:34 2011 +1000

    xfree86: bump input minor ABI
    
    The new valuator_mask_free() call requires a minor bump.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/xf86Module.h b/hw/xfree86/common/xf86Module.h
index 609819b..49a98bd 100644
--- a/hw/xfree86/common/xf86Module.h
+++ b/hw/xfree86/common/xf86Module.h
@@ -83,7 +83,7 @@ typedef enum {
  */
 #define ABI_ANSIC_VERSION	SET_ABI_VERSION(0, 4)
 #define ABI_VIDEODRV_VERSION	SET_ABI_VERSION(9, 0)
-#define ABI_XINPUT_VERSION	SET_ABI_VERSION(12, 1)
+#define ABI_XINPUT_VERSION	SET_ABI_VERSION(12, 2)
 #define ABI_EXTENSION_VERSION	SET_ABI_VERSION(5, 0)
 #define ABI_FONT_VERSION	SET_ABI_VERSION(0, 6)
 
commit 5927e070b45fbe3fea4b394920ffd6f7d036f1ed
Author: Erkki Seppälä <erkki.seppala at vincit.fi>
Date:   Fri Jan 21 15:56:22 2011 +0200

    xkb: Cancel a key's repetition when its autorepeat is disabled.
    
    When XkbChangeEnabledControls is called to disable key repetition of a
    certain key (or keys), currently ongoing repetition of that key was
    not cancelled. It was cancelled if ChangeKeyboardControl was used to
    disable key repetition globally.
    
    Reviewed-by: Rami Ylimäki <rami.ylimaki at vincit.fi>
    Reviewed-by: Dirk Wallenstein <halsmit at t-online.de>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/xkb/xkb.c b/xkb/xkb.c
index bbb1d9d..6fd66c5 100644
--- a/xkb/xkb.c
+++ b/xkb/xkb.c
@@ -915,9 +915,14 @@ ProcXkbSetControls(ClientPtr client)
                                        stuff->axtOptsMask);
             }
 
-            if (stuff->changeCtrls & XkbPerKeyRepeatMask)
+            if (stuff->changeCtrls & XkbPerKeyRepeatMask) {
                 memcpy(new.per_key_repeat, stuff->perKeyRepeat,
                        XkbPerKeyBitArraySize);
+                if (xkbi->repeatKey &&
+                    !BitIsOn(new.per_key_repeat, xkbi->repeatKey)) {
+                    AccessXCancelRepeatKey(xkbi, xkbi->repeatKey);
+                }
+            }
 
             old= *ctrl;
             *ctrl= new;
commit a9d3c43a57cbaf42d9e96ad49cf12bbf1d275fe5
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Wed Jan 19 15:57:59 2011 +0000

    Fix compilation of xf86bigfont.c
    
    xf86bigfont.c: In function 'XFree86BigfontExtensionInit':
    xf86bigfont.c:146: error: 'ProcXF86BigfontDispatch' undeclared (first use in this function)
    xf86bigfont.c:147: error: 'SProcXF86BigfontDispatch' undeclared (first use in this function)
    
    It seems this has been broken since commit cbd4d5dbb70db62ba1cb79c7b904e6fa11f62d7e
    "delete pervasively use of DISPATCH_PROC" (2010-09-28), which is a bit worrying as
    that presumably indicates that no tinderbox is configuring with --enable-xf86bigfont.
    
    In a similar fashion to that commit, fix by moving XFree86BigfontExtensionInit()
    below the definitions of the static dispatch functions it references.
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Julien Cristau <jcristau at debian.org>

diff --git a/Xext/xf86bigfont.c b/Xext/xf86bigfont.c
index da35287..de82744 100644
--- a/Xext/xf86bigfont.c
+++ b/Xext/xf86bigfont.c
@@ -137,51 +137,6 @@ CheckForShmSyscall(void)
 
 #endif
 
-void
-XFree86BigfontExtensionInit(void)
-{
-    if (AddExtension(XF86BIGFONTNAME,
-		     XF86BigfontNumberEvents,
-		     XF86BigfontNumberErrors,
-		     ProcXF86BigfontDispatch,
-		     SProcXF86BigfontDispatch,
-		     XF86BigfontResetProc,
-		     StandardMinorOpcode)) {
-#ifdef HAS_SHM
-#ifdef MUST_CHECK_FOR_SHM_SYSCALL
-	/*
-	 * Note: Local-clients will not be optimized without shared memory
-	 * support. Remote-client optimization does not depend on shared
-	 * memory support.  Thus, the extension is still registered even
-	 * when shared memory support is not functional.  
-	 */
-	if (!CheckForShmSyscall()) {
-	    ErrorF(XF86BIGFONTNAME " extension local-client optimization disabled due to lack of shared memory support in the kernel\n");
-	    return;
-	}
-#endif
-
-	srand((unsigned int) time(NULL));
-	signature = ((unsigned int) (65536.0/(RAND_MAX+1.0) * rand()) << 16)
-	           + (unsigned int) (65536.0/(RAND_MAX+1.0) * rand());
-	/* fprintf(stderr, "signature = 0x%08X\n", signature); */
-
-	FontShmdescIndex = AllocateFontPrivateIndex();
-
-#if !defined(CSRG_BASED) && !defined(__CYGWIN__)
-	pagesize = SHMLBA;
-#else
-# ifdef _SC_PAGESIZE
-	pagesize = sysconf(_SC_PAGESIZE);
-# else
-	pagesize = getpagesize();
-# endif
-#endif
-#endif
-    }
-}
-
-
 /* ========== Management of shared memory segments ========== */
 
 #ifdef HAS_SHM
@@ -749,3 +704,47 @@ SProcXF86BigfontDispatch(
 	    return BadRequest;
     }
 }
+
+void
+XFree86BigfontExtensionInit(void)
+{
+    if (AddExtension(XF86BIGFONTNAME,
+		     XF86BigfontNumberEvents,
+		     XF86BigfontNumberErrors,
+		     ProcXF86BigfontDispatch,
+		     SProcXF86BigfontDispatch,
+		     XF86BigfontResetProc,
+		     StandardMinorOpcode)) {
+#ifdef HAS_SHM
+#ifdef MUST_CHECK_FOR_SHM_SYSCALL
+	/*
+	 * Note: Local-clients will not be optimized without shared memory
+	 * support. Remote-client optimization does not depend on shared
+	 * memory support.  Thus, the extension is still registered even
+	 * when shared memory support is not functional.
+	 */
+	if (!CheckForShmSyscall()) {
+	    ErrorF(XF86BIGFONTNAME " extension local-client optimization disabled due to lack of shared memory support in the kernel\n");
+	    return;
+	}
+#endif
+
+	srand((unsigned int) time(NULL));
+	signature = ((unsigned int) (65536.0/(RAND_MAX+1.0) * rand()) << 16)
+	           + (unsigned int) (65536.0/(RAND_MAX+1.0) * rand());
+	/* fprintf(stderr, "signature = 0x%08X\n", signature); */
+
+	FontShmdescIndex = AllocateFontPrivateIndex();
+
+#if !defined(CSRG_BASED) && !defined(__CYGWIN__)
+	pagesize = SHMLBA;
+#else
+# ifdef _SC_PAGESIZE
+	pagesize = sysconf(_SC_PAGESIZE);
+# else
+	pagesize = getpagesize();
+# endif
+#endif
+#endif
+    }
+}
commit 82b1eaa6cad20f39dbf15573bdb3d62acbcd91f9
Author: Tom Fogal <tfogal at alumni.unh.edu>
Date:   Wed Dec 22 14:39:48 2010 -0700

    Autodetect TLS support instead of defaulting to disabled.
    
    Uses the AX_TLS macro to figure out if the current platform
    supports TLS.  If it does, enable TLS automagically.  Still
    respects --enable option, regardless.
    
    Signed-off-by: Tom Fogal <tfogal at alumni.unh.edu>
    Reviewed-by: Dan Nicholson <dbn.lists at gmail.com>

diff --git a/configure.ac b/configure.ac
index 1ceffe7..e6ada8d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -597,9 +597,14 @@ dnl GLX build options
 AC_ARG_ENABLE(aiglx,          AS_HELP_STRING([--enable-aiglx], [Build accelerated indirect GLX (default: enabled)]),
                                 [AIGLX=$enableval],
                                 [AIGLX=yes])
-AC_ARG_ENABLE(glx-tls,        AS_HELP_STRING([--enable-glx-tls], [Build GLX with TLS support (default: disabled)]),
+AX_TLS
+AC_ARG_ENABLE(glx-tls,        AS_HELP_STRING([--enable-glx-tls], [Build GLX with TLS support (default: auto)]),
                                 [GLX_USE_TLS=$enableval],
-                                [GLX_USE_TLS=no])
+                                [GLX_USE_TLS=no
+                                 if test "${ac_cv_tls}" != "none" ; then
+                                   GLX_USE_TLS=yes
+                                 fi])
+AC_SUBST(GLX_TLS, ${GLX_USE_TLS})
 
 dnl Extensions.
 AC_ARG_ENABLE(registry,       AS_HELP_STRING([--disable-registry], [Build string registry module (default: enabled)]), [XREGISTRY=$enableval], [XREGISTRY=yes])
commit 93393411e39fbb0f72cf6c2f79ebde177aa86932
Author: Tom Fogal <tfogal at alumni.unh.edu>
Date:   Wed Dec 22 16:03:03 2010 -0700

    Add macro for detecting thread local storage support.
    
    This adds an AX_TLS macro which attempts to identify if the
    underlying compiler/platform supports thread local storage (TLS).
    The macro comes from the autoconf macro archive.
    
    Signed-off-by: Tom Fogal <tfogal at alumni.unh.edu>
    Reviewed-by: Dan Nicholson <dbn.lists at gmail.com>

diff --git a/m4/ax_tls.m4 b/m4/ax_tls.m4
new file mode 100644
index 0000000..481c3d0
--- /dev/null
+++ b/m4/ax_tls.m4
@@ -0,0 +1,74 @@
+# ===========================================================================
+#             http://www.nongnu.org/autoconf-archive/ax_tls.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_TLS
+#
+# DESCRIPTION
+#
+#   Provides a test for the compiler support of thread local storage (TLS)
+#   extensions. Defines TLS if it is found. Currently only knows about GCC
+#   and MSVC. I think SunPro uses the same as GCC, and Borland apparently
+#   supports either.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Alan Woodland <ajw05 at aber.ac.uk>
+#
+#   This program is free software: you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation, either version 3 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+AC_DEFUN([AX_TLS], [
+  AC_MSG_CHECKING(for thread local storage (TLS) class)
+  AC_CACHE_VAL(ac_cv_tls, [
+    ax_tls_keywords="__thread __declspec(thread) none"
+    for ax_tls_keyword in $ax_tls_keywords; do
+       case $ax_tls_keyword in
+          none) ac_cv_tls=none ; break ;;
+          *)
+             AC_TRY_COMPILE(
+                [#include <stdlib.h>
+                 static void
+                 foo(void) {
+                 static ] $ax_tls_keyword [ int bar;
+                 exit(1);
+                 }],
+                 [],
+                 [ac_cv_tls=$ax_tls_keyword ; break],
+                 ac_cv_tls=none
+             )
+       esac
+    done
+])
+
+  if test "$ac_cv_tls" != "none"; then
+    dnl AC_DEFINE([TLS], [], [If the compiler supports a TLS storage class define it to that here])
+    AC_DEFINE_UNQUOTED([TLS], $ac_cv_tls, [If the compiler supports a TLS storage class define it to that here])
+  fi
+  AC_MSG_RESULT($ac_cv_tls)
+])
commit 60801ff8703ec36995139a6dd7b1fc26ae8854a6
Author: Dan Nicholson <dbn.lists at gmail.com>
Date:   Tue Nov 23 11:38:50 2010 -0800

    xfree86: Convert libxf86config to static libtool library
    
    In order to use libxf86config in a shared library, all the code must be
    compiled with -fPIC. Add proper PIC support for libxf86config by turning
    it into a libtool library. However, since we don't want to guarantee API
    or ABI stability, make sure it's only built static.
    
    Signed-off-by: Dan Nicholson <dbn.lists at gmail.com>
    Acked-by: Gaetan Nadon <memsize at videotron.ca>

diff --git a/hw/xfree86/parser/Makefile.am b/hw/xfree86/parser/Makefile.am
index fb5d49e..1cd70e7 100644
--- a/hw/xfree86/parser/Makefile.am
+++ b/hw/xfree86/parser/Makefile.am
@@ -1,6 +1,6 @@
 if INSTALL_LIBXF86CONFIG
 noinst_LTLIBRARIES = libxf86config_internal.la
-lib_LIBRARIES = libxf86config.a
+lib_LTLIBRARIES = libxf86config.la
 LIBHEADERS = \
 	xf86Optrec.h \
 	xf86Parser.h
@@ -30,10 +30,11 @@ INTERNAL_SOURCES= \
 libxf86config_internal_la_SOURCES = \
 	$(INTERNAL_SOURCES)
 
-libxf86config_a_SOURCES = \
+libxf86config_la_SOURCES = \
 	$(top_srcdir)/os/xprintf.c \
 	$(INTERNAL_SOURCES)
-libxf86config_a_CFLAGS = $(AM_CFLAGS)
+libxf86config_la_CFLAGS = $(AM_CFLAGS)
+libxf86config_la_LDFLAGS = -static
 
 AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS) \
 	-DSYSCONFDIR=\"$(sysconfdir)\" \


More information about the Xquartz-changes mailing list