[Xquartz-changes] xserver: Branch 'master' - 37 commits

Jeremy Huddleston jeremyhu at freedesktop.org
Sat Jan 30 14:29:26 PST 2010


 README                                   |   38 +++++
 configure.ac                             |   54 ++++---
 cpprules.in                              |    1 
 dix/cursor.c                             |  220 +++++++++++--------------------
 dix/eventconvert.c                       |    1 
 doc/Makefile.am                          |   17 --
 fb/fbpict.c                              |    1 
 glx/glapitemp.h                          |    2 
 glx/glxdri2.c                            |    2 
 glx/indirect_dispatch.h                  |    2 
 glx/indirect_reqsize.h                   |    4 
 glx/indirect_size.h                      |    4 
 glx/indirect_size_get.c                  |    4 
 glx/indirect_size_get.h                  |    4 
 hw/dmx/doc/Makefile.am                   |    2 
 hw/xfree86/common/xf86Events.c           |   49 ++----
 hw/xfree86/common/xf86VGAarbiter.c       |   65 ---------
 hw/xfree86/common/xf86Xinput.c           |   20 +-
 hw/xfree86/common/xf86cmap.c             |   31 ++--
 hw/xfree86/dri2/dri2.c                   |   88 +++++++++---
 hw/xfree86/dri2/dri2.h                   |    9 +
 hw/xfree86/modes/xf86Crtc.c              |    2 
 hw/xfree86/os-support/bsd/bsd_VTsw.c     |    9 +
 hw/xfree86/os-support/sco/VTsw_sco.c     |   10 +
 hw/xfree86/os-support/shared/VTsw_noop.c |    6 
 hw/xfree86/os-support/shared/VTsw_usl.c  |   11 +
 hw/xfree86/os-support/solaris/sun_VTsw.c |   43 +++++-
 hw/xfree86/os-support/solaris/sun_init.c |   19 +-
 hw/xfree86/os-support/xf86_OSproc.h      |    1 
 hw/xfree86/x86emu/ops.c                  |   70 ++++++---
 hw/xquartz/bundle/.gitignore             |    1 
 hw/xquartz/pbproxy/.gitignore            |    1 
 include/dix-config.h.in                  |    3 
 include/xkbsrv.h                         |   19 --
 os/log.c                                 |   11 +
 render/render.c                          |  141 +++++++++++++++++++
 test/input.c                             |    4 
 xkb/XKBAlloc.c                           |   46 +++---
 xkb/XKBGAlloc.c                          |    2 
 xkb/XKBMAlloc.c                          |   71 +++++-----
 xkb/XKBMisc.c                            |    8 -
 xkb/ddxList.c                            |    2 
 xkb/maprules.c                           |   16 +-
 xkb/xkb.c                                |    7 
 xkb/xkbActions.c                         |    7 
 xkb/xkbEvents.c                          |    2 
 xkb/xkbLEDs.c                            |   18 +-
 xkb/xkbfmisc.c                           |   10 -
 xkb/xkbout.c                             |    2 
 xkb/xkbtext.c                            |    4 
 50 files changed, 682 insertions(+), 482 deletions(-)

New commits:
commit 7ba5de6e9e1e8efda9f79af601fb6269bae841ce
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Jan 30 10:55:38 2010 -0800

    XQuartz: Add some .gitignore magic
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at freedesktop.org>

diff --git a/hw/xquartz/bundle/.gitignore b/hw/xquartz/bundle/.gitignore
new file mode 100644
index 0000000..4e432c2
--- /dev/null
+++ b/hw/xquartz/bundle/.gitignore
@@ -0,0 +1 @@
+Info.plist
diff --git a/hw/xquartz/pbproxy/.gitignore b/hw/xquartz/pbproxy/.gitignore
new file mode 100644
index 0000000..6684920
--- /dev/null
+++ b/hw/xquartz/pbproxy/.gitignore
@@ -0,0 +1 @@
+xpbproxy
commit 4d575b0559817258f7a0ce6c4d2d0f9e7e5bba63
Author: Robert Morell <rmorell at nvidia.com>
Date:   Fri Jan 29 19:07:03 2010 -0800

    RENDER: Fix gradient and solid fill pictures with Xinerama, and misc cleanup
    
    If these aren't wrapped, then procs that are wrapped (such as
    RenderChangePicture) will fail in Xinerama when they see the resource
    type of a picture created through one of these interfaces is PictureType
    and not XRT_PICTURE like those allocated via RenderCreatePicture.
    
    Signed-off-by: Robert Morell <rmorell at nvidia.com>
    Reviewed-by: Aaron Plattner <aplattner at nvidia.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/render/render.c b/render/render.c
index 575bd9f..2d9e47a 100644
--- a/render/render.c
+++ b/render/render.c
@@ -3235,6 +3235,138 @@ PanoramiXRenderAddTraps (ClientPtr client)
     return result;
 }
 
+static int
+PanoramiXRenderCreateSolidFill (ClientPtr client)
+{
+    REQUEST(xRenderCreateSolidFillReq);
+    PanoramiXRes    *newPict;
+    int		    result = Success, j;
+
+    REQUEST_AT_LEAST_SIZE(xRenderCreateSolidFillReq);
+
+    if(!(newPict = (PanoramiXRes *) xalloc(sizeof(PanoramiXRes))))
+	return BadAlloc;
+
+    newPict->type = XRT_PICTURE;
+    newPict->info[0].id = stuff->pid;
+    newPict->u.pict.root = FALSE;
+
+    for(j = 1; j < PanoramiXNumScreens; j++)
+	newPict->info[j].id = FakeClientID(client->index);
+	
+    FOR_NSCREENS_BACKWARD(j) {
+	stuff->pid = newPict->info[j].id;
+	result = (*PanoramiXSaveRenderVector[X_RenderCreateSolidFill]) (client);
+	if(result != Success) break;
+    }
+
+    if (result == Success)
+	AddResource(newPict->info[0].id, XRT_PICTURE, newPict);
+    else
+	xfree(newPict);
+
+    return result;
+}
+
+static int
+PanoramiXRenderCreateLinearGradient (ClientPtr client)
+{
+    REQUEST(xRenderCreateLinearGradientReq);
+    PanoramiXRes    *newPict;
+    int		    result = Success, j;
+
+    REQUEST_AT_LEAST_SIZE(xRenderCreateLinearGradientReq);
+
+    if(!(newPict = (PanoramiXRes *) xalloc(sizeof(PanoramiXRes))))
+	return BadAlloc;
+
+    newPict->type = XRT_PICTURE;
+    newPict->info[0].id = stuff->pid;
+    newPict->u.pict.root = FALSE;
+
+    for(j = 1; j < PanoramiXNumScreens; j++)
+	newPict->info[j].id = FakeClientID(client->index);
+
+    FOR_NSCREENS_BACKWARD(j) {
+	stuff->pid = newPict->info[j].id;
+	result = (*PanoramiXSaveRenderVector[X_RenderCreateLinearGradient]) (client);
+	if(result != Success) break;
+    }
+
+    if (result == Success)
+	AddResource(newPict->info[0].id, XRT_PICTURE, newPict);
+    else
+	xfree(newPict);
+
+    return result;
+}
+
+static int
+PanoramiXRenderCreateRadialGradient (ClientPtr client)
+{
+    REQUEST(xRenderCreateRadialGradientReq);
+    PanoramiXRes    *newPict;
+    int		    result = Success, j;
+
+    REQUEST_AT_LEAST_SIZE(xRenderCreateRadialGradientReq);
+
+    if(!(newPict = (PanoramiXRes *) xalloc(sizeof(PanoramiXRes))))
+	return BadAlloc;
+
+    newPict->type = XRT_PICTURE;
+    newPict->info[0].id = stuff->pid;
+    newPict->u.pict.root = FALSE;
+
+    for(j = 1; j < PanoramiXNumScreens; j++)
+	newPict->info[j].id = FakeClientID(client->index);
+
+    FOR_NSCREENS_BACKWARD(j) {
+	stuff->pid = newPict->info[j].id;
+	result = (*PanoramiXSaveRenderVector[X_RenderCreateRadialGradient]) (client);
+	if(result != Success) break;
+    }
+
+    if (result == Success)
+	AddResource(newPict->info[0].id, XRT_PICTURE, newPict);
+    else
+	xfree(newPict);
+
+    return result;
+}
+
+static int
+PanoramiXRenderCreateConicalGradient (ClientPtr client)
+{
+    REQUEST(xRenderCreateConicalGradientReq);
+    PanoramiXRes    *newPict;
+    int		    result = Success, j;
+
+    REQUEST_AT_LEAST_SIZE(xRenderCreateConicalGradientReq);
+
+    if(!(newPict = (PanoramiXRes *) xalloc(sizeof(PanoramiXRes))))
+	return BadAlloc;
+
+    newPict->type = XRT_PICTURE;
+    newPict->info[0].id = stuff->pid;
+    newPict->u.pict.root = FALSE;
+
+    for(j = 1; j < PanoramiXNumScreens; j++)
+	newPict->info[j].id = FakeClientID(client->index);
+
+    FOR_NSCREENS_BACKWARD(j) {
+	stuff->pid = newPict->info[j].id;
+	result = (*PanoramiXSaveRenderVector[X_RenderCreateConicalGradient]) (client);
+	if(result != Success) break;
+    }
+
+    if (result == Success)
+	AddResource(newPict->info[0].id, XRT_PICTURE, newPict);
+    else
+	xfree(newPict);
+
+    return result;
+}
+
 void
 PanoramiXRenderInit (void)
 {
@@ -3264,6 +3396,11 @@ PanoramiXRenderInit (void)
     ProcRenderVector[X_RenderTriStrip] = PanoramiXRenderTriStrip;
     ProcRenderVector[X_RenderTriFan] = PanoramiXRenderTriFan;
     ProcRenderVector[X_RenderAddTraps] = PanoramiXRenderAddTraps;
+
+    ProcRenderVector[X_RenderCreateSolidFill] = PanoramiXRenderCreateSolidFill;
+    ProcRenderVector[X_RenderCreateLinearGradient] = PanoramiXRenderCreateLinearGradient;
+    ProcRenderVector[X_RenderCreateRadialGradient] = PanoramiXRenderCreateRadialGradient;
+    ProcRenderVector[X_RenderCreateConicalGradient] = PanoramiXRenderCreateConicalGradient;
 }
 
 void
commit 8d6b1838330625b758ebc55bb0df1b425c5cefaf
Author: Robert Morell <rmorell at nvidia.com>
Date:   Thu Jan 21 12:38:47 2010 -0800

    Render: Fix request size verification
    
    RenderSetPictureClipRectangles and the Xinerama version of
    RenderChangePicture were using the wrong structure types for request
    size verification.
    
    Signed-off-by: Robert Morell <rmorell at nvidia.com>
    Reviewed-by: Aaron Plattner <aplattner at nvidia.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/render/render.c b/render/render.c
index 77e5e03..575bd9f 100644
--- a/render/render.c
+++ b/render/render.c
@@ -656,7 +656,7 @@ ProcRenderSetPictureClipRectangles (ClientPtr client)
     if (!pPicture->pDrawable)
         return BadDrawable;
 
-    nr = (client->req_len << 2) - sizeof(xRenderChangePictureReq);
+    nr = (client->req_len << 2) - sizeof(xRenderSetPictureClipRectanglesReq);
     if (nr & 4)
 	return BadLength;
     nr >>= 3;
@@ -2728,7 +2728,7 @@ PanoramiXRenderChangePicture (ClientPtr client)
     int		    result = Success, j;
     REQUEST(xRenderChangePictureReq);
 
-    REQUEST_AT_LEAST_SIZE(xChangeWindowAttributesReq);
+    REQUEST_AT_LEAST_SIZE(xRenderChangePictureReq);
     
     VERIFY_XIN_PICTURE(pict, stuff->picture, client, DixWriteAccess,
 		       RenderErrBase + BadPicture);
commit 5e81078cf56aabbf6551d96d312c7840ba9370ae
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Mon Jan 18 14:31:12 2010 +0200

    xfree86: vgaarb: remove useless debug
    
    This is RAC's remnant. Any sane person would use a more wise method of
    debugging instead.
    
    X.Org Bug 26074 <http://bugs.freedesktop.org/show_bug.cgi?id=26074>
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/common/xf86VGAarbiter.c b/hw/xfree86/common/xf86VGAarbiter.c
index b240998..cd45cd1 100644
--- a/hw/xfree86/common/xf86VGAarbiter.c
+++ b/hw/xfree86/common/xf86VGAarbiter.c
@@ -38,14 +38,6 @@
 #include "xf86Priv.h"
 #include "pciaccess.h"
 
-#ifdef DEBUG
-#error "no, really, you dont want to do this"
-#define DPRINT_S(x,y) ErrorF(x ": %i\n",y);
-#define DPRINT(x) ErrorF(x "\n");
-#else
-#define DPRINT_S(x,y)
-#define DPRINT(x)
-#endif
 
 static GCFuncs VGAarbiterGCFuncs = {
     VGAarbiterValidateGC, VGAarbiterChangeGC, VGAarbiterCopyGC,
@@ -187,8 +179,6 @@ xf86VGAarbiterWrapFunctions(void)
         pScrn = xf86Screens[pScreen->myNum];
         PointPriv = dixLookupPrivate(&pScreen->devPrivates, miPointerScreenKey);
 
-        DPRINT_S("VGAarbiterWrapFunctions",pScreen->myNum);
-
         if (!dixRequestPrivate(VGAarbiterGCKey, sizeof(VGAarbiterGCRec)))
             return FALSE;
 
@@ -244,7 +234,6 @@ VGAarbiterCloseScreen (int i, ScreenPtr pScreen)
     PictureScreenPtr    ps = GetPictureScreenIfSet(pScreen);
 #endif
 
-    DPRINT_S("VGAarbiterCloseScreen",pScreen->myNum);
     UNWRAP_SCREEN(CreateGC);
     UNWRAP_SCREEN(CloseScreen);
     UNWRAP_SCREEN(GetImage);
@@ -311,7 +300,6 @@ VGAarbiterGetImage (
     )
 {
     ScreenPtr pScreen = pDrawable->pScreen;
-    DPRINT_S("VGAarbiterGetImage",pScreen->myNum);
     SCREEN_PROLOG(GetImage);
 //    if (xf86Screens[pScreen->myNum]->vtSema) {
     VGAGet();
@@ -334,7 +322,6 @@ VGAarbiterGetSpans (
 {
     ScreenPtr       pScreen = pDrawable->pScreen;
 
-    DPRINT_S("VGAarbiterGetSpans",pScreen->myNum);
     SCREEN_PROLOG (GetSpans);
     VGAGet();
     (*pScreen->GetSpans) (pDrawable, wMax, ppt, pwidth, nspans, pdstStart);
@@ -348,7 +335,6 @@ VGAarbiterSourceValidate (
     int x, int y, int width, int height )
 {
     ScreenPtr   pScreen = pDrawable->pScreen;
-    DPRINT_S("VGAarbiterSourceValidate",pScreen->myNum);
     SCREEN_PROLOG (SourceValidate);
     VGAGet();
     if (pScreen->SourceValidate)
@@ -365,7 +351,6 @@ VGAarbiterCopyWindow(
 {
     ScreenPtr pScreen = pWin->drawable.pScreen;
 
-    DPRINT_S("VGAarbiterCopyWindow",pScreen->myNum);
     SCREEN_PROLOG (CopyWindow);
     VGAGet();
     (*pScreen->CopyWindow) (pWin, ptOldOrg, prgnSrc);
@@ -382,7 +367,6 @@ VGAarbiterClearToBackground (
 {
     ScreenPtr pScreen = pWin->drawable.pScreen;
 
-    DPRINT_S("VGAarbiterClearToBackground",pScreen->myNum);
     SCREEN_PROLOG ( ClearToBackground);
     VGAGet();
     (*pScreen->ClearToBackground) (pWin, x, y, w, h, generateExposures);
@@ -395,7 +379,6 @@ VGAarbiterCreatePixmap(ScreenPtr pScreen, int w, int h, int depth, unsigned usag
 {
     PixmapPtr pPix;
 
-    DPRINT_S("VGAarbiterCreatePixmap",pScreen->myNum);
     SCREEN_PROLOG ( CreatePixmap);
     VGAGet();
     pPix = (*pScreen->CreatePixmap) (pScreen, w, h, depth, usage_hint);
@@ -410,7 +393,6 @@ VGAarbiterSaveScreen(ScreenPtr pScreen, Bool unblank)
 {
     Bool val;
 
-    DPRINT_S("VGAarbiterSaveScreen",pScreen->myNum);
     SCREEN_PROLOG (SaveScreen);
     VGAGet();
     val = (*pScreen->SaveScreen) (pScreen, unblank);
@@ -428,7 +410,6 @@ VGAarbiterStoreColors (
 {
     ScreenPtr pScreen = pmap->pScreen;
 
-    DPRINT_S("VGAarbiterStoreColors",pScreen->myNum);
     SCREEN_PROLOG (StoreColors);
     VGAGet();
     (*pScreen->StoreColors) (pmap,ndef,pdefs);
@@ -444,7 +425,6 @@ VGAarbiterRecolorCursor (
     Bool displayed
     )
 {
-    DPRINT_S("VGAarbiterRecolorCursor",pScreen->myNum);
     SCREEN_PROLOG (RecolorCursor);
     VGAGet();
     (*pScreen->RecolorCursor) (pDev, pScreen, pCurs, displayed);
@@ -461,7 +441,6 @@ VGAarbiterRealizeCursor (
 {
     Bool val;
 
-    DPRINT_S("VGAarbiterRealizeCursor",pScreen->myNum);
     SCREEN_PROLOG (RealizeCursor);
     VGAGet();
     val = (*pScreen->RealizeCursor) (pDev, pScreen,pCursor);
@@ -479,7 +458,6 @@ VGAarbiterUnrealizeCursor (
 {
     Bool val;
 
-    DPRINT_S("VGAarbiterUnrealizeCursor",pScreen->myNum);
     SCREEN_PROLOG (UnrealizeCursor);
     VGAGet();
     val = (*pScreen->UnrealizeCursor) (pDev, pScreen, pCursor);
@@ -497,7 +475,6 @@ VGAarbiterDisplayCursor (
 {
     Bool val;
 
-    DPRINT_S("VGAarbiterDisplayCursor",pScreen->myNum);
     SCREEN_PROLOG (DisplayCursor);
     VGAGet();
     val = (*pScreen->DisplayCursor) (pDev, pScreen, pCursor);
@@ -515,7 +492,6 @@ VGAarbiterSetCursorPosition (
 {
     Bool val;
 
-    DPRINT_S("VGAarbiterSetCursorPosition",pScreen->myNum);
     SCREEN_PROLOG (SetCursorPosition);
     VGAGet();
     val = (*pScreen->SetCursorPosition) (pDev, pScreen, x, y, generateEvent);
@@ -531,7 +507,6 @@ VGAarbiterAdjustFrame(int index, int x, int y, int flags)
     VGAarbiterScreenPtr pScreenPriv = (VGAarbiterScreenPtr)dixLookupPrivate(
         &pScreen->devPrivates, VGAarbiterScreenKey);
 
-    DPRINT_S("VGAarbiterAdjustFrame",index);
     VGAGet();
     (*pScreenPriv->AdjustFrame)(index, x, y, flags);
     VGAPut();
@@ -545,7 +520,6 @@ VGAarbiterSwitchMode(int index, DisplayModePtr mode, int flags)
     VGAarbiterScreenPtr pScreenPriv = (VGAarbiterScreenPtr)dixLookupPrivate(
         &pScreen->devPrivates, VGAarbiterScreenKey);
 
-    DPRINT_S("VGAarbiterSwitchMode",index);
     VGAGet();
     val = (*pScreenPriv->SwitchMode)(index, mode, flags);
     VGAPut();
@@ -560,7 +534,6 @@ VGAarbiterEnterVT(int index, int flags)
     VGAarbiterScreenPtr pScreenPriv = (VGAarbiterScreenPtr)dixLookupPrivate(
         &pScreen->devPrivates, VGAarbiterScreenKey);
 
-    DPRINT_S("VGAarbiterEnterVT",index);
     VGAGet();
     val = (*pScreenPriv->EnterVT)(index, flags);
     VGAPut();
@@ -574,8 +547,6 @@ VGAarbiterLeaveVT(int index, int flags)
     VGAarbiterScreenPtr pScreenPriv = (VGAarbiterScreenPtr)dixLookupPrivate(
         &pScreen->devPrivates, VGAarbiterScreenKey);
 
-    DPRINT_S("VGAarbiterLeaveVT",index);
-
     VGAGet();
     (*pScreenPriv->LeaveVT)(index, flags);
     VGAPut();
@@ -588,8 +559,6 @@ VGAarbiterFreeScreen(int index, int flags)
     VGAarbiterScreenPtr pScreenPriv = (VGAarbiterScreenPtr)dixLookupPrivate(
         &pScreen->devPrivates, VGAarbiterScreenKey);
 
-    DPRINT_S("VGAarbiterFreeScreen",index);
-
     VGAGet();
     (*pScreenPriv->FreeScreen)(index, flags);
     VGAPut();
@@ -602,7 +571,6 @@ VGAarbiterCreateGC(GCPtr pGC)
     VGAarbiterGCPtr pGCPriv = (VGAarbiterGCPtr)dixLookupPrivate(&pGC->devPrivates, VGAarbiterGCKey);
     Bool         ret;
 
-    DPRINT_S("VGAarbiterCreateGC",pScreen->myNum);
     SCREEN_PROLOG(CreateGC);
     VGAGet();
     ret = (*pScreen->CreateGC)(pGC);
@@ -621,7 +589,6 @@ VGAarbiterValidateGC(
    DrawablePtr   pDraw )
 {
     GC_UNWRAP(pGC);
-    DPRINT("VGAarbiterValidateGC");
     (*pGC->funcs->ValidateGC)(pGC, changes, pDraw);
     GC_WRAP(pGC);
 }
@@ -631,7 +598,6 @@ static void
 VGAarbiterDestroyGC(GCPtr pGC)
 {
     GC_UNWRAP (pGC);
-    DPRINT("VGAarbiterDestroyGC");
     (*pGC->funcs->DestroyGC)(pGC);
     GC_WRAP (pGC);
 }
@@ -642,7 +608,6 @@ VGAarbiterChangeGC (
     unsigned long   mask)
 {
     GC_UNWRAP (pGC);
-    DPRINT("VGAarbiterChangeGC");
     (*pGC->funcs->ChangeGC) (pGC, mask);
     GC_WRAP (pGC);
 }
@@ -654,7 +619,6 @@ VGAarbiterCopyGC (
     GCPtr       pGCDst)
 {
     GC_UNWRAP (pGCDst);
-    DPRINT("VGAarbiterCopyGC");
     (*pGCDst->funcs->CopyGC) (pGCSrc, mask, pGCDst);
     GC_WRAP (pGCDst);
 }
@@ -667,7 +631,6 @@ VGAarbiterChangeClip (
     int     nrects )
 {
     GC_UNWRAP (pGC);
-    DPRINT("VGAarbiterChangeClip");
     (*pGC->funcs->ChangeClip) (pGC, type, pvalue, nrects);
     GC_WRAP (pGC);
 }
@@ -676,7 +639,6 @@ static void
 VGAarbiterCopyClip(GCPtr pgcDst, GCPtr pgcSrc)
 {
     GC_UNWRAP (pgcDst);
-    DPRINT("VGAarbiterCopyClip");
     (* pgcDst->funcs->CopyClip)(pgcDst, pgcSrc);
     GC_WRAP (pgcDst);
 }
@@ -685,7 +647,6 @@ static void
 VGAarbiterDestroyClip(GCPtr pGC)
 {
     GC_UNWRAP (pGC);
-    DPRINT("VGAarbiterDestroyClip");
     (* pGC->funcs->DestroyClip)(pGC);
     GC_WRAP (pGC);
 }
@@ -701,7 +662,6 @@ VGAarbiterFillSpans(
     int fSorted )
 {
     GC_UNWRAP(pGC);
-    DPRINT("VGAarbiterFillSpans");
     VGAGet_GC();
     (*pGC->ops->FillSpans)(pDraw, pGC, nInit, pptInit, pwidthInit, fSorted);
     VGAPut_GC();
@@ -719,7 +679,6 @@ VGAarbiterSetSpans(
     int         fSorted )
 {
     GC_UNWRAP(pGC);
-    DPRINT("VGAarbiterSetSpans");
     VGAGet_GC();
     (*pGC->ops->SetSpans)(pDraw, pGC, pcharsrc, ppt, pwidth, nspans, fSorted);
     VGAPut_GC();
@@ -737,7 +696,6 @@ VGAarbiterPutImage(
     char    *pImage )
 {
     GC_UNWRAP(pGC);
-    DPRINT("VGAarbiterPutImage");
     VGAGet_GC();
     (*pGC->ops->PutImage)(pDraw, pGC, depth, x, y, w, h,
               leftPad, format, pImage);
@@ -757,7 +715,6 @@ VGAarbiterCopyArea(
     RegionPtr ret;
 
     GC_UNWRAP(pGC);
-    DPRINT("VGAarbiterCopyArea");
     VGAGet_GC();
     ret = (*pGC->ops->CopyArea)(pSrc, pDst,
                 pGC, srcx, srcy, width, height, dstx, dsty);
@@ -779,7 +736,6 @@ VGAarbiterCopyPlane(
     RegionPtr ret;
 
     GC_UNWRAP(pGC);
-    DPRINT("VGAarbiterCopyPlane");
     VGAGet_GC();
     ret = (*pGC->ops->CopyPlane)(pSrc, pDst, pGC, srcx, srcy,
                  width, height, dstx, dsty, bitPlane);
@@ -797,7 +753,6 @@ VGAarbiterPolyPoint(
     xPoint *pptInit )
 {
     GC_UNWRAP(pGC);
-    DPRINT("VGAarbiterPolyPoint");
     VGAGet_GC();
     (*pGC->ops->PolyPoint)(pDraw, pGC, mode, npt, pptInit);
     VGAPut_GC();
@@ -814,7 +769,6 @@ VGAarbiterPolylines(
     DDXPointPtr pptInit )
 {
     GC_UNWRAP(pGC);
-    DPRINT("VGAarbiterPolylines");
     VGAGet_GC();
     (*pGC->ops->Polylines)(pDraw, pGC, mode, npt, pptInit);
     VGAPut_GC();
@@ -829,7 +783,6 @@ VGAarbiterPolySegment(
     xSegment    *pSeg )
 {
     GC_UNWRAP(pGC);
-    DPRINT("VGAarbiterPolySegment");
     VGAGet_GC();
     (*pGC->ops->PolySegment)(pDraw, pGC, nseg, pSeg);
     VGAPut_GC();
@@ -844,7 +797,6 @@ VGAarbiterPolyRectangle(
     xRectangle  *pRectsInit )
 {
     GC_UNWRAP(pGC);
-    DPRINT("VGAarbiterPolyRectangle");
     VGAGet_GC();
     (*pGC->ops->PolyRectangle)(pDraw, pGC, nRectsInit, pRectsInit);
     VGAPut_GC();
@@ -859,7 +811,6 @@ VGAarbiterPolyArc(
     xArc    *parcs )
 {
     GC_UNWRAP(pGC);
-    DPRINT("VGAarbiterPolyArc");
     VGAGet_GC();
     (*pGC->ops->PolyArc)(pDraw, pGC, narcs, parcs);
     VGAPut_GC();
@@ -876,7 +827,6 @@ VGAarbiterFillPolygon(
     DDXPointPtr ptsIn )
 {
     GC_UNWRAP(pGC);
-    DPRINT("VGAarbiterFillPolygon");
     VGAGet_GC();
     (*pGC->ops->FillPolygon)(pDraw, pGC, shape, mode, count, ptsIn);
     VGAPut_GC();
@@ -891,7 +841,6 @@ VGAarbiterPolyFillRect(
     xRectangle  *prectInit)
 {
     GC_UNWRAP(pGC);
-    DPRINT("VGAarbiterPolyFillRect");
     VGAGet_GC();
     (*pGC->ops->PolyFillRect)(pDraw, pGC, nrectFill, prectInit);
     VGAPut_GC();
@@ -906,7 +855,6 @@ VGAarbiterPolyFillArc(
     xArc    *parcs )
 {
     GC_UNWRAP(pGC);
-    DPRINT("VGAarbiterPolyFillArc");
     VGAGet_GC();
     (*pGC->ops->PolyFillArc)(pDraw, pGC, narcs, parcs);
     VGAPut_GC();
@@ -925,7 +873,6 @@ VGAarbiterPolyText8(
     int ret;
 
     GC_UNWRAP(pGC);
-    DPRINT("VGAarbiterPolyText8");
     VGAGet_GC();
     ret = (*pGC->ops->PolyText8)(pDraw, pGC, x, y, count, chars);
     VGAPut_GC();
@@ -945,7 +892,6 @@ VGAarbiterPolyText16(
     int ret;
 
     GC_UNWRAP(pGC);
-    DPRINT("VGAarbiterPolyText16");
     VGAGet_GC();
     ret = (*pGC->ops->PolyText16)(pDraw, pGC, x, y, count, chars);
     VGAPut_GC();
@@ -963,7 +909,6 @@ VGAarbiterImageText8(
     char    *chars )
 {
     GC_UNWRAP(pGC);
-    DPRINT("VGAarbiterImageText8");
     VGAGet_GC();
     (*pGC->ops->ImageText8)(pDraw, pGC, x, y, count, chars);
     VGAPut_GC();
@@ -980,7 +925,6 @@ VGAarbiterImageText16(
     unsigned short *chars )
 {
     GC_UNWRAP(pGC);
-    DPRINT("VGAarbiterImageText16");
     VGAGet_GC();
     (*pGC->ops->ImageText16)(pDraw, pGC, x, y, count, chars);
     VGAPut_GC();
@@ -998,7 +942,6 @@ VGAarbiterImageGlyphBlt(
     pointer pglyphBase )
 {
     GC_UNWRAP(pGC);
-    DPRINT("VGAarbiterImageGlyphBlt");
     VGAGet_GC();
     (*pGC->ops->ImageGlyphBlt)(pDraw, pGC, xInit, yInit,
                    nglyph, ppci, pglyphBase);
@@ -1016,7 +959,6 @@ VGAarbiterPolyGlyphBlt(
     pointer pglyphBase )
 {
     GC_UNWRAP(pGC);
-    DPRINT("VGAarbiterPolyGlyphBlt");
     VGAGet_GC();
     (*pGC->ops->PolyGlyphBlt)(pDraw, pGC, xInit, yInit,
                   nglyph, ppci, pglyphBase);
@@ -1032,7 +974,6 @@ VGAarbiterPushPixels(
     int dx, int dy, int xOrg, int yOrg )
 {
     GC_UNWRAP(pGC);
-    DPRINT("VGAarbiterPushPixels");
     VGAGet_GC();
     (*pGC->ops->PushPixels)(pGC, pBitMap, pDraw, dx, dy, xOrg, yOrg);
     VGAPut_GC();
@@ -1046,7 +987,6 @@ VGAarbiterSpriteRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pC
 {
     Bool val;
     SPRITE_PROLOG;
-    DPRINT_S("VGAarbiterSpriteRealizeCursor",pScreen->myNum);
     VGAGet();
     val = PointPriv->spriteFuncs->RealizeCursor(pDev, pScreen, pCur);
     VGAPut();
@@ -1059,7 +999,6 @@ VGAarbiterSpriteUnrealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr
 {
     Bool val;
     SPRITE_PROLOG;
-    DPRINT_S("VGAarbiterSpriteUnrealizeCursor",pScreen->myNum);
     VGAGet();
     val = PointPriv->spriteFuncs->UnrealizeCursor(pDev, pScreen, pCur);
     VGAPut();
@@ -1071,7 +1010,6 @@ static void
 VGAarbiterSpriteSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCur, int x, int y)
 {
     SPRITE_PROLOG;
-    DPRINT_S("VGAarbiterSpriteSetCursor",pScreen->myNum);
     VGAGet();
     PointPriv->spriteFuncs->SetCursor(pDev, pScreen, pCur, x, y);
     VGAPut();
@@ -1082,7 +1020,6 @@ static void
 VGAarbiterSpriteMoveCursor(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
 {
     SPRITE_PROLOG;
-    DPRINT_S("VGAarbiterSpriteMoveCursor",pScreen->myNum);
     VGAGet();
     PointPriv->spriteFuncs->MoveCursor(pDev, pScreen, x, y);
     VGAPut();
@@ -1094,7 +1031,6 @@ VGAarbiterDeviceCursorInitialize(DeviceIntPtr pDev, ScreenPtr pScreen)
 {
     Bool val;
     SPRITE_PROLOG;
-    DPRINT_S("VGAarbiterDeviceCursorInitialize",pScreen->myNum);
     VGAGet();
     val = PointPriv->spriteFuncs->DeviceCursorInitialize(pDev, pScreen);
     VGAPut();
@@ -1106,7 +1042,6 @@ static void
 VGAarbiterDeviceCursorCleanup(DeviceIntPtr pDev, ScreenPtr pScreen)
 {
     SPRITE_PROLOG;
-    DPRINT_S("VGAarbiterDeviceCursorCleanup",pScreen->myNum);
     VGAGet();
     PointPriv->spriteFuncs->DeviceCursorCleanup(pDev, pScreen);
     VGAPut();
commit e38df06772965cd5099646f1e7032b7c944d16ed
Author: Aaron Plattner <aplattner at nvidia.com>
Date:   Thu Jan 28 14:33:25 2010 -0800

    DRI2: Bump the dri2 module version to 1.2.0 to reflect recent API changes.
    
    Signed-off-by: Aaron Plattner <aplattner at nvidia.com>
    Acked-by: Jesse Barnes <jbarnes at virtuousgeek.org>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
index 587a928..cd69ca0 100644
--- a/hw/xfree86/dri2/dri2.c
+++ b/hw/xfree86/dri2/dri2.c
@@ -914,7 +914,7 @@ static XF86ModuleVersionInfo DRI2VersRec =
     MODINFOSTRING1,
     MODINFOSTRING2,
     XORG_VERSION_CURRENT,
-    1, 1, 0,
+    1, 2, 0,
     ABI_CLASS_EXTENSION,
     ABI_EXTENSION_VERSION,
     MOD_CLASS_NONE,
commit 60b6477f6dc005a1b052be8c5e5a549550a4aa88
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Thu Jan 14 17:18:28 2010 +0200

    dix/configure: remove null root cursor option
    
    The default behavior of the server is to start with an invisible root cursor.
    Be such cursor invisible or inexistent (null), in the end it doesn't matter -
    for the user. The content on screen will be the same. Besides, there's no
    difference, in terms of performance, whether such cursor is invisible or
    simply null. The paths that both take inside the server are roughly the same.
    
    Therefore create a null root cursor becomes irrelevant.
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>
    Acked-by: Peter Hutterer <peter.hutterer at who-t.net>
    Acked-by: Daniel Stone <daniel at fooishbar.org>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index 425db40..ec9442b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -572,9 +572,6 @@ AC_ARG_ENABLE(install-libxf86config,
 				[Install libxf86config (default: disabled)]),
 				[INSTALL_LIBXF86CONFIG=$enableval],
 				[INSTALL_LIBXF86CONFIG=no])
-AC_ARG_ENABLE(null-root-cursor, AS_HELP_STRING([--enable-null-root-cursor], [Use an empty root cursor (default: use core cursor)]),
-                                 [NULL_ROOT_CURSOR=$enableval],
-                                 [NULL_ROOT_CURSOR=no])
 AC_ARG_ENABLE(visibility,     AC_HELP_STRING([--enable-visibility], [Enable symbol visibility (default: auto)]),
 				[SYMBOL_VISIBILITY=$enableval],
 				[SYMBOL_VISIBILITY=auto])
@@ -1187,10 +1184,6 @@ AC_CHECK_FUNC(strncasecmp, [], AC_DEFINE([NEED_STRNCASECMP], 1,
 AC_CHECK_FUNC(strcasestr, [], AC_DEFINE([NEED_STRCASESTR], 1,
                                        [Do not have 'strcasestr'.]))
 
-if test "x$NULL_ROOT_CURSOR" = xyes; then
-        AC_DEFINE(NULL_ROOT_CURSOR, 1, [Use an empty root cursor])
-fi
-
 PKG_CHECK_MODULES([XDMCP], [xdmcp], [have_libxdmcp="yes"], [have_libxdmcp="no"])
 if test "x$have_libxdmcp" = xyes; then
 	AC_CHECK_LIB(Xdmcp, XdmcpWrap, [have_xdmcpwrap="yes"], [have_xdmcpwrap="no"], [$XDMCP_LIBS])
diff --git a/dix/cursor.c b/dix/cursor.c
index 324d733..5d9c8b0 100644
--- a/dix/cursor.c
+++ b/dix/cursor.c
@@ -487,26 +487,10 @@ CursorPtr
 CreateRootCursor(char *unused1, unsigned int unused2)
 {
     CursorPtr 	curs;
-#ifdef NULL_ROOT_CURSOR
-    CursorMetricRec cm;
-#else
     FontPtr 	cursorfont;
     int	err;
     XID		fontID;
-#endif
-
-#ifdef NULL_ROOT_CURSOR
-    cm.width = 0;
-    cm.height = 0;
-    cm.xhot = 0;
-    cm.yhot = 0;
 
-    AllocARGBCursor(NULL, NULL, NULL, &cm, 0, 0, 0, 0, 0, 0,
-		    &curs, serverClient, (XID)0);
-
-    if (curs == NullCursor)
-        return NullCursor;
-#else
     fontID = FakeClientID(0);
     err = OpenFont(serverClient, fontID, FontLoadAll | FontOpenSync,
 	(unsigned)strlen(defaultCursorFont), defaultCursorFont);
@@ -520,7 +504,6 @@ CreateRootCursor(char *unused1, unsigned int unused2)
     if (AllocGlyphCursor(fontID, 0, fontID, 1, 0, 0, 0, ~0, ~0, ~0,
 			 &curs, serverClient, (XID)0) != Success)
 	return NullCursor;
-#endif
 
     if (!AddResource(FakeClientID(0), RT_CURSOR, (pointer)curs))
 	return NullCursor;
diff --git a/include/dix-config.h.in b/include/dix-config.h.in
index 84c78db..e942dac 100644
--- a/include/dix-config.h.in
+++ b/include/dix-config.h.in
@@ -414,9 +414,6 @@
 /* Use only built-in fonts */
 #undef BUILTIN_FONTS
 
-/* Use an empty root cursor */
-#undef NULL_ROOT_CURSOR
-
 /* Have a monotonic clock from clock_gettime() */
 #undef MONOTONIC_CLOCK
 
commit b4baab90c0d98bef98d485682d4a69a327a380d6
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Jan 8 15:18:41 2010 +1000

    dix: EventToCore needs to copy the root window too.
    
    This value isn't actually set for normal events but it saves us some work
    for the record extension support.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/dix/eventconvert.c b/dix/eventconvert.c
index e25f3ee..878dba5 100644
--- a/dix/eventconvert.c
+++ b/dix/eventconvert.c
@@ -119,6 +119,7 @@ EventToCore(InternalEvent *event, xEvent *core)
                 core->u.keyButtonPointer.rootX = e->root_x;
                 core->u.keyButtonPointer.rootY = e->root_y;
                 core->u.keyButtonPointer.state = e->corestate;
+                core->u.keyButtonPointer.root = e->root;
                 EventSetKeyRepeatFlag(core, (e->type == ET_KeyPress && e->key_repeat));
             }
             break;
diff --git a/test/input.c b/test/input.c
index 2de55bc..63d1a18 100644
--- a/test/input.c
+++ b/test/input.c
@@ -153,6 +153,7 @@ static void dix_event_to_core(int type)
     int rc;
     int state;
     int detail;
+    const int ROOT_WINDOW_ID = 0x100;
 
     /* EventToCore memsets the event to 0 */
 #define test_event() \
@@ -165,7 +166,7 @@ static void dix_event_to_core(int type)
     g_assert(core.u.keyButtonPointer.state == state); \
     g_assert(core.u.keyButtonPointer.eventX == 0); \
     g_assert(core.u.keyButtonPointer.eventY == 0); \
-    g_assert(core.u.keyButtonPointer.root == 0); \
+    g_assert(core.u.keyButtonPointer.root == ROOT_WINDOW_ID); \
     g_assert(core.u.keyButtonPointer.event == 0); \
     g_assert(core.u.keyButtonPointer.child == 0); \
     g_assert(core.u.keyButtonPointer.sameScreen == FALSE);
@@ -181,6 +182,7 @@ static void dix_event_to_core(int type)
     ev.time     = time;
     ev.root_y   = x;
     ev.root_x   = y;
+    ev.root     = ROOT_WINDOW_ID;
     ev.corestate = state;
     ev.detail.key = detail;
 
commit 27fc98ecfed99fefd5c14388b4c6242f87281895
Author: Keith Packard <keithp at keithp.com>
Date:   Wed Jan 27 14:37:32 2010 -0800

    Revert "dix: EventToCore needs to copy the root window too."
    
    This reverts commit 0f2d297dedeff8bd227df4c498cc668b0e902344.
    
    Peter provided an updated patch which fixes the tests.

diff --git a/dix/eventconvert.c b/dix/eventconvert.c
index 878dba5..e25f3ee 100644
--- a/dix/eventconvert.c
+++ b/dix/eventconvert.c
@@ -119,7 +119,6 @@ EventToCore(InternalEvent *event, xEvent *core)
                 core->u.keyButtonPointer.rootX = e->root_x;
                 core->u.keyButtonPointer.rootY = e->root_y;
                 core->u.keyButtonPointer.state = e->corestate;
-                core->u.keyButtonPointer.root = e->root;
                 EventSetKeyRepeatFlag(core, (e->type == ET_KeyPress && e->key_repeat));
             }
             break;
commit 711e26466ae04ae93ff4c48d377d83d68a6320e9
Author: Jesse Barnes <jbarnes at virtuousgeek.org>
Date:   Mon Jan 25 09:21:51 2010 -0800

    DRI2: handle drawable destruction properly at DRI2SwapComplete time
    
    Simon reported an issue with kwin that turned out to be a general problem.  If
    a drawable goes away before its swap completes, we'll try to free it up.
    However, we free it improperly, which causes a server crash in
    DRI2DestroyDrawable.  Fix that up by splitting the free code out and calling
    it from DRI2SwapComplete.
    
    Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
    Reviewed-by: Michel Dänzer <michel at daenzer.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
index 3d0fa75..587a928 100644
--- a/hw/xfree86/dri2/dri2.c
+++ b/hw/xfree86/dri2/dri2.c
@@ -158,6 +158,31 @@ DRI2CreateDrawable(DrawablePtr pDraw)
     return Success;
 }
 
+static void
+DRI2FreeDrawable(DrawablePtr pDraw)
+{
+    DRI2DrawablePtr pPriv;
+    WindowPtr  	    pWin;
+    PixmapPtr	    pPixmap;
+
+    pPriv = DRI2GetDrawable(pDraw);
+    if (pPriv == NULL)
+	return;
+
+    xfree(pPriv);
+
+    if (pDraw->type == DRAWABLE_WINDOW)
+    {
+	pWin = (WindowPtr) pDraw;
+	dixSetPrivate(&pWin->devPrivates, dri2WindowPrivateKey, NULL);
+    }
+    else
+    {
+	pPixmap = (PixmapPtr) pDraw;
+	dixSetPrivate(&pPixmap->devPrivates, dri2PixmapPrivateKey, NULL);
+    }
+}
+
 static int
 find_attachment(DRI2DrawablePtr pPriv, unsigned attachment)
 {
@@ -508,7 +533,7 @@ DRI2SwapComplete(ClientPtr client, DrawablePtr pDraw, int frame,
     if (pPriv->refCount == 0) {
         xf86DrvMsg(pScreen->myNum, X_ERROR,
 		   "[DRI2] %s: bad drawable refcount\n", __func__);
-	xfree(pPriv);
+	DRI2FreeDrawable(pDraw);
 	return;
     }
 
@@ -729,8 +754,6 @@ DRI2DestroyDrawable(DrawablePtr pDraw)
 {
     DRI2ScreenPtr   ds = DRI2GetScreen(pDraw->pScreen);
     DRI2DrawablePtr pPriv;
-    WindowPtr  	    pWin;
-    PixmapPtr	    pPixmap;
 
     pPriv = DRI2GetDrawable(pDraw);
     if (pPriv == NULL)
@@ -753,18 +776,7 @@ DRI2DestroyDrawable(DrawablePtr pDraw)
      * actually free the priv yet.  We'll need it in the DRI2SwapComplete()
      * callback and we'll free it there once we're done. */
     if (!pPriv->swapsPending)
-	xfree(pPriv);
-
-    if (pDraw->type == DRAWABLE_WINDOW)
-    {
-	pWin = (WindowPtr) pDraw;
-	dixSetPrivate(&pWin->devPrivates, dri2WindowPrivateKey, NULL);
-    }
-    else
-    {
-	pPixmap = (PixmapPtr) pDraw;
-	dixSetPrivate(&pPixmap->devPrivates, dri2PixmapPrivateKey, NULL);
-    }
+	DRI2FreeDrawable(pDraw);
 }
 
 Bool
commit b68f0204a2e4fa9d8884cbdd84b6a5df21d6b36e
Author: Jesse Barnes <jbarnes at virtuousgeek.org>
Date:   Wed Jan 27 09:10:41 2010 -0800

    xserver: require libdri 7.8.0 to build
    
    We depend on new DRI interfaces now, so require them in configure.ac.
    
    Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index d2623af..425db40 100644
--- a/configure.ac
+++ b/configure.ac
@@ -773,7 +773,7 @@ REQUIRED_LIBS="xfont xau [pixman-1 >= 0.15.20]"
 dnl List of libraries that require a specific version
 LIBAPPLEWM="applewm >= 1.4"
 LIBDMX="dmx >= 1.0.99.1"
-LIBDRI="dri >= 7.1.0"
+LIBDRI="dri >= 7.8.0"
 LIBDRM="libdrm >= 2.3.0"
 LIBGL="gl >= 7.1.0"
 LIBXEXT="xext >= 1.0.99.4"
commit 003829072853546abd973266fe9b24d803f4f5cb
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Tue Jan 26 22:25:04 2010 -0800

    Avoid segfaults in XF86VidMode GammaRamp functions if randr_crtc is NULL
    
    Fixes crash when xscreensaver tries to use GammaRamp calls to fade out
    http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6915712
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/common/xf86cmap.c b/hw/xfree86/common/xf86cmap.c
index 08f557c..edd5ae9 100644
--- a/hw/xfree86/common/xf86cmap.c
+++ b/hw/xfree86/common/xf86cmap.c
@@ -1004,12 +1004,14 @@ xf86ChangeGammaRamp(
 	xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
 	RRCrtcPtr crtc = config->output[config->compat_output]->crtc->randr_crtc;
 
-	if (crtc->gammaSize != size)
-	    return BadValue;
+	if (crtc) {
+	    if (crtc->gammaSize != size)
+		return BadValue;
 
-	RRCrtcGammaSet(crtc, red, green, blue);
+	    RRCrtcGammaSet(crtc, red, green, blue);
 
-	return Success;
+	    return Success;
+	}
     }
 
     if(CMapScreenKey == NULL)
@@ -1077,7 +1079,8 @@ xf86GetGammaRampSize(ScreenPtr pScreen)
 	xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
 	RRCrtcPtr crtc = config->output[config->compat_output]->crtc->randr_crtc;
 
-	return crtc->gammaSize;
+	if (crtc)
+	    return crtc->gammaSize;
     }
 
     if(CMapScreenKey == NULL) return 0;
@@ -1106,17 +1109,19 @@ xf86GetGammaRamp(
 	xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
 	RRCrtcPtr crtc = config->output[config->compat_output]->crtc->randr_crtc;
 
-	if (crtc->gammaSize < size)
-	    return BadValue;
+	if (crtc) {
+	    if (crtc->gammaSize < size)
+		return BadValue;
 
-	if (!RRCrtcGammaGet(crtc))
-	    return BadImplementation;
+	    if (!RRCrtcGammaGet(crtc))
+		return BadImplementation;
 
-	memcpy(red, crtc->gammaRed, size * sizeof(*red));
-	memcpy(green, crtc->gammaGreen, size * sizeof(*green));
-	memcpy(blue, crtc->gammaBlue, size * sizeof(*blue));
+	    memcpy(red, crtc->gammaRed, size * sizeof(*red));
+	    memcpy(green, crtc->gammaGreen, size * sizeof(*green));
+	    memcpy(blue, crtc->gammaBlue, size * sizeof(*blue));
 
-	return Success;
+	    return Success;
+	}
     }
 
     if(CMapScreenKey == NULL) 
commit 19d03d4f49e08442f58cf02240e3e6bab04633d2
Author: Gaetan Nadon <memsize at videotron.ca>
Date:   Tue Jan 26 20:15:49 2010 -0500

    doc: finish the removal of SecurityPolicy file man pages
    
    The variable was unassigned  but all the code was left in.
    
    Signed-off-by: Gaetan Nadon <memsize at videotron.ca>
    Reviewed-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/doc/Makefile.am b/doc/Makefile.am
index d3911c9..bee64b6 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -1,35 +1,24 @@
-appmandir = $(APP_MAN_DIR)
-filemandir = $(FILE_MAN_DIR)
 
 # Xserver.man covers options generic to all X servers built in this tree
 # (i.e. those handled in the os/utils.c options processing instead of in
 #  the DDX-level options processing)
+appmandir = $(APP_MAN_DIR)
 appman_PRE = Xserver.man.pre
-fileman_PRE =
 
 appman_PROCESSED = $(appman_PRE:man.pre=man)
-fileman_PROCESSED = $(fileman_PRE:man.pre=man)
-
 appman_DATA = $(appman_PRE:man.pre=@APP_MAN_SUFFIX@)
-fileman_DATA = $(fileman_PRE:man.pre=@FILE_MAN_SUFFIX@)
-
-BUILT_SOURCES = $(appman_PROCESSED) $(fileman_PROCESSED)
 
-CLEANFILES = $(appman_PROCESSED) $(appman_DATA) \
-		$(fileman_PROCESSED) $(fileman_DATA)
+BUILT_SOURCES = $(appman_PROCESSED)
+CLEANFILES = $(appman_PROCESSED) $(appman_DATA)
 
 include $(top_srcdir)/cpprules.in
 
 .man.$(APP_MAN_SUFFIX):
 	cp $< $@
 
-.man.$(FILE_MAN_SUFFIX):
-	cp $< $@
-
 EXTRAMANDEFS = -D__default_font_path__="`echo $(COMPILEDDEFAULTFONTPATH) | sed -e 's/,/, /g'`"
 
 # Docs about X server internals that we ship with source but don't install
 DEVEL_DOCS = smartsched
 
-
 EXTRA_DIST = $(DEVEL_DOCS) $(appman_PRE) $(fileman_PRE)
commit 7962c8f78964d460c76f76dda2795b971a8c2a94
Author: Gaetan Nadon <memsize at videotron.ca>
Date:   Tue Jan 26 20:02:13 2010 -0500

    man: add missing __datadir__ for Xserver XWin man pages
    
    The man pages display __datadir__/fonts/X11/... because __datadir__
    is missing in cpprules.in. Problem was introduced in commit:
    b54bc14ce0ae38c4863794bc3096ca86cdb23908
    when replacing __projectroot__ in the previous font path.
    
    Reviewed-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Signed-off-by: Gaetan Nadon <memsize at videotron.ca>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/cpprules.in b/cpprules.in
index 7219e36..2e0856b 100644
--- a/cpprules.in
+++ b/cpprules.in
@@ -36,6 +36,7 @@ MANDEFS = \
 	-D__adminmansuffix__=$(ADMIN_MAN_SUFFIX) \
 	-D__mandir__=$(mandir) \
 	-D__projectroot__=$(prefix) \
+	-D__datadir__=$(datadir) \
 	-D__xconfigfile__=$(__XCONFIGFILE__) \
 	-D__xconfigdir__=$(__XCONFIGDIR__) \
 	-D__xkbdir__=$(XKB_BASE_DIRECTORY) \
commit d2322b6309bf15a45002b42e7e6ba3d6b5bfa932
Author: Kok, Auke <auke-jan.h.kok at intel.com>
Date:   Wed Jan 27 11:34:45 2010 -0800

    xserver: Add timestamps to logfile output.
    
    Add timestamps in seconds derived from clock_monotonic to the log
    file.
    
    Signed-off-by: Auke Kok <auke-jan.h.kok at intel.com>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/os/log.c b/os/log.c
index e20b6d3..03dc11f 100644
--- a/os/log.c
+++ b/os/log.c
@@ -258,6 +258,14 @@ LogVWrite(int verb, const char *f, va_list args)
 {
     static char tmpBuffer[1024];
     int len = 0;
+    static Bool newline = TRUE;
+
+    if (newline) {
+	sprintf(tmpBuffer, "[%10.3f] ", GetTimeInMillis() / 1000.0);
+	len = strlen(tmpBuffer);
+	if (logFile)
+	    fwrite(tmpBuffer, len, 1, logFile);
+    }
 
     /*
      * Since a va_list can only be processed once, write the string to a
@@ -268,6 +276,7 @@ LogVWrite(int verb, const char *f, va_list args)
 	vsnprintf(tmpBuffer, sizeof(tmpBuffer), f, args);
 	len = strlen(tmpBuffer);
     }
+    newline = (tmpBuffer[len-1] == '\n');
     if ((verb < 0 || logVerbosity >= verb) && len > 0)
 	fwrite(tmpBuffer, len, 1, stderr);
     if ((verb < 0 || logFileVerbosity >= verb) && len > 0) {
commit 0b21a0416b4cb2c32da5e3fda05a0682eb97d56e
Merge: 1e6fd65... 837bd2b...
Author: Keith Packard <keithp at keithp.com>
Date:   Wed Jan 27 14:14:15 2010 -0800

    Merge remote branch 'alanc/master'

commit 1e6fd65d0b95260253828678131885a4ec21c594
Author: Michael Vogt <mvo at ubuntu.com>
Date:   Mon Jan 25 18:41:20 2010 +0100

    xfree86/modes: only call gamma_set if its non NULL
    
    I ran accross a crash with xf86-video-nv-2.1.15 [1] and xserver
    1.7.3.901. It looks like the problem is that gamma_set is called even
    if that is NULL.
    
    [1] https://launchpad.net/bugs/494627
    
    Reviewed-By: Matthias Hopf <mhopf at suse.de>
    Signed-off-by: Julien Cristau <jcristau at debian.org>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index d015c6a..573fe96 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -354,7 +354,7 @@ xf86CrtcSetModeTransform (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotati
     }
 
     /* Only upload when needed, to avoid unneeded delays. */
-    if (!crtc->active)
+    if (!crtc->active && crtc->funcs->gamma_set)
 	crtc->funcs->gamma_set(crtc, crtc->gamma_red, crtc->gamma_green,
                                             crtc->gamma_blue, crtc->gamma_size);
 
commit 0688dca044f966abc3da667f6d4e79e7cf47f996
Author: Eric Anholt <eric at anholt.net>
Date:   Thu Jan 21 10:31:04 2010 -0800

    dri2: Fix order of operations issue in __glXdriSwapEvent test.
    
    Clients would have received swap events regardless of asking for it.
    
    Signed-off-by: Eric Anholt <eric at anholt.net>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/glx/glxdri2.c b/glx/glxdri2.c
index 69fd39b..0f998de 100644
--- a/glx/glxdri2.c
+++ b/glx/glxdri2.c
@@ -174,7 +174,7 @@ __glXdriSwapEvent(ClientPtr client, void *data, int type, CARD64 ust,
     __GLXdrawable *drawable = data;
     xGLXBufferSwapComplete wire;
 
-    if (!drawable->eventMask & GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK)
+    if (!(drawable->eventMask & GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK))
 	return;
 
     wire.type = __glXEventBase + GLX_BufferSwapComplete;
commit a6bd5d2e482a5aa84acb3d4932e2a166d8670ef1
Author: Pierre-Loup A. Griffais <pgriffais at nvidia.com>
Date:   Wed Jan 27 14:03:03 2010 -0800

    Fix source pictures getting random transforms after 2d6a8f668342a5190cdf43b5.
    
    *xoff and *yoff were uninitialized for source-only pictures.x
    
    Signed-off-by: Pierre-Loup A. Griffais <pgriffais at nvidia.com>
    Reviewed-by: Aaron Plattner <aplattner at nvidia.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/fb/fbpict.c b/fb/fbpict.c
index 251754b..dddfce8 100644
--- a/fb/fbpict.c
+++ b/fb/fbpict.c
@@ -452,6 +452,7 @@ image_from_pict (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)
commit c3395158678aaab9dca5fc6a812cbe715ddc0e1a
Author: Gaetan Nadon <memsize at videotron.ca>
Date:   Fri Jan 15 14:13:18 2010 -0500

    packaging: provide a default README file #24206
    
    All modules should have a README file.
    The bottom URL section is found in all X.Org README files.
    
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Gaetan Nadon <memsize at videotron.ca>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/README b/README
new file mode 100644
index 0000000..b2499a0
--- /dev/null
+++ b/README
@@ -0,0 +1,38 @@
+					X Server
+
+The X server accepts requests from client applications to create windows,
+which are (normally rectangular) "virtual screens" that the client program
+can draw into.
+
+Windows are then composed on the actual screen by the X server
+(or by a separate composite manager) as directed by the window manager,
+which usually communicates with the user via graphical controls such as buttons
+and draggable titlebars and borders.
+
+For a comprehensive overview of X Server and X Window System, consult the
+following article:
+http://en.wikipedia.org/wiki/X_server
+
+All questions regarding this software should be directed at the
+Xorg mailing list:
+
+        http://lists.freedesktop.org/mailman/listinfo/xorg
+
+Please submit bug reports to the Xorg bugzilla:
+
+        https://bugs.freedesktop.org/enter_bug.cgi?product=xorg
+
+The master development code repository can be found at:
+
+        git://anongit.freedesktop.org/git/xorg/xserver
+
+        http://cgit.freedesktop.org/xorg/xserver
+
+For patch submission instructions, see:
+
+	http://www.x.org/wiki/Development/Documentation/SubmittingPatches
+
+For more information on the git code manager, see:
+
+        http://wiki.x.org/wiki/GitPage
+
commit f311f2d047120fb816897444d2101465ff5189db
Author: Aaron Plattner <aplattner at nvidia.com>
Date:   Wed Jan 13 11:35:52 2010 -0800

    DRI2: Allow multiple driver names.
    
    Each driver type (e.g. DRI2DriverDRI or DRI2DriverVDPAU) can have a name in the
    driverNames array in DRI2InfoRec.  DRI2Connect returns the name for the driver
    specified by driverType.  Also print names of supported drivers in
    DRI2ScreenInit.
    
    Signed-off-by: Aaron Plattner <aplattner at nvidia.com>
    Reviewed-by: Kristian Høgsberg <krh at bitplanet.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
index 3db826e..3d0fa75 100644
--- a/hw/xfree86/dri2/dri2.c
+++ b/hw/xfree86/dri2/dri2.c
@@ -70,7 +70,8 @@ typedef struct _DRI2Drawable {
 typedef struct _DRI2Screen *DRI2ScreenPtr;
 
 typedef struct _DRI2Screen {
-    const char			*driverName;
+    unsigned int		 numDrivers;
+    const char			**driverNames;
     const char			*deviceName;
     int				 fd;
     unsigned int		 lastSequence;
@@ -772,14 +773,12 @@ DRI2Connect(ScreenPtr pScreen, unsigned int driverType, int *fd,
 {
     DRI2ScreenPtr ds = DRI2GetScreen(pScreen);
 
-    if (ds == NULL)
+    if (ds == NULL || driverType >= ds->numDrivers ||
+	    !ds->driverNames[driverType])
 	return FALSE;
 
-    if (driverType != DRI2DriverDRI)
-	return BadValue;
-
     *fd = ds->fd;
-    *driverName = ds->driverName;
+    *driverName = ds->driverNames[driverType];
     *deviceName = ds->deviceName;
 
     return TRUE;
@@ -800,6 +799,11 @@ Bool
 DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info)
 {
     DRI2ScreenPtr ds;
+    const char* driverTypeNames[] = {
+	"DRI", /* DRI2DriverDRI */
+	"VDPAU", /* DRI2DriverVDPAU */
+    };
+    unsigned int i;
 
     if (info->version < 3)
 	return FALSE;
@@ -815,7 +819,6 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info)
 	return FALSE;
 
     ds->fd	       = info->fd;
-    ds->driverName     = info->driverName;
     ds->deviceName     = info->deviceName;
 
     ds->CreateBuffer   = info->CreateBuffer;
@@ -828,9 +831,35 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info)
 	ds->GetMSC = info->GetMSC;
     }
 
+    if (info->version == 3 || info->numDrivers == 0) {
+	/* Driver too old: use the old-style driverName field */
+	ds->numDrivers = 1;
+	ds->driverNames = xalloc(sizeof(*ds->driverNames));
+	if (!ds->driverNames) {
+	    xfree(ds);
+	    return FALSE;
+	}
+	ds->driverNames[0] = info->driverName;
+    } else {
+	ds->numDrivers = info->numDrivers;
+	ds->driverNames = xalloc(info->numDrivers * sizeof(*ds->driverNames));
+	if (!ds->driverNames) {
+	    xfree(ds);
+	    return FALSE;
+	}
+	memcpy(ds->driverNames, info->driverNames,
+	       info->numDrivers * sizeof(*ds->driverNames));
+    }
+
     dixSetPrivate(&pScreen->devPrivates, dri2ScreenPrivateKey, ds);
 
     xf86DrvMsg(pScreen->myNum, X_INFO, "[DRI2] Setup complete\n");
+    for (i = 0; i < sizeof(driverTypeNames) / sizeof(driverTypeNames[0]); i++) {
+	if (i < ds->numDrivers && ds->driverNames[i]) {
+	    xf86DrvMsg(pScreen->myNum, X_INFO, "[DRI2]   %s driver: %s\n",
+		       driverTypeNames[i], ds->driverNames[i]);
+	}
+    }
 
     return TRUE;
 }
@@ -840,6 +869,7 @@ DRI2CloseScreen(ScreenPtr pScreen)
 {
     DRI2ScreenPtr ds = DRI2GetScreen(pScreen);
 
+    xfree(ds->driverNames);
     xfree(ds);
     dixSetPrivate(&pScreen->devPrivates, dri2ScreenPrivateKey, NULL);
 }
diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h
index dd59297..1c8626b 100644
--- a/hw/xfree86/dri2/dri2.h
+++ b/hw/xfree86/dri2/dri2.h
@@ -164,9 +164,18 @@ typedef struct {
     DRI2DestroyBufferProcPtr	DestroyBuffer;
     DRI2CopyRegionProcPtr	CopyRegion;
     DRI2WaitProcPtr		Wait;
+
+    /* added in version 4 */
+
     DRI2ScheduleSwapProcPtr	ScheduleSwap;
     DRI2GetMSCProcPtr		GetMSC;
     DRI2ScheduleWaitMSCProcPtr	ScheduleWaitMSC;
+
+    /* number of drivers in the driverNames array */
+    unsigned int numDrivers;
+    /* array of driver names, indexed by DRI2Driver* driver types */
+    /* a name of NULL means that driver is not supported */
+    const char * const *driverNames;
 }  DRI2InfoRec, *DRI2InfoPtr;
 
 extern _X_EXPORT int DRI2EventBase;
commit f57bc0ede8e018c7e264b917927c42a018cd1d5a
Author: Christian Zander <chzander at nvidia.com>
Date:   Mon Jan 11 12:29:07 2010 -0800

    x86emu: Respect the LEA 67h address size prefix.
    
    Signed-off-by: Christian Zander <chzander at nvidia.com>
    Signed-off-by: Aaron Plattner <aplattner at nvidia.com>
    Tested-by: Tiago Vignatti <tiago.vignatti at nokia.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/x86emu/ops.c b/hw/xfree86/x86emu/ops.c
index 37ae2c9..21a0347 100644
--- a/hw/xfree86/x86emu/ops.c
+++ b/hw/xfree86/x86emu/ops.c
@@ -6567,42 +6567,62 @@ Handles opcode 0x8d
 static void x86emuOp_lea_word_R_M(u8 X86EMU_UNUSED(op1))
 {
     int mod, rl, rh;
-    u16 *srcreg;
     uint destoffset;
 
-/*
- * TODO: Need to handle address size prefix!
- *
- * lea  eax,[eax+ebx*2] ??
- */
-    
     START_OF_INSTR();
     DECODE_PRINTF("LEA\t");
     FETCH_DECODE_MODRM(mod, rh, rl);
     switch (mod) {
     case 0:
-        srcreg = DECODE_RM_WORD_REGISTER(rh);
-        DECODE_PRINTF(",");
-        destoffset = decode_rm00_address(rl);
-        DECODE_PRINTF("\n");
-        TRACE_AND_STEP();
-        *srcreg = (u16)destoffset;
+        if (M.x86.mode & SYSMODE_PREFIX_ADDR) {
+            u32 *srcreg = DECODE_RM_LONG_REGISTER(rh);
+            DECODE_PRINTF(",");
+            destoffset = decode_rm00_address(rl);
+            DECODE_PRINTF("\n");
+            TRACE_AND_STEP();
+            *srcreg = (u32)destoffset;
+        } else {
+            u16 *srcreg = DECODE_RM_WORD_REGISTER(rh);
+            DECODE_PRINTF(",");
+            destoffset = decode_rm00_address(rl);
+            DECODE_PRINTF("\n");
+            TRACE_AND_STEP();
+            *srcreg = (u16)destoffset;
+        }
         break;
     case 1:
-        srcreg = DECODE_RM_WORD_REGISTER(rh);
-        DECODE_PRINTF(",");
-        destoffset = decode_rm01_address(rl);
-        DECODE_PRINTF("\n");
-        TRACE_AND_STEP();
-        *srcreg = (u16)destoffset;
+        if (M.x86.mode & SYSMODE_PREFIX_ADDR) {
+            u32 *srcreg = DECODE_RM_LONG_REGISTER(rh);
+            DECODE_PRINTF(",");
+            destoffset = decode_rm01_address(rl);
+            DECODE_PRINTF("\n");
+            TRACE_AND_STEP();
+            *srcreg = (u32)destoffset;
+        } else {
+            u16 *srcreg = DECODE_RM_WORD_REGISTER(rh);
+            DECODE_PRINTF(",");
+            destoffset = decode_rm01_address(rl);
+            DECODE_PRINTF("\n");
+            TRACE_AND_STEP();
+            *srcreg = (u16)destoffset;
+        }
         break;
     case 2:
-        srcreg = DECODE_RM_WORD_REGISTER(rh);
-        DECODE_PRINTF(",");
-        destoffset = decode_rm10_address(rl);
-        DECODE_PRINTF("\n");
-        TRACE_AND_STEP();
-        *srcreg = (u16)destoffset;
+        if (M.x86.mode & SYSMODE_PREFIX_ADDR) {
+            u32 *srcreg = DECODE_RM_LONG_REGISTER(rh);
+            DECODE_PRINTF(",");
+            destoffset = decode_rm10_address(rl);
+            DECODE_PRINTF("\n");
+            TRACE_AND_STEP();
+            *srcreg = (u32)destoffset;
+        } else {
+            u16 *srcreg = DECODE_RM_WORD_REGISTER(rh);
+            DECODE_PRINTF(",");
+            destoffset = decode_rm10_address(rl);
+            DECODE_PRINTF("\n");
+            TRACE_AND_STEP();
+            *srcreg = (u16)destoffset;
+        }
         break;
     case 3:                     /* register to register */
         /* undefined.  Do nothing. */
commit 837bd2bbc02b893f96861b48c1f02b7b8e7e3e48
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Fri Oct 16 22:32:15 2009 -0700

    Remove unbalanced ( from failure to move log error
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Reviewed-by: Dan Nicholson <dbn.lists at gmail.com>

diff --git a/os/log.c b/os/log.c
index 08fa1f2..e20b6d3 100644
--- a/os/log.c
+++ b/os/log.c
@@ -187,7 +187,7 @@ LogInit(const char *fname, const char *backup)
 		sprintf(oldLog, "%s%s", logFileName, suffix);
 		free(suffix);
 		if (rename(logFileName, oldLog) == -1) {
-		    FatalError("Cannot move old log file (\"%s\" to \"%s\"\n",
+		    FatalError("Cannot move old log file \"%s\" to \"%s\"\n",
 			       logFileName, oldLog);
 		}
 		free(oldLog);
commit 138d4c1670ebab435bf00627c97098a3a54b81a6
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Sat Jan 16 21:03:00 2010 -0800

    glx: Sun compilers now support some gcc __attribute__ values
    
    Sun cc 5.9 and later (__SUNPRO_C >= 0x590) support __attribute__
    calls for aligned, always_inline, noinline, pure, const, and malloc.
    
    This commit consists of the related updates to files that were
    regenerated by gl_XML.py in mesa after adding the __SUNPRO_C checks to it
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Signed-off-by: Brian Paul <brianp at vmware.com>

diff --git a/glx/glapitemp.h b/glx/glapitemp.h
index 09259f4..ddd67af 100644
--- a/glx/glapitemp.h
+++ b/glx/glapitemp.h
@@ -27,7 +27,7 @@
  */
 
 
-#  if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__)
+#  if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))) && defined(__ELF__)
 #    define HIDDEN  __attribute__((visibility("hidden")))
 #  else
 #    define HIDDEN
diff --git a/glx/indirect_dispatch.h b/glx/indirect_dispatch.h
index 014e417..6cc322c 100644
--- a/glx/indirect_dispatch.h
+++ b/glx/indirect_dispatch.h
@@ -28,7 +28,7 @@
 #if !defined( _INDIRECT_DISPATCH_H_ )
 #  define _INDIRECT_DISPATCH_H_
 
-#  if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__)
+#  if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))) && defined(__ELF__)
 #    define HIDDEN  __attribute__((visibility("hidden")))
 #  else
 #    define HIDDEN
diff --git a/glx/indirect_reqsize.h b/glx/indirect_reqsize.h
index 26211ee..05ad591 100644
--- a/glx/indirect_reqsize.h
+++ b/glx/indirect_reqsize.h
@@ -28,13 +28,13 @@
 #if !defined( _INDIRECT_REQSIZE_H_ )
 #  define _INDIRECT_REQSIZE_H_
 
-#  if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__)
+#  if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))) && defined(__ELF__)
 #    define HIDDEN  __attribute__((visibility("hidden")))
 #  else
 #    define HIDDEN
 #  endif
 
-#  if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+#  if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
 #    define PURE __attribute__((pure))
 #  else
 #    define PURE
diff --git a/glx/indirect_size.h b/glx/indirect_size.h
index 9ba0bd6..af0919f 100644
--- a/glx/indirect_size.h
+++ b/glx/indirect_size.h
@@ -36,7 +36,7 @@
  * \author Ian Romanick <idr at us.ibm.com>
  */
 
-#  if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+#  if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
 #    define PURE __attribute__((pure))
 #  else
 #    define PURE
@@ -48,7 +48,7 @@
 #    define FASTCALL
 #  endif
 
-#  if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__)
+#  if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))) && defined(__ELF__)
 #    define INTERNAL  __attribute__((visibility("internal")))
 #  else
 #    define INTERNAL
diff --git a/glx/indirect_size_get.c b/glx/indirect_size_get.c
index 80f81de..475aa58 100644
--- a/glx/indirect_size_get.c
+++ b/glx/indirect_size_get.c
@@ -32,7 +32,7 @@
 #include "indirect_util.h"
 #include "indirect_size.h"
 
-#  if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+#  if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
 #    define PURE __attribute__((pure))
 #  else
 #    define PURE
@@ -44,7 +44,7 @@
 #    define FASTCALL
 #  endif
 
-#  if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__)
+#  if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))) && defined(__ELF__)
 #    define INTERNAL  __attribute__((visibility("internal")))
 #  else
 #    define INTERNAL
diff --git a/glx/indirect_size_get.h b/glx/indirect_size_get.h
index 4fcb55b..378baa6 100644
--- a/glx/indirect_size_get.h
+++ b/glx/indirect_size_get.h
@@ -36,7 +36,7 @@
  * \author Ian Romanick <idr at us.ibm.com>
  */
 
-#  if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+#  if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
 #    define PURE __attribute__((pure))
 #  else
 #    define PURE
@@ -48,7 +48,7 @@
 #    define FASTCALL
 #  endif
 
-#  if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__)
+#  if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))) && defined(__ELF__)
 #    define INTERNAL  __attribute__((visibility("internal")))
 #  else
 #    define INTERNAL
commit 79e7b0b875634d0f9e1a95232a4e38adf617bc14
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Sat Jan 16 10:45:32 2010 -0800

    Only enable kdrive input drivers on Linux by default
    
    Fixes build on non-Linux platforms by restoring the defaults to
    where they were before commit 6c2b3a4247d10a50699ffa6abb643c5e959eefa8,
    to only enable the Linux kbd, mouse & evdev drivers when building
    on Linux platforms.
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Reviewed-by: Mikhail Gusarov <dottedmag at dottedmag.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index 8c1085b..a187452 100644
--- a/configure.ac
+++ b/configure.ac
@@ -641,9 +641,9 @@ AC_ARG_ENABLE(xephyr,         AS_HELP_STRING([--enable-xephyr], [Build the kdriv
 AC_ARG_ENABLE(xfake,          AS_HELP_STRING([--enable-xfake], [Build the kdrive 'fake' server (default: auto)]), [XFAKE=$enableval], [XFAKE=auto])
 AC_ARG_ENABLE(xfbdev,         AS_HELP_STRING([--enable-xfbdev], [Build the kdrive framebuffer device server (default: auto)]), [XFBDEV=$enableval], [XFBDEV=auto])
 dnl kdrive options
-AC_ARG_ENABLE(kdrive-kbd,     AS_HELP_STRING([--enable-kdrive-kbd], [Build kbd driver for kdrive (default: enabled)]), [KDRIVE_KBD=$enableval], [KDRIVE_KBD=yes])
-AC_ARG_ENABLE(kdrive-mouse,   AC_HELP_STRING([--enable-kdrive-mouse], [Build mouse driver for kdrive (default: enabled)]), [KDRIVE_MOUSE=$enableval], [KDRIVE_MOUSE=yes])
-AC_ARG_ENABLE(kdrive-evdev,   AC_HELP_STRING([--enable-kdrive-evdev], [Build evdev driver for kdrive (default: enabled)]), [KDRIVE_EVDEV=$enableval], [KDRIVE_EVDEV=yes])
+AC_ARG_ENABLE(kdrive-kbd,     AS_HELP_STRING([--enable-kdrive-kbd], [Build kbd driver for kdrive (default: auto)]), [KDRIVE_KBD=$enableval], [KDRIVE_KBD=auto])
+AC_ARG_ENABLE(kdrive-mouse,   AC_HELP_STRING([--enable-kdrive-mouse], [Build mouse driver for kdrive (default: auto)]), [KDRIVE_MOUSE=$enableval], [KDRIVE_MOUSE=auto])
+AC_ARG_ENABLE(kdrive-evdev,   AC_HELP_STRING([--enable-kdrive-evdev], [Build evdev driver for kdrive (default: auto)]), [KDRIVE_EVDEV=$enableval], [KDRIVE_EVDEV=auto])
 
 
 dnl chown/chmod to be setuid root as part of build
@@ -1995,9 +1995,6 @@ XEPHYR_LIBS=
 XEPHYR_INCS=
 
 AM_CONDITIONAL(KDRIVE, [test x$KDRIVE = xyes])
-AM_CONDITIONAL(KDRIVE_KBD, test "x$KDRIVE_KBD" = xyes)
-AM_CONDITIONAL(KDRIVE_EVDEV, test "x$KDRIVE_EVDEV" = xyes)
-AM_CONDITIONAL(KDRIVE_MOUSE, test "x$KDRIVE_MOUSE" = xyes)
 
 if test "$KDRIVE" = yes; then
     AC_DEFINE(KDRIVESERVER,1,[Build Kdrive X server])
@@ -2072,6 +2069,26 @@ if test "$KDRIVE" = yes; then
 	*linux*)
 	    KDRIVE_OS_LIB='$(top_builddir)/hw/kdrive/linux/liblinux.la'
             KDRIVELINUX=yes
+	    if test "x$KDRIVE_EVDEV" = xauto; then
+		KDRIVE_EVDEV=yes
+	    fi
+	    if test "x$KDRIVE_KBD" = xauto; then
+		KDRIVE_KBD=yes
+	    fi
+	    if test "x$KDRIVE_MOUSE" = xauto; then
+		KDRIVE_MOUSE=yes
+	    fi
+	    ;;
+	*)
+	    if test "x$KDRIVE_EVDEV" = xauto; then
+		KDRIVE_EVDEV=no
+	    fi
+	    if test "x$KDRIVE_KBD" = xauto; then
+		KDRIVE_KBD=no
+	    fi
+	    if test "x$KDRIVE_MOUSE" = xauto; then
+		KDRIVE_MOUSE=no
+	    fi
 	    ;;
     esac
     KDRIVE_STUB_LIB='$(top_builddir)/hw/kdrive/src/libkdrivestubs.la'
@@ -2090,6 +2107,9 @@ AC_SUBST([KDRIVE_PURE_LIBS])
 AC_SUBST([KDRIVE_LOCAL_LIBS])
 AC_SUBST([KDRIVE_LIBS])
 AM_CONDITIONAL(KDRIVELINUX, [test "x$KDRIVELINUX" = xyes])
+AM_CONDITIONAL(KDRIVE_EVDEV, [test "x$KDRIVE_EVDEV" = xyes])
+AM_CONDITIONAL(KDRIVE_KBD,   [test "x$KDRIVE_KBD" = xyes])
+AM_CONDITIONAL(KDRIVE_MOUSE, [test "x$KDRIVE_MOUSE" = xyes])
 AM_CONDITIONAL(TSLIB, [test "x$HAVE_TSLIB" = xyes])
 AM_CONDITIONAL(KDRIVEFBDEV, [test "x$XFBDEV" = xyes])
 AM_CONDITIONAL(XEPHYR, [test "x$KDRIVE" = xyes && test "x$XEPHYR" = xyes])
commit 39ab474197bdad7d8e9ef496df2d61cbea39d370
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Tue Dec 15 19:07:38 2009 -0800

    Move OS-specific VT key handler code from common to os-support
    
    Adds new function xf86Activate to the OS-specific *VTsw*.c files
    and calls it from xf86ProcessActionEvent
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Tested-by: Tiago Vignatti <tiago.vignatti at nokia.com> (GNU/Linux)

diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c
index 8e6a15b..ebf03bf 100644
--- a/hw/xfree86/common/xf86Events.c
+++ b/hw/xfree86/common/xf86Events.c
@@ -194,55 +194,40 @@ xf86ProcessActionEvent(ActionEvent action, void *arg)
 	if (!xf86Info.dontZoom)
 	    xf86ZoomViewport(xf86Info.currentScreen, -1);
 	break;
-#if defined(VT_ACTIVATE)
     case ACTION_SWITCHSCREEN:
 	if (VTSwitchEnabled && !xf86Info.dontVTSwitch && arg) {
 	    int vtno = *((int *) arg);
-#if defined(__SCO__) || defined(__UNIXWARE__)
-	    vtno--;
-#endif
-#if defined(sun)
-	    if (vtno == xf86Info.vtno) {
-		break;
-	    } else {
-		struct vt_stat state;
-		if (ioctl(xf86Info.consoleFd, VT_GETSTATE, &state) < 0)
-			break;
-
-		if ((state.v_state & (1 << vtno)) == 0)
-			break;
-	    }
 
-	    xf86Info.vtRequestsPending = TRUE;
-	    xf86Info.vtPendingNum = vtno;
-#else
-	    if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, vtno) < 0)
-		ErrorF("Failed to switch consoles (%s)\n", strerror(errno));
-#endif
+	    if (vtno != xf86Info.vtno) {
+		if (!xf86VTActivate(vtno)) {
+		    ErrorF("Failed to switch from vt%02d to vt%02d: %s\n",
+			   xf86Info.vtno, vtno, strerror(errno));
+		}
+	    }
 	}
 	break;
     case ACTION_SWITCHSCREEN_NEXT:
 	if (VTSwitchEnabled && !xf86Info.dontVTSwitch) {
-#if defined(__SCO__) || defined(__UNIXWARE__)
-	    if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, xf86Info.vtno) < 0)
-#else
-	    if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, xf86Info.vtno + 1) < 0)
-#endif
-#if defined (__SCO__) || (defined(sun) && defined (__i386__) && defined (SVR4)) || defined(__UNIXWARE__)
-		if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, 0) < 0)
-#else
-		if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, 1) < 0)
-#endif
-		    ErrorF("Failed to switch consoles (%s)\n", strerror(errno));
+	    if (!xf86VTActivate(xf86Info.vtno + 1)) {
+		/* If first try failed, assume this is the last VT and
+		 * try wrapping around to the first vt.
+		 */
+		if (!xf86VTActivate(1)) {
+		    ErrorF("Failed to switch from vt%02d to next vt: %s\n",
+			   xf86Info.vtno, strerror(errno));
+		}
+	    }
 	}
 	break;
     case ACTION_SWITCHSCREEN_PREV:
 	if (VTSwitchEnabled && !xf86Info.dontVTSwitch && xf86Info.vtno > 0) {
-	    if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, xf86Info.vtno - 1) < 0)
-		ErrorF("Failed to switch consoles (%s)\n", strerror(errno));
+	    if (!xf86VTActivate(xf86Info.vtno - 1)) {
+		/* Don't know what the maximum VT is, so can't wrap around */
+		ErrorF("Failed to switch from vt%02d to previous vt: %s\n",
+		       xf86Info.vtno, strerror(errno));
+	    }
 	}
 	break;
-#endif
     default:
 	break;
     }
diff --git a/hw/xfree86/os-support/bsd/bsd_VTsw.c b/hw/xfree86/os-support/bsd/bsd_VTsw.c
index 476a0e9..4842be5 100644
--- a/hw/xfree86/os-support/bsd/bsd_VTsw.c
+++ b/hw/xfree86/os-support/bsd/bsd_VTsw.c
@@ -92,3 +92,12 @@ xf86VTSwitchTo()
 #endif
 	return(TRUE);
 }
+
+Bool
+xf86VTActivate(int vtno)
+{
+	if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, vtno) < 0) {
+		return(FALSE);
+	}
+	return(TRUE);
+}
diff --git a/hw/xfree86/os-support/sco/VTsw_sco.c b/hw/xfree86/os-support/sco/VTsw_sco.c
index d126e78..0a59fb9 100644
--- a/hw/xfree86/os-support/sco/VTsw_sco.c
+++ b/hw/xfree86/os-support/sco/VTsw_sco.c
@@ -115,3 +115,13 @@ xf86VTSwitchTo(void)
     return TRUE;
   }
 }
+
+Bool
+xf86VTActivate(int vtno)
+{
+	if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, vtno - 1) < 0) {
+		return(FALSE);
+	}
+
+	return(TRUE);
+}
diff --git a/hw/xfree86/os-support/shared/VTsw_noop.c b/hw/xfree86/os-support/shared/VTsw_noop.c
index 78cbe0e..3425840 100644
--- a/hw/xfree86/os-support/shared/VTsw_noop.c
+++ b/hw/xfree86/os-support/shared/VTsw_noop.c
@@ -52,3 +52,9 @@ xf86VTSwitchTo(void)
 {
 	return(TRUE);
 }
+
+Bool
+xf86VTActivate(int vtno)
+{
+	return(TRUE);
+}
diff --git a/hw/xfree86/os-support/shared/VTsw_usl.c b/hw/xfree86/os-support/shared/VTsw_usl.c
index 9308640..393f1c0 100644
--- a/hw/xfree86/os-support/shared/VTsw_usl.c
+++ b/hw/xfree86/os-support/shared/VTsw_usl.c
@@ -88,3 +88,14 @@ xf86VTSwitchTo(void)
 		return(TRUE);
 	}
 }
+
+Bool
+xf86VTActivate(int vtno)
+{
+#ifdef VT_ACTIVATE
+	if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, vtno) < 0) {
+		return(FALSE);
+	}
+#endif
+	return(TRUE);
+}
diff --git a/hw/xfree86/os-support/solaris/sun_VTsw.c b/hw/xfree86/os-support/solaris/sun_VTsw.c
index 7f4e08e..1e2774b 100644
--- a/hw/xfree86/os-support/solaris/sun_VTsw.c
+++ b/hw/xfree86/os-support/solaris/sun_VTsw.c
@@ -118,3 +118,20 @@ xf86VTSwitchTo(void)
 		return(TRUE);
 	}
 }
+
+Bool
+xf86VTActivate(int vtno)
+{
+	struct vt_stat state;
+
+	if (ioctl(xf86Info.consoleFd, VT_GETSTATE, &state) < 0)
+		return(FALSE);
+
+	if ((state.v_state & (1 << vtno)) == 0)
+		return(FALSE);
+
+	xf86Info.vtRequestsPending = TRUE;
+	xf86Info.vtPendingNum = vtno;
+
+	return(TRUE);
+}
diff --git a/hw/xfree86/os-support/xf86_OSproc.h b/hw/xfree86/os-support/xf86_OSproc.h
index c1a1173..f0cb768 100644
--- a/hw/xfree86/os-support/xf86_OSproc.h
+++ b/hw/xfree86/os-support/xf86_OSproc.h
@@ -199,6 +199,7 @@ extern _X_EXPORT Bool xf86SIGIOSupported (void);
 typedef void (*PMClose)(void);
 extern _X_EXPORT void xf86OpenConsole(void);
 extern _X_EXPORT void xf86CloseConsole(void);
+extern _X_HIDDEN Bool xf86VTActivate(int vtno);
 extern _X_EXPORT Bool xf86VTSwitchPending(void);
 extern _X_EXPORT Bool xf86VTSwitchAway(void);
 extern _X_EXPORT Bool xf86VTSwitchTo(void);
commit 15ca3312c069526b7f2207de9dfb9b9e851caf95
Author: Aaron Zang <Aaron.Zang at Sun.COM>
Date:   Mon Dec 14 17:55:46 2009 -0800

    Solaris: Avoid switching to inactive VT's
    
    Fix for OpenSolaris bug 6876992: "[vconsole] Ctrl+Alt+F12 switchs to blank
    console screen with hotkeys property turned-off"
    http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6876992
    
    Xorg needs to do sanity test for the VT it is commanded to switch to.
    If the VT is not opened by any process, discard the switching request.
    
    The changes also contain the fix for some flaws discovered when
    getting the new gdm to run.
    
    Signed-off-by: Aaron Zang <Aaron.Zang at Sun.COM>
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>

diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c
index 8cd765a..8e6a15b 100644
--- a/hw/xfree86/common/xf86Events.c
+++ b/hw/xfree86/common/xf86Events.c
@@ -202,8 +202,16 @@ xf86ProcessActionEvent(ActionEvent action, void *arg)
 	    vtno--;
 #endif
 #if defined(sun)
-	    if (vtno == xf86Info.vtno)
+	    if (vtno == xf86Info.vtno) {
 		break;
+	    } else {
+		struct vt_stat state;
+		if (ioctl(xf86Info.consoleFd, VT_GETSTATE, &state) < 0)
+			break;
+
+		if ((state.v_state & (1 << vtno)) == 0)
+			break;
+	    }
 
 	    xf86Info.vtRequestsPending = TRUE;
 	    xf86Info.vtPendingNum = vtno;
diff --git a/hw/xfree86/os-support/solaris/sun_VTsw.c b/hw/xfree86/os-support/solaris/sun_VTsw.c
index ded2f27..7f4e08e 100644
--- a/hw/xfree86/os-support/solaris/sun_VTsw.c
+++ b/hw/xfree86/os-support/solaris/sun_VTsw.c
@@ -38,17 +38,27 @@
  * Handle the VT-switching interface for Solaris/OpenSolaris
  */
 
+static int xf86VTPruneDoor = 0;
+
 void
-xf86VTRequest(int sig)
+xf86VTRelease(int sig)
 {
-	if (xf86Info.vtPendingNum != -1)
+	if (xf86Info.vtPendingNum == -1)
 	{
-		ioctl(xf86Info.consoleFd, VT_RELDISP, 1);
-		xf86Info.vtPendingNum = -1;
-
+		xf86VTPruneDoor = 1;
+		xf86Info.vtRequestsPending = TRUE;
 		return;
 	}
 
+	ioctl(xf86Info.consoleFd, VT_RELDISP, 1);
+	xf86Info.vtPendingNum = -1;
+
+	return;
+}
+
+void
+xf86VTAcquire(int sig)
+{
 	xf86Info.vtRequestsPending = TRUE;
 	return;
 }
@@ -68,6 +78,12 @@ xf86VTSwitchAway(void)
 
 	xf86Info.vtRequestsPending = FALSE;
 
+	if (xf86VTPruneDoor) {
+		xf86VTPruneDoor = 0;
+		ioctl(xf86Info.consoleFd, VT_RELDISP, 1);
+		return (TRUE);
+	}
+
 	vt_door_arg.vt_ev = VT_EV_HOTKEYS;
 	vt_door_arg.vt_num = xf86Info.vtPendingNum;
 	door_arg.data_ptr = (char *)&vt_door_arg;
diff --git a/hw/xfree86/os-support/solaris/sun_init.c b/hw/xfree86/os-support/solaris/sun_init.c
index 2c569f0..5846866 100644
--- a/hw/xfree86/os-support/solaris/sun_init.c
+++ b/hw/xfree86/os-support/solaris/sun_init.c
@@ -39,6 +39,8 @@ static Bool Protect0 = FALSE;
 static int VTnum = -1;
 static int xf86StartVT = -1;
 static int vtEnabled = 0;
+extern void xf86VTAcquire(int);
+extern void xf86VTRelease(int);
 #endif
 
 /* Device to open as xf86Info.consoleFd */
@@ -137,7 +139,8 @@ xf86OpenConsole(void)
 	    else
 	    {
 		if ((ioctl(fd, VT_OPENQRY, &xf86Info.vtno) < 0) ||
-		    (xf86Info.vtno == -1)) {
+		    (xf86Info.vtno == -1))
+		{
 		    FatalError("xf86OpenConsole: Cannot find a free VT\n");
 		}
 	    }
@@ -146,7 +149,8 @@ xf86OpenConsole(void)
 	    snprintf(consoleDev, PATH_MAX, "/dev/vt/%d", xf86Info.vtno);
 	}
 
-	if (fd != -1) {
+	if (fd != -1)
+	{
 	    close(fd);
 	}
 
@@ -178,11 +182,12 @@ xf86OpenConsole(void)
 	    if (ioctl(xf86Info.consoleFd, VT_GETMODE, &VT) < 0)
 		FatalError("xf86OpenConsole: VT_GETMODE failed\n");
 
-	    OsSignal(SIGUSR1, xf86VTRequest);
+	    OsSignal(SIGUSR1, xf86VTAcquire);
+	    OsSignal(SIGUSR2, xf86VTRelease);
 
 	    VT.mode = VT_PROCESS;
-	    VT.relsig = SIGUSR1;
 	    VT.acqsig = SIGUSR1;
+	    VT.relsig = SIGUSR2;
 
 	    if (ioctl(xf86Info.consoleFd, VT_SETMODE, &VT) < 0)
 		FatalError("xf86OpenConsole: VT_SETMODE VT_PROCESS failed\n");
@@ -204,7 +209,8 @@ xf86OpenConsole(void)
     else /* serverGeneration != 1 */
     {
 #ifdef HAS_USL_VTS
-	if (vtEnabled) {
+	if (vtEnabled)
+	{
 	    /*
 	     * Now re-get the VT
 	     */
@@ -285,7 +291,8 @@ xf86CloseConsole(void)
 #endif
 
 #ifdef HAS_USL_VTS
-    if (vtEnabled == 1) {
+    if (vtEnabled)
+    {
 	if (ioctl(xf86Info.consoleFd, VT_GETMODE, &VT) != -1)
 	{
 	    VT.mode = VT_AUTO;		/* Set default vt handling */
commit 2984c18eb994696927a7f3b94d86fd47907334a0
Author: Gaetan Nadon <memsize at videotron.ca>
Date:   Thu Jan 21 14:21:07 2010 -0500

    config: replace custom code with reusable macro XORG_WITH_DOXYGEN
    
    XORG_WITH_DOXYGEN provides additional functions like a configure
    option which allow platform builders to control the usage of
    the doxygen program.
    
    This is a requirement from platforms that do not have such doc tool.
    A platform with a back level doxygen may use --without-doxygen
    to get the rest of the documentation built.
    
    Signed-off-by: Gaetan Nadon <memsize at videotron.ca>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index 8c1085b..1f5c343 100644
--- a/configure.ac
+++ b/configure.ac
@@ -34,9 +34,10 @@ AM_MAINTAINER_MODE
 
 # Require xorg-macros: XORG_DEFAULT_OPTIONS
 m4_ifndef([XORG_MACROS_VERSION],
-          [m4_fatal([must install xorg-macros 1.3 or later before running autoconf/autogen])])
-XORG_MACROS_VERSION(1.3)
+          [m4_fatal([must install xorg-macros 1.5 or later before running autoconf/autogen])])
+XORG_MACROS_VERSION(1.5)
 XORG_DEFAULT_OPTIONS
+XORG_WITH_DOXYGEN
 
 m4_ifndef([XORG_FONT_MACROS_VERSION], [m4_fatal([must install fontutil 1.1 or later before running autoconf/autogen])])
 XORG_FONT_MACROS_VERSION(1.1)
@@ -1943,8 +1944,6 @@ fi
 AC_MSG_RESULT([$DMX])
 AM_CONDITIONAL(DMX, [test "x$DMX" = xyes])
 
-DOXYGEN="not_found"
-
 if test "x$DMX" = xyes; then
 	if test "x$have_dmx" = xno; then
 		AC_MSG_ERROR([Xdmx build explicitly requested, but required
@@ -1980,12 +1979,6 @@ dnl Linux sources in DMX require <linux/keyboard.h>
 	AC_SUBST(X11EXAMPLES_DEP_LIBS)
 
 fi
-AC_PATH_PROG(DOXYGEN,doxygen,[not_found])
-if test "x$DOXYGEN" = "xnot_found" ; then
-    AC_MSG_WARN([doxygen not found in $PATH. Cannot build dmx documentation])
-fi
-AC_SUBST(DOXYGEN)
-AM_CONDITIONAL([HAVE_DOXYGEN], [test "x$DOXYGEN" != "xnot_found"])
 AM_CONDITIONAL([DMX_BUILD_LNX], [test "x$DMX_BUILD_LNX" = xyes])
 AM_CONDITIONAL([DMX_BUILD_USB], [test "x$DMX_BUILD_USB" = xyes])
 
diff --git a/hw/dmx/doc/Makefile.am b/hw/dmx/doc/Makefile.am
index 0fb6e89..c6fc1c9 100644
--- a/hw/dmx/doc/Makefile.am
+++ b/hw/dmx/doc/Makefile.am
@@ -62,7 +62,7 @@ dist-local: html/annotated.html
 html/annotated.html: $(DOXYGEN_SRC)
 	$(DOXYGEN) $(srcdir)/doxygen.conf
 
-clean-local:
+maintainer-clean-local:
 	rm -rf html/
 endif
 
commit d9c20ee4191de7276a08288adffc24dff48aff8f
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Fri Jan 15 19:34:29 2010 +0200

    dix: move cursor realize code to its own function
    
    The semantic remains, only code was moved: reuse chunk of code to realize
    cursor on both AllocARGBCursor and AllocGlyphCursor.
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/dix/cursor.c b/dix/cursor.c
index 6103b15..324d733 100644
--- a/dix/cursor.c
+++ b/dix/cursor.c
@@ -160,6 +160,64 @@ CheckForEmptyMask(CursorBitsPtr bits)
 }
 
 /**
+ * realize the cursor for every screen. Do not change the refcnt, this will be
+ * changed when ChangeToCursor actually changes the sprite.
+ *
+ * @return Success if all cursors realize on all screens, BadAlloc if realize
+ * failed for a device on a given screen.
+ */
+static int
+RealizeCursorAllScreens(CursorPtr pCurs)
+{
+    DeviceIntPtr pDev;
+    ScreenPtr   pscr;
+    int nscr;
+
+    for (nscr = 0; nscr < screenInfo.numScreens; nscr++)
+    {
+        pscr = screenInfo.screens[nscr];
+        for (pDev = inputInfo.devices; pDev; pDev = pDev->next)
+        {
+            if (DevHasCursor(pDev))
+            {
+                if (!( *pscr->RealizeCursor)(pDev, pscr, pCurs))
+                {
+                    /* Realize failed for device pDev on screen pscr.
+                     * We have to assume that for all devices before, realize
+                     * worked. We need to rollback all devices so far on the
+                     * current screen and then all devices on previous
+                     * screens.
+                     */
+                    DeviceIntPtr pDevIt = inputInfo.devices; /*dev iterator*/
+                    while(pDevIt && pDevIt != pDev)
+                    {
+                        if (DevHasCursor(pDevIt))
+                            ( *pscr->UnrealizeCursor)(pDevIt, pscr, pCurs);
+                        pDevIt = pDevIt->next;
+                    }
+                    while (--nscr >= 0)
+                    {
+                        pscr = screenInfo.screens[nscr];
+                        /* now unrealize all devices on previous screens */
+                        pDevIt = inputInfo.devices;
+                        while (pDevIt)
+                        {
+                            if (DevHasCursor(pDevIt))
+                                ( *pscr->UnrealizeCursor)(pDevIt, pscr, pCurs);
+                            pDevIt = pDevIt->next;
+                        }
+                        ( *pscr->UnrealizeCursor)(pDev, pscr, pCurs);
+                    }
+                    return BadAlloc;
+                }
+            }
+        }
+    }
+
+    return Success;
+}
+
+/**
  * does nothing about the resource table, just creates the data structure.
  * does not copy the src and mask bits
  *
@@ -176,9 +234,7 @@ AllocARGBCursor(unsigned char *psrcbits, unsigned char *pmaskbits,
 {
     CursorBitsPtr  bits;
     CursorPtr 	pCurs;
-    int		rc, nscr;
-    ScreenPtr 	pscr;
-    DeviceIntPtr pDev; 
+    int rc;
 
     *ppCurs = NULL;
     pCurs = (CursorPtr)xcalloc(sizeof(CursorRec) + sizeof(CursorBits), 1);
@@ -222,62 +278,21 @@ AllocARGBCursor(unsigned char *psrcbits, unsigned char *pmaskbits,
     /* security creation/labeling check */
     rc = XaceHook(XACE_RESOURCE_ACCESS, client, cid, RT_CURSOR,
 		  pCurs, RT_NONE, NULL, DixCreateAccess);
-    if (rc != Success) {
-	dixFreePrivates(pCurs->devPrivates);
-	FreeCursorBits(bits);
-	xfree(pCurs);
-	return rc;
-    }
-	
-    /*
-     * realize the cursor for every screen
-     * Do not change the refcnt, this will be changed when ChangeToCursor
-     * actually changes the sprite.
-     */
-    for (nscr = 0; nscr < screenInfo.numScreens; nscr++)
-    {
-        pscr = screenInfo.screens[nscr];
-        for (pDev = inputInfo.devices; pDev; pDev = pDev->next)
-        {
-            if (DevHasCursor(pDev))
-            {
-                if (!( *pscr->RealizeCursor)(pDev, pscr, pCurs))
-                {
-                    /* Realize failed for device pDev on screen pscr.
-                     * We have to assume that for all devices before, realize
-                     * worked. We need to rollback all devices so far on the
-                     * current screen and then all devices on previous
-                     * screens.
-                     */
-                    DeviceIntPtr pDevIt = inputInfo.devices; /*dev iterator*/
-                    while(pDevIt && pDevIt != pDev)
-                    {
-                        if (DevHasCursor(pDevIt))
-                            ( *pscr->UnrealizeCursor)(pDevIt, pscr, pCurs);
-                        pDevIt = pDevIt->next;
-                    }
-                    while (--nscr >= 0)
-                    {
-                        pscr = screenInfo.screens[nscr];
-                        /* now unrealize all devices on previous screens */
-                        pDevIt = inputInfo.devices;
-                        while (pDevIt)
-                        {
-                            if (DevHasCursor(pDevIt))
-                                ( *pscr->UnrealizeCursor)(pDevIt, pscr, pCurs);
-                            pDevIt = pDevIt->next;
-                        }
-                        ( *pscr->UnrealizeCursor)(pDev, pscr, pCurs);
-                    }
-                    dixFreePrivates(pCurs->devPrivates);
-                    FreeCursorBits(bits);
-                    xfree(pCurs);
-                    return BadAlloc;
-                }
-            }
-        }
-    }
+    if (rc != Success)
+        goto error;
+
+    rc = RealizeCursorAllScreens(pCurs);
+    if (rc != Success)
+        goto error;
+
     *ppCurs = pCurs;
+    return Success;
+
+error:
+    dixFreePrivates(pCurs->devPrivates);
+    FreeCursorBits(bits);
+    xfree(pCurs);
+
     return rc;
 }
 
@@ -294,10 +309,7 @@ AllocGlyphCursor(Font source, unsigned sourceChar, Font mask, unsigned maskChar,
     int rc;
     CursorBitsPtr  bits;
     CursorPtr 	pCurs;
-    int		nscr;
-    ScreenPtr 	pscr;
     GlyphSharePtr pShare;
-    DeviceIntPtr pDev;
 
     rc = dixLookupResourceByType((pointer *)&sourcefont, source, RT_FONT, client,
 				 DixUseAccess);
@@ -444,67 +456,22 @@ AllocGlyphCursor(Font source, unsigned sourceChar, Font mask, unsigned maskChar,
     /* security creation/labeling check */
     rc = XaceHook(XACE_RESOURCE_ACCESS, client, cid, RT_CURSOR,
 		  pCurs, RT_NONE, NULL, DixCreateAccess);
-    if (rc != Success) {
-	dixFreePrivates(pCurs->devPrivates);
-	FreeCursorBits(bits);
-	xfree(pCurs);
-	return rc;
-    }
-	
-    /*
-     * realize the cursor for every screen
-     */
-    for (nscr = 0; nscr < screenInfo.numScreens; nscr++)
-    {
-        pscr = screenInfo.screens[nscr];
-
-        for (pDev = inputInfo.devices; pDev; pDev = pDev->next)
-        {
-            if (DevHasCursor(pDev))
-            {
-                if (!( *pscr->RealizeCursor)(pDev, pscr, pCurs))
-                {
-                    /* Realize failed for device pDev on screen pscr.
-                     * We have to assume that for all devices before, realize
-                     * worked. We need to rollback all devices so far on the
-                     * current screen and then all devices on previous
-                     * screens.
-                     */
-                    DeviceIntPtr pDevIt = inputInfo.devices; /*dev iterator*/
-                    while(pDevIt && pDevIt != pDev)
-                    {
-                        if (DevHasCursor(pDevIt))
-                            ( *pscr->UnrealizeCursor)(pDevIt, pscr, pCurs);
-                        pDevIt = pDevIt->next;
-                    }
-
-                    (*pscr->UnrealizeCursor)(inputInfo.pointer, pscr, pCurs);
+    if (rc != Success)
+        goto error;
 
-                    while (--nscr >= 0)
-                    {
-                        pscr = screenInfo.screens[nscr];
-                        /* now unrealize all devices on previous screens */
-                        ( *pscr->UnrealizeCursor)(inputInfo.pointer, pscr, pCurs);
+    rc = RealizeCursorAllScreens(pCurs);
+    if (rc != Success)
+        goto error;
 
-                        pDevIt = inputInfo.devices;
-                        while (pDevIt)
-                        {
-                            if (DevHasCursor(pDevIt))
-                                ( *pscr->UnrealizeCursor)(pDevIt, pscr, pCurs);
-                            pDevIt = pDevIt->next;
-                        }
-                        ( *pscr->UnrealizeCursor)(pDev, pscr, pCurs);
-                    }
-                    dixFreePrivates(pCurs->devPrivates);
-                    FreeCursorBits(bits);
-                    xfree(pCurs);
-                    return BadAlloc;
-                }
-            }
-        }
-    }
     *ppCurs = pCurs;
     return Success;
+
+error:
+    dixFreePrivates(pCurs->devPrivates);
+    FreeCursorBits(bits);
+    xfree(pCurs);
+
+    return rc;
 }
 
 /** CreateRootCursor
commit f818f222362c93bcc859d997d96d8f3b447729f4
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Jan 15 15:32:19 2010 +1000

    xkb: unexport xkbDevicePrivateKey and xkbUnwrapProc.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Dan Nicholson <dbn.lists at gmail.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/include/xkbsrv.h b/include/xkbsrv.h
index b427c60..c309465 100644
--- a/include/xkbsrv.h
+++ b/include/xkbsrv.h
@@ -275,10 +275,10 @@ typedef struct
 	device->public.realInputProc = oldprocs->realInputProc; \
 	device->unwrapProc = oldprocs->unwrapProc;
 
-extern _X_EXPORT DevPrivateKey xkbDevicePrivateKey;
+extern DevPrivateKey xkbDevicePrivateKey;
 #define XKBDEVICEINFO(dev) ((xkbDeviceInfoPtr)dixLookupPrivate(&(dev)->devPrivates, xkbDevicePrivateKey))
 
-extern _X_EXPORT void xkbUnwrapProc(DeviceIntPtr, DeviceHandleProc, pointer);
+extern void xkbUnwrapProc(DeviceIntPtr, DeviceHandleProc, pointer);
 
 /***====================================================================***/
 
commit 6850ea8fb95417db9ce3a70fc17f90d6fdea1389
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Jan 15 15:32:16 2010 +1000

    xfree86: replace True/False with TRUE/FALSE.
    
    xf86Xinput.c relied on xkbsrv.h's definition of True/False which seems odd
    at first and weird on second glance.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Dan Nicholson <dbn.lists at gmail.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index df774a1..fb0ee9c 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -504,10 +504,10 @@ InputClassMatches(XF86ConfInputClassPtr iclass, InputAttributes *attrs)
 {
     if (iclass->match_product &&
         (!attrs->product || !strstr(attrs->product, iclass->match_product)))
-        return False;
+        return FALSE;
     if (iclass->match_vendor &&
         (!attrs->vendor || !strstr(attrs->vendor, iclass->match_vendor)))
-        return False;
+        return FALSE;
     if (iclass->match_device &&
 #ifdef HAVE_FNMATCH_H
         (!attrs->device ||
@@ -515,26 +515,26 @@ InputClassMatches(XF86ConfInputClassPtr iclass, InputAttributes *attrs)
 #else
         (!attrs->device || !strstr(attrs->device, iclass->match_device)))
 #endif
-        return False;
+        return FALSE;
     if (iclass->is_keyboard.set &&
         iclass->is_keyboard.val != !!(attrs->flags & ATTR_KEYBOARD))
-        return False;
+        return FALSE;
     if (iclass->is_pointer.set &&
         iclass->is_pointer.val != !!(attrs->flags & ATTR_POINTER))
-        return False;
+        return FALSE;
     if (iclass->is_joystick.set &&
         iclass->is_joystick.val != !!(attrs->flags & ATTR_JOYSTICK))
-        return False;
+        return FALSE;
     if (iclass->is_tablet.set &&
         iclass->is_tablet.val != !!(attrs->flags & ATTR_TABLET))
-        return False;
+        return FALSE;
     if (iclass->is_touchpad.set &&
         iclass->is_touchpad.val != !!(attrs->flags & ATTR_TOUCHPAD))
-        return False;
+        return FALSE;
     if (iclass->is_touchscreen.set &&
         iclass->is_touchscreen.val != !!(attrs->flags & ATTR_TOUCHSCREEN))
-        return False;
-    return True;
+        return FALSE;
+    return TRUE;
 }
 
 /*
commit 64b1372c15c3ede2696346e153bca9bd89016a20
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Jan 15 15:32:15 2010 +1000

    xkb: remove unused _XkbIsPressEvent and _XkbIsReleaseEvent defines
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Dan Nicholson <dbn.lists at gmail.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/include/xkbsrv.h b/include/xkbsrv.h
index 6b702e8..b427c60 100644
--- a/include/xkbsrv.h
+++ b/include/xkbsrv.h
@@ -307,9 +307,6 @@ extern _X_EXPORT CARD32	xkbDebugFlags;
 extern	_X_EXPORT int	DeviceKeyPress,DeviceKeyRelease,DeviceMotionNotify;
 extern	_X_EXPORT int	DeviceButtonPress,DeviceButtonRelease;
 
-#define	_XkbIsPressEvent(t)	(((t)==KeyPress)||((t)==DeviceKeyPress))
-#define	_XkbIsReleaseEvent(t)	(((t)==KeyRelease)||((t)==DeviceKeyRelease))
-
 #define	Status		int
 
 #ifndef True
commit c8bba14a390fe3fa16027e6b2433a314b3ea00c3
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Jan 15 15:32:13 2010 +1000

    xkb: remove XkbAtomGetString, replace with NameForAtom.
    
    XKB really XKBdoes not XKBneed its own XKBdefines for XKBeverything.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Fernando Carrijo <fcarrijo at yahoo.com.br>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/include/xkbsrv.h b/include/xkbsrv.h
index ed3779a..6b702e8 100644
--- a/include/xkbsrv.h
+++ b/include/xkbsrv.h
@@ -990,6 +990,4 @@ extern _X_EXPORT XkbDescPtr XkbCompileKeymap(
         XkbRMLVOSet *   /* rmlvo */
 );
 
-#define	XkbAtomGetString(s)	NameForAtom(s)
-
 #endif /* _XKBSRV_H_ */
diff --git a/xkb/xkbfmisc.c b/xkb/xkbfmisc.c
index 52ef636..804ef20 100644
--- a/xkb/xkbfmisc.c
+++ b/xkb/xkbfmisc.c
@@ -240,7 +240,7 @@ unsigned	wantNames,wantConfig,wantDflts;
     if ((xkb!=NULL) && (old_names!=NULL)) {
 	if (wantNames&XkmTypesMask) {
 	    if (old_names->types!=None) {
-		tmp= XkbAtomGetString(old_names->types);
+		tmp= NameForAtom(old_names->types);
 		names->types= _XkbDupString(tmp);
 	    }
 	    else {
@@ -250,7 +250,7 @@ unsigned	wantNames,wantConfig,wantDflts;
 	}
 	if (wantNames&XkmCompatMapMask) {
 	    if (old_names->compat!=None) {
-		tmp= XkbAtomGetString(old_names->compat);
+		tmp= NameForAtom(old_names->compat);
 		names->compat= _XkbDupString(tmp);
 	    }
 	    else wantDflts|= XkmCompatMapMask;
@@ -259,13 +259,13 @@ unsigned	wantNames,wantConfig,wantDflts;
 	if (wantNames&XkmSymbolsMask) {
 	    if (old_names->symbols==None)
 		return False;
-	    tmp= XkbAtomGetString(old_names->symbols);
+	    tmp= NameForAtom(old_names->symbols);
 	    names->symbols= _XkbDupString(tmp);
 	    complete|= XkmSymbolsMask; 
 	}
 	if (wantNames&XkmKeyNamesMask) {
 	   if (old_names->keycodes!=None) {
-		tmp= XkbAtomGetString(old_names->keycodes);
+		tmp= NameForAtom(old_names->keycodes);
 		names->keycodes= _XkbDupString(tmp);
 	    }
 	    else wantDflts|= XkmKeyNamesMask;
@@ -274,7 +274,7 @@ unsigned	wantNames,wantConfig,wantDflts;
 	if (wantNames&XkmGeometryMask) {
 	    if (old_names->geometry==None)
 		return False;
-	    tmp= XkbAtomGetString(old_names->geometry);
+	    tmp= NameForAtom(old_names->geometry);
 	    names->geometry= _XkbDupString(tmp);
 	    complete|= XkmGeometryMask; 
 	    wantNames&= ~XkmGeometryMask;
diff --git a/xkb/xkbout.c b/xkb/xkbout.c
index b1c30d0..53f6841 100644
--- a/xkb/xkbout.c
+++ b/xkb/xkbout.c
@@ -233,7 +233,7 @@ WriteXKBIndicatorMap(	FILE *			file,
 			void *			priv)
 {
 
-    fprintf(file,"    indicator \"%s\" {\n",XkbAtomGetString(name));
+    fprintf(file,"    indicator \"%s\" {\n",NameForAtom(name));
     if (led->flags&XkbIM_NoExplicit)
 	fprintf(file,"        !allowExplicit;\n");
     if (led->flags&XkbIM_LEDDrivesKB)
diff --git a/xkb/xkbtext.c b/xkb/xkbtext.c
index 95ad013..324254d 100644
--- a/xkb/xkbtext.c
+++ b/xkb/xkbtext.c
@@ -74,7 +74,7 @@ XkbAtomText(Atom atm,unsigned format)
 const char	*atmstr;
 char	*rtrn,*tmp;
 
-    atmstr = XkbAtomGetString(atm);
+    atmstr = NameForAtom(atm);
     if (atmstr != NULL) {
 	int	len;
 	len= strlen(atmstr)+1;
@@ -118,7 +118,7 @@ char  numBuf[20];
     if (ndx>=XkbNumVirtualMods)
 	 tmp= "illegal";
     else if (vmodNames&&(vmodNames[ndx]!=None))
-	 tmp= XkbAtomGetString(vmodNames[ndx]);
+	 tmp= NameForAtom(vmodNames[ndx]);
     if (tmp==NULL) {
 	sprintf(numBuf,"%d",ndx);
 	tmp = numBuf;
commit f37799c9712afb7769f369162b904d9ea2dbd608
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Jan 15 15:32:12 2010 +1000

    xkb: remove IsKeypadKey define, only used in two places.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Fernando Carrijo <fcarrijo at yahoo.com.br>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/include/xkbsrv.h b/include/xkbsrv.h
index af8df2f..ed3779a 100644
--- a/include/xkbsrv.h
+++ b/include/xkbsrv.h
@@ -310,9 +310,6 @@ extern	_X_EXPORT int	DeviceButtonPress,DeviceButtonRelease;
 #define	_XkbIsPressEvent(t)	(((t)==KeyPress)||((t)==DeviceKeyPress))
 #define	_XkbIsReleaseEvent(t)	(((t)==KeyRelease)||((t)==DeviceKeyRelease))
 
-#undef	IsKeypadKey
-#define	IsKeypadKey(s)		XkbKSIsKeypad(s)
-
 #define	Status		int
 
 #ifndef True
diff --git a/xkb/XKBMisc.c b/xkb/XKBMisc.c
index 55def7c..c1a17c0 100644
--- a/xkb/XKBMisc.c
+++ b/xkb/XKBMisc.c
@@ -175,7 +175,7 @@ BOOL		replicated = FALSE;
 	    }
 	}
 	if (((protected&(1<<i))==0)&&(types_inout[i]==XkbTwoLevelIndex)) {
-	    if (IsKeypadKey(syms[0])||IsKeypadKey(syms[1]))
+	    if (XkbKSIsKeypad(syms[0])||XkbKSIsKeypad(syms[1]))
 		types_inout[i]= XkbKeypadIndex;
 	    else {
 		KeySym upper,lower;
commit c8076f317ee5044ed3cc21b097f8b1741af8e0f1
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Jan 15 15:32:11 2010 +1000

    xkb: remove XConvertCase.
    
    Since it's typedef'd to XkbConvertCase anyway and the headers are now split
    from the client headers, simply get rid of it altogether.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/include/xkbsrv.h b/include/xkbsrv.h
index b1df0d3..af8df2f 100644
--- a/include/xkbsrv.h
+++ b/include/xkbsrv.h
@@ -310,7 +310,6 @@ extern	_X_EXPORT int	DeviceButtonPress,DeviceButtonRelease;
 #define	_XkbIsPressEvent(t)	(((t)==KeyPress)||((t)==DeviceKeyPress))
 #define	_XkbIsReleaseEvent(t)	(((t)==KeyRelease)||((t)==DeviceKeyRelease))
 
-#define	XConvertCase(s,l,u)	XkbConvertCase(s,l,u)
 #undef	IsKeypadKey
 #define	IsKeypadKey(s)		XkbKSIsKeypad(s)
 
diff --git a/xkb/XKBMisc.c b/xkb/XKBMisc.c
index 71fa044..55def7c 100644
--- a/xkb/XKBMisc.c
+++ b/xkb/XKBMisc.c
@@ -162,7 +162,7 @@ BOOL		replicated = FALSE;
 	syms= &xkb_syms_rtrn[XKB_OFFSET(i,0)];
 	if ((nSyms[i]>1)&&(syms[1]==NoSymbol)&&(syms[0]!=NoSymbol)) {
 	    KeySym upper,lower;
-	    XConvertCase(syms[0],&lower,&upper);
+	    XkbConvertCase(syms[0],&lower,&upper);
 	    if (upper!=lower) {
 		xkb_syms_rtrn[XKB_OFFSET(i,0)]= lower;
 		xkb_syms_rtrn[XKB_OFFSET(i,1)]= upper;
@@ -179,7 +179,7 @@ BOOL		replicated = FALSE;
 		types_inout[i]= XkbKeypadIndex;
 	    else {
 		KeySym upper,lower;
-		XConvertCase(syms[0],&lower,&upper);
+		XkbConvertCase(syms[0],&lower,&upper);
 		if ((syms[0]==lower)&&(syms[1]==upper))
 		    types_inout[i]= XkbAlphabeticIndex;
 	    }
commit d627dd9d1ef436b01f0581e40a6736ffc6b5d2c8
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Jan 15 15:32:10 2010 +1000

    xkb: remove _XkbClearElems, a memset will do.
    
    Bonus point - it's easier to understand what's actually being done with the
    memory.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Fernando Carrijo <fcarrijo at yahoo.com.br>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/include/xkbsrv.h b/include/xkbsrv.h
index 5d5ea9b..b1df0d3 100644
--- a/include/xkbsrv.h
+++ b/include/xkbsrv.h
@@ -299,8 +299,6 @@ extern _X_EXPORT char *	XkbBinDirectory;
 
 extern _X_EXPORT CARD32	xkbDebugFlags;
 
-#define	_XkbClearElems(a,f,l,t)	bzero(&(a)[f],((l)-(f)+1)*sizeof(t))
-
 #define	_XkbLibError(c,l,d) /* Epoch fail */
 #define	_XkbErrCode2(a,b) ((XID)((((unsigned int)(a))<<24)|((b)&0xffffff)))
 #define	_XkbErrCode3(a,b,c)	_XkbErrCode2(a,(((unsigned int)(b))<<16)|(c))
diff --git a/xkb/XKBAlloc.c b/xkb/XKBAlloc.c
index 312f54e..6464e99 100644
--- a/xkb/XKBAlloc.c
+++ b/xkb/XKBAlloc.c
@@ -36,6 +36,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include <xkbsrv.h>
 #include "xkbgeom.h"
 #include <os.h>
+#include <string.h>
 
 /***===================================================================***/
 
@@ -64,8 +65,8 @@ XkbSymInterpretRec *prev_interpret;
 	    return BadAlloc;
 	}
 	if (compat->num_si!=0) {
-	    _XkbClearElems(compat->sym_interpret,compat->num_si,
-					compat->size_si-1,XkbSymInterpretRec);
+	    memset(&compat->sym_interpret[compat->num_si], 0,
+		   (compat->size_si - compat->num_si) * sizeof(XkbSymInterpretRec));
 	}
 	return Success;
     }
@@ -159,8 +160,8 @@ XkbNamesPtr	names;
 	    names->key_aliases= xrealloc(names->key_aliases,
 					 nTotalAliases * sizeof(XkbKeyAliasRec));
 	    if (names->key_aliases!=NULL) {
-		_XkbClearElems(names->key_aliases,names->num_key_aliases,
-						nTotalAliases-1,XkbKeyAliasRec);
+		memset(&names->key_aliases[names->num_key_aliases], 0,
+			(nTotalAliases - names->num_key_aliases) * sizeof(XkbKeyAliasRec));
 	    } else {
 		xfree(prev_aliases);
 	    }
@@ -181,8 +182,8 @@ XkbNamesPtr	names;
 	    names->radio_groups= xrealloc(names->radio_groups,
 					  nTotalRG * sizeof(Atom));
 	    if (names->radio_groups!=NULL) {
-		_XkbClearElems(names->radio_groups,names->num_rg,nTotalRG-1,
-									Atom);
+		memset(&names->radio_groups[names->num_rg], 0,
+			(nTotalRG - names->num_rg) * sizeof(Atom));
 	    } else {
 		xfree(prev_radio_groups);
 	    }
commit ea1de3fcdc40d2060bb6d13775005eadd624e767
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Jan 15 15:32:09 2010 +1000

    xkb: remove _XkbTyped*alloc
    
    Please no extension-specific macros for memory allocation.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Dan Nicholson <dbn.lists at gmail.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/include/xkbsrv.h b/include/xkbsrv.h
index ebc7cdb..5d5ea9b 100644
--- a/include/xkbsrv.h
+++ b/include/xkbsrv.h
@@ -299,10 +299,6 @@ extern _X_EXPORT char *	XkbBinDirectory;
 
 extern _X_EXPORT CARD32	xkbDebugFlags;
 
-#define	_XkbTypedAlloc(t)	((t *)xalloc(sizeof(t)))
-#define	_XkbTypedCalloc(n,t)	((t *)Xcalloc((n)*sizeof(t)))
-#define	_XkbTypedRealloc(o,n,t) \
-	((o)?(t *)Xrealloc((o),(n)*sizeof(t)):_XkbTypedCalloc(n,t))
 #define	_XkbClearElems(a,f,l,t)	bzero(&(a)[f],((l)-(f)+1)*sizeof(t))
 
 #define	_XkbLibError(c,l,d) /* Epoch fail */
diff --git a/xkb/XKBAlloc.c b/xkb/XKBAlloc.c
index 7265d83..312f54e 100644
--- a/xkb/XKBAlloc.c
+++ b/xkb/XKBAlloc.c
@@ -35,6 +35,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include "inputstr.h"
 #include <xkbsrv.h>
 #include "xkbgeom.h"
+#include <os.h>
 
 /***===================================================================***/
 
@@ -55,8 +56,8 @@ XkbSymInterpretRec *prev_interpret;
 	if (compat->sym_interpret==NULL)
 	    compat->num_si= 0;
 	prev_interpret = compat->sym_interpret;
-	compat->sym_interpret= _XkbTypedRealloc(compat->sym_interpret,
-						     nSI,XkbSymInterpretRec);
+	compat->sym_interpret= xrealloc(compat->sym_interpret,
+					nSI * sizeof(XkbSymInterpretRec));
 	if (compat->sym_interpret==NULL) {
 	    xfree(prev_interpret);
 	    compat->size_si= compat->num_si= 0;
@@ -68,11 +69,11 @@ XkbSymInterpretRec *prev_interpret;
 	}
 	return Success;
     }
-    compat= _XkbTypedCalloc(1,XkbCompatMapRec);
+   compat= xcalloc(1, sizeof(XkbCompatMapRec));
     if (compat==NULL)
 	return BadAlloc;
     if (nSI>0) {
-	compat->sym_interpret= _XkbTypedCalloc(nSI,XkbSymInterpretRec);
+	compat->sym_interpret= xcalloc(nSI, sizeof(XkbSymInterpretRec));
 	if (!compat->sym_interpret) {
 	    xfree(compat);
 	    return BadAlloc;
@@ -121,7 +122,7 @@ XkbNamesPtr	names;
     if (xkb==NULL)
 	return BadMatch;
     if (xkb->names==NULL) {
-	xkb->names = _XkbTypedCalloc(1,XkbNamesRec);
+	xkb->names = xcalloc(1, sizeof(XkbNamesRec));
 	if (xkb->names==NULL)
 	    return BadAlloc;
     }
@@ -133,7 +134,7 @@ XkbNamesPtr	names;
 	type= xkb->map->types;
 	for (i=0;i<xkb->map->num_types;i++,type++) {
 	    if (type->level_names==NULL) {
-		type->level_names= _XkbTypedCalloc(type->num_levels,Atom);
+		type->level_names= xcalloc(type->num_levels, sizeof(Atom));
 		if (type->level_names==NULL)
 		    return BadAlloc;
 	    }
@@ -144,19 +145,19 @@ XkbNamesPtr	names;
 	    (!XkbIsLegalKeycode(xkb->max_key_code))||
 	    (xkb->max_key_code<xkb->min_key_code)) 
 	    return BadValue;
-	names->keys= _XkbTypedCalloc((xkb->max_key_code+1),XkbKeyNameRec);
+	names->keys= xcalloc((xkb->max_key_code+1), sizeof(XkbKeyNameRec));
 	if (names->keys==NULL)
 	    return BadAlloc;
     }
     if ((which&XkbKeyAliasesMask)&&(nTotalAliases>0)) {
 	if (names->key_aliases==NULL) {
-	    names->key_aliases= _XkbTypedCalloc(nTotalAliases,XkbKeyAliasRec);
+	    names->key_aliases= xcalloc(nTotalAliases, sizeof(XkbKeyAliasRec));
 	}
 	else if (nTotalAliases>names->num_key_aliases) {
 	    XkbKeyAliasRec *prev_aliases = names->key_aliases;
 
-	    names->key_aliases= _XkbTypedRealloc(names->key_aliases,
-						nTotalAliases,XkbKeyAliasRec);
+	    names->key_aliases= xrealloc(names->key_aliases,
+					 nTotalAliases * sizeof(XkbKeyAliasRec));
 	    if (names->key_aliases!=NULL) {
 		_XkbClearElems(names->key_aliases,names->num_key_aliases,
 						nTotalAliases-1,XkbKeyAliasRec);
@@ -172,13 +173,13 @@ XkbNamesPtr	names;
     }
     if ((which&XkbRGNamesMask)&&(nTotalRG>0)) {
 	if (names->radio_groups==NULL) {
-	    names->radio_groups= _XkbTypedCalloc(nTotalRG,Atom);
+	    names->radio_groups= xcalloc(nTotalRG, sizeof(Atom));
 	}
 	else if (nTotalRG>names->num_rg) {
 	    Atom *prev_radio_groups = names->radio_groups;
 
-	    names->radio_groups= _XkbTypedRealloc(names->radio_groups,nTotalRG,
-									Atom);
+	    names->radio_groups= xrealloc(names->radio_groups,
+					  nTotalRG * sizeof(Atom));
 	    if (names->radio_groups!=NULL) {
 		_XkbClearElems(names->radio_groups,names->num_rg,nTotalRG-1,
 									Atom);
@@ -249,7 +250,7 @@ XkbAllocControls(XkbDescPtr xkb,unsigned which)
 	return BadMatch;
 
     if (xkb->ctrls==NULL) {
-	xkb->ctrls= _XkbTypedCalloc(1,XkbControlsRec);
+	xkb->ctrls= xcalloc(1, sizeof(XkbControlsRec));
 	if (!xkb->ctrls)
 	    return BadAlloc;
     }
@@ -275,7 +276,7 @@ XkbAllocIndicatorMaps(XkbDescPtr xkb)
     if (xkb==NULL)
 	return BadMatch;
     if (xkb->indicators==NULL) {
-	xkb->indicators= _XkbTypedCalloc(1,XkbIndicatorRec);
+	xkb->indicators= xcalloc(1, sizeof(XkbIndicatorRec));
 	if (!xkb->indicators)
 	    return BadAlloc;
     }
@@ -299,7 +300,7 @@ XkbAllocKeyboard(void)
 {
 XkbDescRec *xkb;
 
-    xkb = _XkbTypedCalloc(1,XkbDescRec);
+    xkb = xcalloc(1, sizeof(XkbDescRec));
     if (xkb)
 	xkb->device_spec= XkbUseCoreKbd;
     return xkb;
diff --git a/xkb/XKBGAlloc.c b/xkb/XKBGAlloc.c
index 752b11a..0bab39a 100644
--- a/xkb/XKBGAlloc.c
+++ b/xkb/XKBGAlloc.c
@@ -615,7 +615,7 @@ XkbGeometryPtr	geom;
 Status		rtrn;
 
     if (xkb->geom==NULL) {
-	xkb->geom= _XkbTypedCalloc(1,XkbGeometryRec);
+	xkb->geom= xcalloc(1, sizeof(XkbGeometryRec));
 	if (!xkb->geom)
 	    return BadAlloc;
     }
diff --git a/xkb/XKBMAlloc.c b/xkb/XKBMAlloc.c
index 728c029..fd12e2b 100644
--- a/xkb/XKBMAlloc.c
+++ b/xkb/XKBMAlloc.c
@@ -59,7 +59,7 @@ XkbClientMapPtr map;
     }
 
     if (xkb->map==NULL) {
-	map= _XkbTypedCalloc(1,XkbClientMapRec);
+	map= xcalloc(1, sizeof(XkbClientMapRec));
 	if (map==NULL)
 	    return BadAlloc;
 	xkb->map= map;
@@ -68,7 +68,7 @@ XkbClientMapPtr map;
 
     if ((which&XkbKeyTypesMask)&&(nTotalTypes>0)) {
 	if (map->types==NULL) {
-	    map->types= _XkbTypedCalloc(nTotalTypes,XkbKeyTypeRec);
+	    map->types= xcalloc(nTotalTypes, sizeof(XkbKeyTypeRec));
 	    if (map->types==NULL)
 		return BadAlloc;
 	    map->num_types= 0;
@@ -77,7 +77,7 @@ XkbClientMapPtr map;
 	else if (map->size_types<nTotalTypes) {
 	    XkbKeyTypeRec *prev_types = map->types;
 
-	    map->types= _XkbTypedRealloc(map->types,nTotalTypes,XkbKeyTypeRec);
+	    map->types= xrealloc(map->types,nTotalTypes * sizeof(XkbKeyTypeRec));
 	    if (map->types==NULL) {
 		xfree(prev_types);
 		map->num_types= map->size_types= 0;
@@ -92,7 +92,7 @@ XkbClientMapPtr map;
 	int nKeys= XkbNumKeys(xkb);
 	if (map->syms==NULL) {
 	    map->size_syms= (nKeys*15)/10;
-	    map->syms= _XkbTypedCalloc(map->size_syms,KeySym);
+	    map->syms= xcalloc(map->size_syms, sizeof(KeySym));
 	    if (!map->syms) {
 		map->size_syms= 0;
 		return BadAlloc;
@@ -102,7 +102,7 @@ XkbClientMapPtr map;
 	}
 	if (map->key_sym_map==NULL) {
 	    i= xkb->max_key_code+1;
-	    map->key_sym_map= _XkbTypedCalloc(i,XkbSymMapRec);
+	    map->key_sym_map= xcalloc(i, sizeof(XkbSymMapRec));
 	    if (map->key_sym_map==NULL)
 		return BadAlloc;
 	}
@@ -114,7 +114,7 @@ XkbClientMapPtr map;
 	    return BadMatch;
 	if (map->modmap==NULL) {
 	    i= xkb->max_key_code+1;
-	    map->modmap= _XkbTypedCalloc(i,unsigned char);
+	    map->modmap= xcalloc(i, sizeof(unsigned char));
 	    if (map->modmap==NULL)
 		return BadAlloc;
 	}
@@ -131,7 +131,7 @@ XkbServerMapPtr map;
     if (xkb==NULL)
 	return BadMatch;
     if (xkb->server==NULL) {
-	map= _XkbTypedCalloc(1,XkbServerMapRec);
+	map= xcalloc(1, sizeof(XkbServerMapRec));
 	if (map==NULL)
 	    return BadAlloc;
 	for (i=0;i<XkbNumVirtualMods;i++) {
@@ -147,7 +147,7 @@ XkbServerMapPtr map;
 	    return BadMatch;
 	if (map->explicit==NULL) {
 	    i= xkb->max_key_code+1;
-	    map->explicit= _XkbTypedCalloc(i,unsigned char);
+	    map->explicit= xcalloc(i, sizeof(unsigned char));
 	    if (map->explicit==NULL)
 		return BadAlloc;
 	}
@@ -160,7 +160,7 @@ XkbServerMapPtr map;
         if (nNewActions<1)
 	    nNewActions= 1;
 	if (map->acts==NULL) {
-	    map->acts= _XkbTypedCalloc((nNewActions+1),XkbAction);
+	    map->acts= xcalloc((nNewActions+1), sizeof(XkbAction));
 	    if (map->acts==NULL)
 		return BadAlloc;
 	    map->num_acts= 1;
@@ -170,7 +170,7 @@ XkbServerMapPtr map;
 	    unsigned need;
 	    XkbAction *prev_acts = map->acts;
 	    need= map->num_acts+nNewActions;
-	    map->acts= _XkbTypedRealloc(map->acts,need,XkbAction);
+	    map->acts= xrealloc(map->acts,need * sizeof(XkbAction));
 	    if (map->acts==NULL) {
 		xfree(prev_acts);
 	        map->num_acts= map->size_acts= 0;
@@ -182,7 +182,7 @@ XkbServerMapPtr map;
 	}
 	if (map->key_acts==NULL) {
 	    i= xkb->max_key_code+1;
-	    map->key_acts= _XkbTypedCalloc(i,unsigned short);
+	    map->key_acts= xcalloc(i, sizeof(unsigned short));
 	    if (map->key_acts==NULL)
 		return BadAlloc;
 	}
@@ -194,7 +194,7 @@ XkbServerMapPtr map;
 	    return BadMatch;
 	if (map->behaviors==NULL) {
 	    i= xkb->max_key_code+1;
-	    map->behaviors= _XkbTypedCalloc(i,XkbBehavior);
+	    map->behaviors= xcalloc(i, sizeof(XkbBehavior));
 	    if (map->behaviors==NULL)
 		return BadAlloc;
 	}
@@ -206,7 +206,7 @@ XkbServerMapPtr map;
 	    return BadMatch;
 	if (map->vmodmap==NULL) {
 	    i= xkb->max_key_code+1;
-	    map->vmodmap= _XkbTypedCalloc(i,unsigned short);
+	    map->vmodmap= xcalloc(i, sizeof(unsigned short));
 	    if (map->vmodmap==NULL)
 		return BadAlloc;
 	}
@@ -235,20 +235,20 @@ XkbCopyKeyType(XkbKeyTypePtr from,XkbKeyTypePtr into)
     }
     *into= *from;
     if ((from->map)&&(into->map_count>0)) {
-	into->map= _XkbTypedCalloc(into->map_count,XkbKTMapEntryRec);
+	into->map= xcalloc(into->map_count, sizeof(XkbKTMapEntryRec));
 	if (!into->map)
 	    return BadAlloc;
 	memcpy(into->map,from->map,into->map_count*sizeof(XkbKTMapEntryRec));
     }
     if ((from->preserve)&&(into->map_count>0)) {
-	into->preserve= _XkbTypedCalloc(into->map_count,XkbModsRec);
+	into->preserve= xcalloc(into->map_count, sizeof(XkbModsRec));
 	if (!into->preserve)
 	    return BadAlloc;
 	memcpy(into->preserve,from->preserve,
 				into->map_count*sizeof(XkbModsRec));
     }
     if ((from->level_names)&&(into->num_levels>0)) {
-	into->level_names= _XkbTypedCalloc(into->num_levels,Atom);
+	into->level_names= xcalloc(into->num_levels, sizeof(Atom));
 	if (!into->level_names)
 	    return BadAlloc;
 	memcpy(into->level_names,from->level_names,
@@ -310,7 +310,7 @@ KeyCode		matchingKeys[XkbMaxKeyCount],nMatchingKeys;
 	XkbKTMapEntryRec *prev_map = type->map;
 
 	if ((map_count>type->map_count)||(type->map==NULL))
-	    type->map=_XkbTypedRealloc(type->map,map_count,XkbKTMapEntryRec);
+	    type->map = xrealloc(type->map,map_count * sizeof(XkbKTMapEntryRec));
 	if (!type->map) {
 	    if (prev_map) 
 		xfree(prev_map);
@@ -320,8 +320,8 @@ KeyCode		matchingKeys[XkbMaxKeyCount],nMatchingKeys;
 	    XkbModsRec *prev_preserve = type->preserve;
 
 	    if ((map_count>type->map_count)||(type->preserve==NULL)) {
-		type->preserve= _XkbTypedRealloc(type->preserve,map_count,
-	     						    XkbModsRec);
+		type->preserve = xrealloc(type->preserve,
+					  map_count * sizeof(XkbModsRec));
 	    }
 	    if (!type->preserve) {
 		if (prev_preserve) 
@@ -339,7 +339,8 @@ KeyCode		matchingKeys[XkbMaxKeyCount],nMatchingKeys;
     if ((new_num_lvls>type->num_levels)||(type->level_names==NULL)) {
 	Atom * prev_level_names = type->level_names;
 
-	type->level_names=_XkbTypedRealloc(type->level_names,new_num_lvls,Atom);
+	type->level_names = xrealloc(type->level_names,
+				     new_num_lvls * sizeof(Atom));
 	if (!type->level_names) {
 	    if (prev_level_names) 
 		xfree(prev_level_names);
@@ -396,7 +397,7 @@ KeyCode		matchingKeys[XkbMaxKeyCount],nMatchingKeys;
 	if (nResize>0) {
 	    int nextMatch;
 	    xkb->map->size_syms= (nTotal*15)/10;
-	    newSyms = _XkbTypedCalloc(xkb->map->size_syms,KeySym);
+	    newSyms = xcalloc(xkb->map->size_syms, sizeof(KeySym));
 	    if (newSyms==NULL)
 		return BadAlloc;
 	    nextMatch= 0;
@@ -498,7 +499,7 @@ KeySym	*newSyms;
 	return &xkb->map->syms[xkb->map->key_sym_map[key].offset];
     }
     xkb->map->size_syms+= (needed>32?needed:32);
-    newSyms = _XkbTypedCalloc(xkb->map->size_syms,KeySym);
+    newSyms = xcalloc(xkb->map->size_syms, sizeof(KeySym));
     if (newSyms==NULL)
 	return NULL;
     newSyms[0]= NoSymbol;
@@ -637,8 +638,8 @@ int	tmp;
 	    if (xkb->map->key_sym_map) {
 		XkbSymMapRec *prev_key_sym_map = xkb->map->key_sym_map;
 
-		xkb->map->key_sym_map= _XkbTypedRealloc(xkb->map->key_sym_map,
-						(maxKC+1),XkbSymMapRec);
+		xkb->map->key_sym_map = xrealloc(xkb->map->key_sym_map,
+						(maxKC+1) * sizeof(XkbSymMapRec));
 		if (!xkb->map->key_sym_map) {
 		    xfree(prev_key_sym_map);
 		    return BadAlloc;
@@ -655,8 +656,8 @@ int	tmp;
 	    if (xkb->map->modmap) {
 		unsigned char *prev_modmap = xkb->map->modmap;
 
-		xkb->map->modmap= _XkbTypedRealloc(xkb->map->modmap,
-						(maxKC+1),unsigned char);
+		xkb->map->modmap = xrealloc(xkb->map->modmap,
+					    (maxKC+1) * sizeof(unsigned char));
 		if (!xkb->map->modmap) {
 		    xfree(prev_modmap);
 		    return BadAlloc;
@@ -674,8 +675,8 @@ int	tmp;
 	    if (xkb->server->behaviors) {
 		XkbBehavior *prev_behaviors = xkb->server->behaviors;
 
-		xkb->server->behaviors=_XkbTypedRealloc(xkb->server->behaviors,
-						(maxKC+1),XkbBehavior);
+		xkb->server->behaviors = xrealloc(xkb->server->behaviors,
+						(maxKC+1) * sizeof(XkbBehavior));
 		if (!xkb->server->behaviors) {
 		    xfree(prev_behaviors);
 		    return BadAlloc;
@@ -692,8 +693,8 @@ int	tmp;
 	    if (xkb->server->key_acts) {
 		unsigned short *prev_key_acts = xkb->server->key_acts;
 
-		xkb->server->key_acts= _XkbTypedRealloc(xkb->server->key_acts,
-						(maxKC+1),unsigned short);
+		xkb->server->key_acts= xrealloc(xkb->server->key_acts,
+						(maxKC+1) * sizeof(unsigned short));
 		if (!xkb->server->key_acts) {
 		    xfree(prev_key_acts);
 		    return BadAlloc;
@@ -710,8 +711,8 @@ int	tmp;
 	    if (xkb->server->vmodmap) {
 		unsigned short *prev_vmodmap = xkb->server->vmodmap;
 
-		xkb->server->vmodmap= _XkbTypedRealloc(xkb->server->vmodmap,
-						(maxKC+1),unsigned short);
+		xkb->server->vmodmap= xrealloc(xkb->server->vmodmap,
+						(maxKC+1) * sizeof(unsigned short));
 		if (!xkb->server->vmodmap) {
 		    xfree(prev_vmodmap);
 		    return BadAlloc;
@@ -729,8 +730,8 @@ int	tmp;
 	if ((xkb->names)&&(xkb->names->keys)) {
 	    XkbKeyNameRec *prev_keys = xkb->names->keys;
 
-	    xkb->names->keys= _XkbTypedRealloc(xkb->names->keys,
-	    					(maxKC+1),XkbKeyNameRec);
+	    xkb->names->keys = xrealloc(xkb->names->keys,
+					(maxKC+1) * sizeof(XkbKeyNameRec));
 	    if (!xkb->names->keys) {
 		xfree(prev_keys);
 		return BadAlloc;
@@ -767,7 +768,7 @@ XkbAction *newActs;
 	return &xkb->server->acts[xkb->server->key_acts[key]];
     }
     xkb->server->size_acts= xkb->server->num_acts+needed+8;
-    newActs = _XkbTypedCalloc(xkb->server->size_acts,XkbAction);
+    newActs = xcalloc(xkb->server->size_acts, sizeof(XkbAction));
     if (newActs==NULL)
 	return NULL;
     newActs[0].type = XkbSA_NoAction;
diff --git a/xkb/XKBMisc.c b/xkb/XKBMisc.c
index 8679060..71fa044 100644
--- a/xkb/XKBMisc.c
+++ b/xkb/XKBMisc.c
@@ -388,7 +388,7 @@ unsigned		changed,tmp;
     nSyms= XkbKeyNumSyms(xkb,key);
     syms= XkbKeySymsPtr(xkb,key);
     if (nSyms>IBUF_SIZE) {
-	interps= _XkbTypedCalloc(nSyms,XkbSymInterpretPtr);
+	interps= xcalloc(nSyms, sizeof(XkbSymInterpretPtr));
 	if (interps==NULL) {
 	    interps= ibuf;
 	    nSyms= IBUF_SIZE;
diff --git a/xkb/ddxList.c b/xkb/ddxList.c
index 3ff3d81..bf49311 100644
--- a/xkb/ddxList.c
+++ b/xkb/ddxList.c
@@ -97,7 +97,7 @@ char *		tmp;
     if ((list->szPool-list->nPool)<wlen) {
 	if (wlen>1024)	list->szPool+= XkbPaddedSize(wlen*2);
 	else		list->szPool+= 1024;
-	list->pool= _XkbTypedRealloc(list->pool,list->szPool,char);
+	list->pool= xrealloc(list->pool, list->szPool * sizeof(char));
 	if (!list->pool)
 	    return BadAlloc;
     }
diff --git a/xkb/maprules.c b/xkb/maprules.c
index 168c527..ec6fe3f 100644
--- a/xkb/maprules.c
+++ b/xkb/maprules.c
@@ -474,7 +474,7 @@ int len;
     if ((!str1)||(!str2))
 	return str1;
     len= strlen(str1)+strlen(str2)+1;
-    str1= _XkbTypedRealloc(str1,len,char);
+    str1= xrealloc(str1,len * sizeof(char));
     if (str1)
 	strcat(str1,str2);
     return str1;
@@ -864,12 +864,12 @@ XkbRF_AddRule(XkbRF_RulesPtr	rules)
     if (rules->sz_rules<1) {
 	rules->sz_rules= 16;
 	rules->num_rules= 0;
-	rules->rules= _XkbTypedCalloc(rules->sz_rules,XkbRF_RuleRec);
+	rules->rules= xcalloc(rules->sz_rules, sizeof(XkbRF_RuleRec));
     }
     else if (rules->num_rules>=rules->sz_rules) {
 	rules->sz_rules*= 2;
-	rules->rules= _XkbTypedRealloc(rules->rules,rules->sz_rules,
-							XkbRF_RuleRec);
+	rules->rules= xrealloc(rules->rules,
+				rules->sz_rules * sizeof(XkbRF_RuleRec));
     }
     if (!rules->rules) {
 	rules->sz_rules= rules->num_rules= 0;
@@ -886,12 +886,12 @@ XkbRF_AddGroup(XkbRF_RulesPtr	rules)
     if (rules->sz_groups<1) {
 	rules->sz_groups= 16;
 	rules->num_groups= 0;
-	rules->groups= _XkbTypedCalloc(rules->sz_groups,XkbRF_GroupRec);
+	rules->groups= xcalloc(rules->sz_groups, sizeof(XkbRF_GroupRec));
     }
     else if (rules->num_groups >= rules->sz_groups) {
 	rules->sz_groups *= 2;
-	rules->groups= _XkbTypedRealloc(rules->groups,rules->sz_groups,
-							XkbRF_GroupRec);
+	rules->groups= xrealloc(rules->groups,
+				rules->sz_groups * sizeof(XkbRF_GroupRec));
     }
     if (!rules->groups) {
 	rules->sz_groups= rules->num_groups= 0;
@@ -972,7 +972,7 @@ Bool		ok;
 XkbRF_RulesPtr
 XkbRF_Create(void)
 {
-    return _XkbTypedCalloc(1, XkbRF_RulesRec);
+    return xcalloc(1, sizeof( XkbRF_RulesRec));
 }
 
 /***====================================================================***/
diff --git a/xkb/xkb.c b/xkb/xkb.c
index bfed114..ec26d6e 100644
--- a/xkb/xkb.c
+++ b/xkb/xkb.c
@@ -2777,9 +2777,8 @@ _XkbSetCompatMap(ClientPtr client, DeviceIntPtr dev,
 	XkbSymInterpretPtr	sym;
 	if ((unsigned)(req->firstSI+req->nSI)>compat->num_si) {
 	    compat->num_si= req->firstSI+req->nSI;
-	    compat->sym_interpret= _XkbTypedRealloc(compat->sym_interpret,
-						   compat->num_si,
-						   XkbSymInterpretRec);
+	    compat->sym_interpret= xrealloc(compat->sym_interpret,
+					    compat->num_si * sizeof(XkbSymInterpretRec));
 	    if (!compat->sym_interpret) {
 		compat->num_si= 0;
 		return BadAlloc;
@@ -6460,7 +6459,7 @@ _XkbSetDeviceInfoCheck(ClientPtr client, DeviceIntPtr dev,
 	nBtns= dev->button->numButtons;
 	acts= dev->button->xkb_acts;
 	if (acts==NULL) {
-	    acts= _XkbTypedCalloc(nBtns,XkbAction);
+	    acts= xcalloc(nBtns, sizeof(XkbAction));
 	    if (!acts)
 		return BadAlloc;
 	    dev->button->xkb_acts= acts;
diff --git a/xkb/xkbActions.c b/xkb/xkbActions.c
index b0ab427..75f3c72 100644
--- a/xkb/xkbActions.c
+++ b/xkb/xkbActions.c
@@ -1016,7 +1016,7 @@ register int	i;
 
     if (xkbi->szFilters==0) {
 	xkbi->szFilters = 4;
-	xkbi->filters = _XkbTypedCalloc(xkbi->szFilters,XkbFilterRec);
+	xkbi->filters = xcalloc(xkbi->szFilters, sizeof(XkbFilterRec));
 	/* 6/21/93 (ef) -- XXX! deal with allocation failure */
     }
     for (i=0;i<xkbi->szFilters;i++) {
@@ -1026,9 +1026,8 @@ register int	i;
 	}
     }
     xkbi->szFilters*=2;
-    xkbi->filters= _XkbTypedRealloc(xkbi->filters,
-                                    xkbi->szFilters,
-                                    XkbFilterRec);
+    xkbi->filters= xrealloc(xkbi->filters,
+                            xkbi->szFilters * sizeof(XkbFilterRec));
     /* 6/21/93 (ef) -- XXX! deal with allocation failure */
     bzero(&xkbi->filters[xkbi->szFilters/2],
             (xkbi->szFilters/2)*sizeof(XkbFilterRec));
diff --git a/xkb/xkbEvents.c b/xkb/xkbEvents.c
index 8fb49c1..58f75b3 100644
--- a/xkb/xkbEvents.c
+++ b/xkb/xkbEvents.c
@@ -1041,7 +1041,7 @@ XkbInterestPtr	interest;
 	    return ((interest->resource==id)?interest:NULL);
 	interest = interest->next;
     }
-    interest = _XkbTypedAlloc(XkbInterestRec);
+    interest = xalloc(sizeof(XkbInterestRec));
     bzero(interest,sizeof(XkbInterestRec));
     if (interest) {
 	interest->dev = dev;
diff --git a/xkb/xkbLEDs.c b/xkb/xkbLEDs.c
index 6ca80d7..3cf24e3 100644
--- a/xkb/xkbLEDs.c
+++ b/xkb/xkbLEDs.c
@@ -524,7 +524,7 @@ Bool			checkNames;
     sli= NULL;
     checkAccel= checkNames= False;
     if ((kf!=NULL)&&(kf->xkb_sli==NULL)) {
-	kf->xkb_sli= sli= _XkbTypedCalloc(1,XkbSrvLedInfoRec);
+	kf->xkb_sli= sli= xcalloc(1, sizeof(XkbSrvLedInfoRec));
 	if (sli==NULL)
 	    return NULL; /* ALLOCATION ERROR */
 	if (dev->key && dev->key->xkbInfo)
@@ -567,7 +567,7 @@ Bool			checkNames;
 	}
     }
     else if ((lf!=NULL)&&(lf->xkb_sli==NULL)) {
-	lf->xkb_sli= sli= _XkbTypedCalloc(1,XkbSrvLedInfoRec);
+	lf->xkb_sli= sli= xcalloc(1, sizeof(XkbSrvLedInfoRec));
 	if (sli==NULL)
 	    return NULL; /* ALLOCATION ERROR */
 	if (dev->key && dev->key->xkbInfo)
@@ -585,9 +585,9 @@ Bool			checkNames;
 	sli->names=		NULL;
     }
     if ((sli->names==NULL)&&(needed_parts&XkbXI_IndicatorNamesMask))
-	sli->names= _XkbTypedCalloc(XkbNumIndicators,Atom);
+	sli->names= xcalloc(XkbNumIndicators, sizeof(Atom));
     if ((sli->maps==NULL)&&(needed_parts&XkbXI_IndicatorMapsMask))
-	sli->maps= _XkbTypedCalloc(XkbNumIndicators,XkbIndicatorMapRec);
+	sli->maps= xcalloc(XkbNumIndicators, sizeof(XkbIndicatorMapRec));
     if (checkNames) {
 	register unsigned i,bit;
 	sli->namesPresent=	0;
@@ -633,7 +633,7 @@ XkbCopySrvLedInfo(	DeviceIntPtr		from,
     if (!src)
 	goto finish;
 
-    sli_new = _XkbTypedCalloc(1, XkbSrvLedInfoRec);
+    sli_new = xcalloc(1, sizeof( XkbSrvLedInfoRec));
     if (!sli_new)
 	goto finish;
 
@@ -644,8 +644,8 @@ XkbCopySrvLedInfo(	DeviceIntPtr		from,
 	sli_new->fb.lf = lf;
 
     if (!(sli_new->flags & XkbSLI_IsDefault)) {
-	sli_new->names= _XkbTypedCalloc(XkbNumIndicators,Atom);
-	sli_new->maps= _XkbTypedCalloc(XkbNumIndicators,XkbIndicatorMapRec);
+	sli_new->names= xcalloc(XkbNumIndicators, sizeof(Atom));
+	sli_new->maps= xcalloc(XkbNumIndicators, sizeof(XkbIndicatorMapRec));
     } /* else sli_new->names/maps is pointing to
 	dev->key->xkbInfo->desc->names->indicators;
 	dev->key->xkbInfo->desc->names->indicators; */
@@ -715,9 +715,9 @@ XkbSrvLedInfoPtr	sli;
 	}
     }
     if ((sli->names==NULL)&&(needed_parts&XkbXI_IndicatorNamesMask))
-	sli->names= _XkbTypedCalloc(XkbNumIndicators,Atom);
+	sli->names= xcalloc(XkbNumIndicators, sizeof(Atom));
     if ((sli->maps==NULL)&&(needed_parts&XkbXI_IndicatorMapsMask))
-	sli->maps= _XkbTypedCalloc(XkbNumIndicators,XkbIndicatorMapRec);
+	sli->maps= xcalloc(XkbNumIndicators, sizeof(XkbIndicatorMapRec));
     return sli;
 }
 
commit 0f2d297dedeff8bd227df4c498cc668b0e902344
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Jan 5 16:31:37 2010 +1000

    dix: EventToCore needs to copy the root window too.
    
    This value isn't actually set for normal events but it saves us some work
    for the record extension support.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/dix/eventconvert.c b/dix/eventconvert.c
index e25f3ee..878dba5 100644
--- a/dix/eventconvert.c
+++ b/dix/eventconvert.c
@@ -119,6 +119,7 @@ EventToCore(InternalEvent *event, xEvent *core)
                 core->u.keyButtonPointer.rootX = e->root_x;
                 core->u.keyButtonPointer.rootY = e->root_y;
                 core->u.keyButtonPointer.state = e->corestate;
+                core->u.keyButtonPointer.root = e->root;
                 EventSetKeyRepeatFlag(core, (e->type == ET_KeyPress && e->key_repeat));
             }
             break;


More information about the Xquartz-changes mailing list