xserver: Branch 'mpx' - 51 commits

Peter Hutterer whot at kemper.freedesktop.org
Thu Apr 12 04:54:54 EEST 2007


 GL/glx/glxdri.c                        |    6 
 GL/glx/glxext.c                        |    2 
 GL/glx/glxext.h                        |    2 
 GL/glx/indirect_size_get.c             |    6 
 GL/mesa/.gitignore                     |    2 
 GL/mesa/X/Makefile.am                  |    5 
 GL/mesa/X/xf86glx_util.c               |  149 -------------
 GL/mesa/X/xf86glx_util.h               |  105 ---------
 GL/symlink-mesa.sh                     |    5 
 Xext/sync.c                            |    2 
 Xext/xcmisc.c                          |   13 -
 Xext/xvmain.c                          |    8 
 Xext/xvmc.c                            |    2 
 Xi/stubs.c                             |   14 +
 config/config.c                        |  113 +++++++--
 configure.ac                           |   25 +-
 dix/atom.c                             |    6 
 dix/devices.c                          |   36 ++-
 dix/dispatch.c                         |    8 
 dix/dixfonts.c                         |    4 
 dix/dixutils.c                         |    4 
 dix/events.c                           |    8 
 dix/extension.c                        |    2 
 dix/getevents.c                        |   24 +-
 dix/initatoms.c                        |    2 
 dix/main.c                             |    2 
 dix/privates.c                         |   28 +-
 dix/resource.c                         |    4 
 exa/exa.c                              |    3 
 exa/exa.h                              |   19 +
 fb/Makefile.am                         |    2 
 fb/fbcmap.c                            |   91 -------
 fb/fbcmap_mi.c                         |  123 ++++++++++
 hw/darwin/Makefile.am                  |    6 
 hw/dmx/Makefile.am                     |    5 
 hw/dmx/input/dmxbackend.c              |   32 +-
 hw/dmx/input/dmxcommon.c               |   16 -
 hw/dmx/input/dmxconsole.c              |    9 
 hw/dmx/input/dmxdummy.c                |    2 
 hw/dmx/input/dmxevents.c               |  378 ++++++++++-----------------------
 hw/dmx/input/dmxinputinit.c            |   11 
 hw/kdrive/src/kinput.c                 |   13 +
 hw/vfb/Makefile.am                     |    4 
 hw/xfree86/common/xf86Config.c         |   12 -
 hw/xfree86/common/xf86Configure.c      |   15 -
 hw/xfree86/common/xf86DGA.c            |    3 
 hw/xfree86/common/xf86Events.c         |   10 
 hw/xfree86/common/xf86Helper.c         |    3 
 hw/xfree86/common/xf86Option.c         |    4 
 hw/xfree86/common/xf86Xinput.c         |   89 ++++++-
 hw/xfree86/dixmods/Makefile.am         |    8 
 hw/xfree86/doc/man/xorg.conf.man.pre   |    4 
 hw/xfree86/modes/xf86Crtc.c            |   69 ++++--
 hw/xfree86/modes/xf86Crtc.h            |    7 
 hw/xfree86/modes/xf86RandR12.c         |   22 +
 hw/xfree86/modes/xf86RandR12.h         |    1 
 hw/xfree86/os-support/bsd/Makefile.am  |    3 
 hw/xfree86/os-support/bsd/ppc_video.c  |   33 ++
 hw/xfree86/os-support/bus/linuxPci.c   |    4 
 hw/xfree86/os-support/linux/lnx_init.c |   14 -
 hw/xfree86/parser/Flags.c              |   28 +-
 hw/xfree86/parser/write.c              |   20 +
 hw/xfree86/utils/xorgcfg/text-mode.c   |    4 
 hw/xnest/Display.c                     |    2 
 hw/xnest/Events.c                      |    8 
 hw/xnest/Makefile.am                   |    4 
 hw/xprint/Makefile.am                  |    2 
 hw/xprint/ddxInit.c                    |    6 
 include/input.h                        |    5 
 mi/micmap.c                            |    4 
 mi/mieq.c                              |    6 
 os/log.c                               |    4 
 os/oscolor.c                           |    2 
 os/utils.c                             |    8 
 randr/rrscreen.c                       |   31 ++
 render/glyph.c                         |    4 
 76 files changed, 869 insertions(+), 871 deletions(-)

New commits:
diff-tree 547d720938b3668666d60110d79b150b1e9325c6 (from d4dad6f84f82a4ade5005c3aa93511c1295875b8)
Author: Peter Hutterer <peter at cs.unisa.edu.au>
Date:   Thu Apr 12 11:16:19 2007 +0930

    Remove workaround for a NULL core pointer in ProcessInputEvents.
    
    This workaround is obsolete with 33a5d9605e3e282f6aa1921d7321a2a12ef02c42

diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c
index f826b3b..8458899 100644
--- a/hw/xfree86/common/xf86Events.c
+++ b/hw/xfree86/common/xf86Events.c
@@ -247,13 +247,9 @@ ProcessInputEvents ()
 
   mieqProcessInputEvents();
 
-  /* PIE can be called after devices have been shut down. Blame DGA. */
-  if (inputInfo.pointer)
-  {
-      /* FIXME: This is a problem if we have multiple pointers */
-      miPointerGetPosition(inputInfo.pointer, &x, &y);
-      xf86SetViewport(xf86Info.currentScreen, x, y);
-  }
+  /* FIXME: This is a problem if we have multiple pointers */
+  miPointerGetPosition(inputInfo.pointer, &x, &y);
+  xf86SetViewport(xf86Info.currentScreen, x, y);
 }
 
 void
diff-tree d4dad6f84f82a4ade5005c3aa93511c1295875b8 (from parents)
Merge: f1f8b562aaaa6ec32ab0d0697f964d92d6d536a4 33a5d9605e3e282f6aa1921d7321a2a12ef02c42
Author: Peter Hutterer <peter at cs.unisa.edu.au>
Date:   Thu Apr 12 11:11:03 2007 +0930

    Merge branch 'master' into mpx
    
    Conflicts:
    
    	configure.ac
    	dix/events.c
    	hw/xfree86/common/xf86Xinput.c

diff --cc dix/devices.c
index 0a91997,c2d4f22..6edf138
@@@ -364,16 -325,8 +376,16 @@@
      return Success;
  }
  
 +/**
 + * Initialize a virtual core keyboard and a virtual core pointer. 
 + *
 + * Both devices are not tied to physical devices, but guarantee that there is
 + * always a keyboard and a pointer present and keep the protocol semantics.
 + * Both core devices are NOT part of the device list and act only as a
 + * fallback if no physical device is available.
 + */
  void
- InitCoreDevices()
+ InitCoreDevices(void)
  {
      DeviceIntPtr dev;
  
@@@ -452,15 -384,8 +464,15 @@@
      }
  }
  
 +/**
 + * Activate and enable all devices. 
 + *
 + * After InitAndStartDevices() all devices are finished with their setup
 + * routines and start emitting events.
 + * Each physical keyboard is paired with the first available unpaired pointer.
 + */
  int
- InitAndStartDevices()
+ InitAndStartDevices(void)
  {
      DeviceIntPtr dev, next;
  
@@@ -716,10 -598,8 +734,10 @@@
  }
  
  int
- NumMotionEvents()
+ NumMotionEvents(void)
  {
 +    /* only called to fill data in initial connection reply. 
 +     * VCP is ok here, it is the only fixed device we have. */
      return inputInfo.pointer->valuator->numMotionEvents;
  }
  
diff --cc dix/events.c
index 94e60dc,093a316..46905aa
@@@ -2190,15 -2047,9 +2190,15 @@@
  }
  
  _X_EXPORT void
- WindowsRestructured()
+ WindowsRestructured(void)
  {
 -    (void) CheckMotion((xEvent *)NULL);
 +    DeviceIntPtr pDev = inputInfo.devices;
 +    while(pDev)
 +    {
 +        if (DevHasCursor(pDev))
 +            CheckMotion((xEvent *)NULL, pDev);
 +        pDev = pDev->next;
 +    }
  }
  
  #ifdef PANORAMIX
diff --cc hw/xfree86/common/xf86Xinput.c
index cc98a0c,6ebb087..6a5d4ee
@@@ -381,17 -365,12 +394,22 @@@
              }
          }
      }
+     if(!idev->driver || !idev->identifier) {
+         xf86Msg(X_ERROR, "No input driver/identifier specified (ignoring)\n");
+         rval = BadRequest;
+         goto unwind;
+     }
  
 +    if (!drv) {
 +        xf86Msg(X_ERROR, "No input driver specified (ignoring)\n");
 +        return BadMatch;
 +    }
 +
 +    if (!idev->identifier) {
 +        xf86Msg(X_ERROR, "No device identifier specified (ignoring)\n");
 +        return BadMatch;
 +    }
 +
      if (!drv->PreInit) {
          xf86Msg(X_ERROR,
                  "Input driver `%s' has no PreInit function (ignoring)\n",
@@@ -425,13 -409,43 +448,49 @@@
      if (dev->inited && dev->startup)
          EnableDevice(dev);
  
 +    if (!IsPointerDevice(dev))
 +        PairDevices(NULL, GuessFreePointerDevice(), dev);
 +
 +    /* send enter/leave event, update sprite window */
 +    CheckMotion(NULL, dev);
 +
+     *pdev = dev;
      return Success;
+ 
+ unwind:
+     if(pInfo) {
+         if(drv->UnInit)
+             drv->UnInit(drv, pInfo, 0);
+         else
+             xf86DeleteInput(pInfo, 0);
+     }
+     if(idev->driver)
+         xfree(idev->driver);
+     if(idev->identifier)
+         xfree(idev->identifier);
+     xf86optionListFree(idev->commonOptions);
+     xfree(idev);
+     return rval;
+ }
+ 
+ void
+ DeleteInputDeviceRequest(DeviceIntPtr pDev)
+ {
+     LocalDevicePtr pInfo = (LocalDevicePtr) pDev->public.devicePrivate;
+     InputDriverPtr drv = pInfo->drv;
+     IDevRec *idev = pInfo->conf_idev;
+ 
+     RemoveDevice(pDev);
+ 
+     if(drv->UnInit)
+         drv->UnInit(drv, pInfo, 0);
+     else
+         xf86DeleteInput(pInfo, 0);
+ 
+     xfree(idev->driver);
+     xfree(idev->identifier);
+     xf86optionListFree(idev->commonOptions);
+     xfree(idev);
  }
  
  /* 
diff --cc include/input.h
index 2debce9,b399d3a..4ba0cad
@@@ -447,45 -443,12 +447,48 @@@
  extern DeviceIntPtr LookupDeviceIntRec(
      CARD8 deviceid);
  
 +/* Pairing input devices */
 +extern int PairDevices(ClientPtr client, 
 +                       DeviceIntPtr pointer, 
 +                       DeviceIntPtr keyboard);
 +
 +extern DeviceIntPtr GetPairedPointer(DeviceIntPtr kbd);
 +extern DeviceIntPtr GetPairedKeyboard(DeviceIntPtr ptr);
 +
 +extern Bool RegisterPairingClient(ClientPtr client);
 +extern Bool UnregisterPairingClient(ClientPtr client);
 +
 +extern DeviceIntPtr GuessFreePointerDevice(void);
 +
 +/* Window/device based access control */
 +extern Bool ACRegisterClient(ClientPtr client);
 +extern Bool ACUnregisterClient(ClientPtr client);
 +extern int ACClearWindowAccess(ClientPtr client,
 +                        WindowPtr win,
 +                        int what);
 +extern int ACChangeWindowAccess(ClientPtr client, 
 +                                WindowPtr win, 
 +                                int defaultRule,
 +                                DeviceIntPtr* perm_devices,
 +                                int npermit,
 +                                DeviceIntPtr* deny_devices,
 +                                int ndeny);
 +extern void ACQueryWindowAccess(WindowPtr win, 
 +                                int* defaultRule,
 +                                DeviceIntPtr** perm,
 +                                int* nperm,
 +                                DeviceIntPtr** deny,
 +                                int* ndeny);
 +
 +extern Bool ACDeviceAllowed(WindowPtr win, 
 +                            DeviceIntPtr dev);
 +
  /* Implemented by the DDX. */
  extern int NewInputDeviceRequest(
-     InputOption *options);
+     InputOption *options,
+     DeviceIntPtr *dev);
+ extern void DeleteInputDeviceRequest(
+     DeviceIntPtr dev);
  
  extern void DDXRingBell(
      int volume,
diff-tree 33a5d9605e3e282f6aa1921d7321a2a12ef02c42 (from 0910540e4322bba72a2fa0a907072eab2547a7b6)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Wed Apr 11 18:28:57 2007 +0300

    XFree86: DGA: Don't call ProcessInputEvents from CloseScreen
    
    By the time CloseScreen gets called, we can't call ProcessInputEvents, as
    the event queue will get unhappy.  So just unregister our hooks instantly,
    and hope that they don't get called.

diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
index 43db1ee..9474ec8 100644
--- a/hw/xfree86/common/xf86DGA.c
+++ b/hw/xfree86/common/xf86DGA.c
@@ -249,14 +249,11 @@ DGACloseScreen(int i, ScreenPtr pScreen)
    DGAScreenPtr pScreenPriv = DGA_GET_SCREEN_PRIV(pScreen);
 
    if (XDGAEventBase) {
-       OsBlockSignals();
-       ProcessInputEvents();
        mieqSetHandler(*XDGAEventBase + MotionNotify, NULL);
        mieqSetHandler(*XDGAEventBase + ButtonPress, NULL);
        mieqSetHandler(*XDGAEventBase + ButtonRelease, NULL);
        mieqSetHandler(*XDGAEventBase + KeyPress, NULL);
        mieqSetHandler(*XDGAEventBase + KeyRelease, NULL);
-       OsReleaseSignals();
     }
 
    FreeMarkedVisuals(pScreen);
diff-tree 0910540e4322bba72a2fa0a907072eab2547a7b6 (from aecbc712144dd1aaf462bd758821438b1d22d957)
Author: Remigiusz Marcinkiewicz <enleth at enleth.com>
Date:   Wed Apr 11 01:09:26 2007 +0300

    Config: Extend D-BUS API
    
    Return device ID where available.
    Add listDevices call, which does what it says on the box.

diff --git a/config/config.c b/config/config.c
index aae5c6e..9828091 100644
--- a/config/config.c
+++ b/config/config.c
@@ -92,12 +92,15 @@ configTeardown(void)
 }
 
 static int
-configAddDevice(DBusMessage *message, DBusMessageIter *iter, DBusError *error)
+configAddDevice(DBusMessage *message, DBusMessageIter *iter, 
+                DBusMessage *reply, DBusMessageIter *r_iter,
+                DBusError *error)
 {
     DBusMessageIter subiter;
     InputOption *tmpo = NULL, *options = NULL;
     char *tmp = NULL;
     int ret = BadMatch;
+    DeviceIntPtr dev = NULL;
 
     DebugF("[config] adding device\n");
 
@@ -165,12 +168,28 @@ configAddDevice(DBusMessage *message, DB
         dbus_message_iter_next(iter);
     }
 
-    ret = NewInputDeviceRequest(options);
-    if (ret != Success)
+    ret = NewInputDeviceRequest(options, &dev);
+    if (ret != Success) {
         DebugF("[config] NewInputDeviceRequest failed\n");
+        goto unwind;
+    }
+
+    if (!dev) {
+        DebugF("[config] NewInputDeviceRequest succeeded, without device\n"); 
+        ret = BadMatch;
+        goto unwind;
+    }
+
+    if (!dbus_message_iter_append_basic(r_iter, DBUS_TYPE_INT32, &(dev->id))) {
+        ErrorF("[config] couldn't append to iterator\n");
+        ret = BadAlloc;
+        goto unwind;
+    }
 
-    /* Fall through, must deallocate memory we've allocated */
 unwind:
+    if (dev && ret != Success)
+        RemoveDevice(dev);
+
     while (options) {
         tmpo = options;
         options = options->next;
@@ -218,17 +237,47 @@ unwind:
     return ret;
 }
 
+static int
+configListDevices(DBusMessage *message, DBusMessageIter *iter,
+                   DBusMessage *reply, DBusMessageIter *r_iter,
+                   DBusError *error)
+{
+    DeviceIntPtr d;
+    int ret = BadMatch;
+
+    for (d = inputInfo.devices; d; d = d->next) {
+        if (!dbus_message_iter_append_basic(r_iter, DBUS_TYPE_INT32,
+                                            &(d->id))) {
+            ErrorF("[config] couldn't append to iterator\n");
+            ret = BadAlloc;
+            goto unwind;
+        }
+        if (!dbus_message_iter_append_basic(r_iter, DBUS_TYPE_STRING,
+                                            &(d->name))) {
+            ErrorF("[config] couldn't append to iterator\n");
+            ret = BadAlloc;
+            goto unwind;
+        }
+    }
+
+unwind:
+    return ret;
+}
+
 static DBusHandlerResult
 configMessage(DBusConnection *connection, DBusMessage *message, void *closure)
 {
     DBusMessageIter iter;
     DBusError error;
     DBusMessage *reply;
+    DBusMessageIter r_iter;
     DBusConnection *bus = closure;
     int ret = BadDrawable; /* nonsensical value */
 
     dbus_error_init(&error);
 
+    DebugF("[config] received a message\n");
+
     if (strcmp(dbus_message_get_interface(message),
                "org.x.config.input") == 0) {
         if (!dbus_message_iter_init(message, &iter)) {
@@ -237,26 +286,33 @@ configMessage(DBusConnection *connection
             return DBUS_HANDLER_RESULT_NEED_MEMORY; /* ?? */
         }
 
+        if (!(reply = dbus_message_new_method_return(message))) {
+            ErrorF("[config] failed to create the reply message\n");
+            dbus_error_free(&error);
+            return DBUS_HANDLER_RESULT_NEED_MEMORY;
+        }
+        dbus_message_iter_init_append(reply, &r_iter);
+        
         if (strcmp(dbus_message_get_member(message), "add") == 0)
-            ret = configAddDevice(message, &iter, &error);
+            ret = configAddDevice(message, &iter, reply, &r_iter, &error);
         else if (strcmp(dbus_message_get_member(message), "remove") == 0)
             ret = configRemoveDevice(message, &iter, &error);
+        else if (strcmp(dbus_message_get_member(message), "listDevices") == 0)
+            ret = configListDevices(message, &iter, reply, &r_iter, &error);
         if (ret != BadDrawable && ret != BadAlloc) {
-            reply = dbus_message_new_method_return(message);
-            dbus_message_iter_init_append(reply, &iter);
 
-            if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret)) {
-                ErrorF("[config] couldn't append to iterator\n");
-                dbus_error_free(&error);
-                return DBUS_HANDLER_RESULT_HANDLED;
-            }
+            if (!strlen(dbus_message_get_signature(reply)))
+                if (!dbus_message_iter_append_basic(&r_iter, DBUS_TYPE_INT32, &ret)) {
+                    ErrorF("[config] couldn't append to iterator\n");
+                    dbus_error_free(&error);
+                    return DBUS_HANDLER_RESULT_HANDLED;
+                }
 
             if (!dbus_connection_send(bus, reply, NULL))
                 ErrorF("[config] failed to send reply\n");
-            dbus_connection_flush(bus);
-
-            dbus_message_unref(reply);
         }
+        dbus_message_unref(reply);
+        dbus_connection_flush(bus);
     }
 
     dbus_error_free(&error);
diff-tree aecbc712144dd1aaf462bd758821438b1d22d957 (from 4f05f9591e5492c72f3856bd7a2ff13378f59f2b)
Author: Remigiusz Marcinkiewicz <enleth at enleth.com>
Date:   Wed Apr 11 00:38:16 2007 +0300

    Input: Allow a pointer to a device to be returned in NIDR
    
    Allow a pointer to the first device added to be returned, so we know which
    device(s) were added by the NIDR call.

diff --git a/Xi/stubs.c b/Xi/stubs.c
index d425fe9..40cd02f 100644
--- a/Xi/stubs.c
+++ b/Xi/stubs.c
@@ -226,7 +226,7 @@ ChangeDeviceControl(ClientPtr client, De
  *
  */
 int
-NewInputDeviceRequest(InputOption *options)
+NewInputDeviceRequest(InputOption *options, DeviceIntPtr *pdev)
 {
     return BadValue;
 }
diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c
index a9a743b..7edcc51 100644
--- a/hw/kdrive/src/kinput.c
+++ b/hw/kdrive/src/kinput.c
@@ -2307,7 +2307,7 @@ ChangeDeviceControl(register ClientPtr c
 }
 
 int
-NewInputDeviceRequest(InputOption *options)
+NewInputDeviceRequest(InputOption *options, DeviceIntPtr *pdev)
 {
     InputOption *option = NULL;
     KdPointerInfo *pi = NULL;
@@ -2372,6 +2372,12 @@ NewInputDeviceRequest(InputOption *optio
         }
     }
 
+    if (pi) {
+        *pdev = pi->dixdev;
+    } else if(ki) {
+        *pdev = ki->dixdev;
+    }
+
     return Success;
 }
 
diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index f662c17..6ebb087 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -315,7 +315,7 @@ AddOtherInputDevices()
 #endif
 
 int
-NewInputDeviceRequest (InputOption *options)
+NewInputDeviceRequest (InputOption *options, DeviceIntPtr *pdev)
 {
     IDevRec *idev = NULL;
     InputDriverPtr drv = NULL;
@@ -409,6 +409,7 @@ NewInputDeviceRequest (InputOption *opti
     if (dev->inited && dev->startup)
         EnableDevice(dev);
 
+    *pdev = dev;
     return Success;
 
 unwind:
diff --git a/include/input.h b/include/input.h
index 1e65709..b399d3a 100644
--- a/include/input.h
+++ b/include/input.h
@@ -445,7 +445,8 @@ extern DeviceIntPtr LookupDeviceIntRec(
 
 /* Implemented by the DDX. */
 extern int NewInputDeviceRequest(
-    InputOption *options);
+    InputOption *options,
+    DeviceIntPtr *dev);
 extern void DeleteInputDeviceRequest(
     DeviceIntPtr dev);
 
diff-tree 4f05f9591e5492c72f3856bd7a2ff13378f59f2b (from 20674dcbb2373a0af287883bc008fb6fb23d4466)
Author: Magnus Vigerlöf <Magnus.Vigerlof at home.se>
Date:   Tue Apr 10 23:57:48 2007 +0300

    Input: Always add devices with first available ID
    
    Scan the device list when adding a new device, and make sure we can use
    the first available ID, instead of always incrementing.

diff --git a/dix/devices.c b/dix/devices.c
index 004cb13..c2d4f22 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -86,15 +86,27 @@ DeviceIntPtr
 AddInputDevice(DeviceProc deviceProc, Bool autoStart)
 {
     DeviceIntPtr dev, *prev; /* not a typo */
+    DeviceIntPtr devtmp;
+    int devid;
+    char devind[MAX_DEVICES];
+
+    /* Find next available id */
+    memset(devind, 0, sizeof(char)*MAX_DEVICES);
+    for (devtmp = inputInfo.devices; devtmp; devtmp = devtmp->next)
+	devind[devtmp->id]++;
+    for (devtmp = inputInfo.off_devices; devtmp; devtmp = devtmp->next)
+	devind[devtmp->id]++;
+    for (devid = 0; devid < MAX_DEVICES && devind[devid]; devid++)
+	;
 
-    if (inputInfo.numDevices >= MAX_DEVICES)
+    if (devid >= MAX_DEVICES)
 	return (DeviceIntPtr)NULL;
     dev = (DeviceIntPtr) xcalloc(sizeof(DeviceIntRec), 1);
     if (!dev)
 	return (DeviceIntPtr)NULL;
     dev->name = (char *)NULL;
     dev->type = 0;
-    dev->id = inputInfo.numDevices;
+    dev->id = devid;
     inputInfo.numDevices++;
     dev->public.on = FALSE;
     dev->public.processInputProc = (ProcessInputProc)NoopDDA;
@@ -572,6 +584,7 @@ RemoveDevice(DeviceIntPtr dev)
     }
     
     if (ret == Success) {
+        inputInfo.numDevices--;
         ev.type = DevicePresenceNotify;
         ev.time = currentTime.milliseconds;
         ev.devchange = 0;
diff-tree 20674dcbb2373a0af287883bc008fb6fb23d4466 (from 82962bbae2b4fda274625d1712ef839ce1ab9dc8)
Author: Magnus Vigerlöf <Magnus.Vigerlof at home.se>
Date:   Tue Apr 10 23:55:36 2007 +0300

    Config: Fix memory leaks
    
    Fix memory leaks that could occur along the error path.

diff --git a/config/config.c b/config/config.c
index b8d2428..aae5c6e 100644
--- a/config/config.c
+++ b/config/config.c
@@ -110,6 +110,11 @@ configAddDevice(DBusMessage *message, DB
 
     options->key = xstrdup("_source");
     options->value = xstrdup("client/dbus");
+    if(!options->key || !options->value) {
+        ErrorF("[config] couldn't allocate first key/value pair\n");
+        ret = BadAlloc;
+        goto unwind;
+    }
 
     while (dbus_message_iter_get_arg_type(iter) == DBUS_TYPE_ARRAY) {
         tmpo = (InputOption *) xcalloc(sizeof(InputOption), 1);
@@ -118,6 +123,8 @@ configAddDevice(DBusMessage *message, DB
             ret = BadAlloc;
             goto unwind;
         }
+        tmpo->next = options;
+        options = tmpo;
 
         dbus_message_iter_recurse(iter, &subiter);
 
@@ -132,8 +139,8 @@ configAddDevice(DBusMessage *message, DB
                    tmp);
             MALFORMED_MESSAGE();
         }
-        tmpo->key = xstrdup(tmp);
-        if (!tmpo->key) {
+        options->key = xstrdup(tmp);
+        if (!options->key) {
             ErrorF("[config] couldn't duplicate key!\n");
             ret = BadAlloc;
             goto unwind;
@@ -148,15 +155,13 @@ configAddDevice(DBusMessage *message, DB
         dbus_message_iter_get_basic(&subiter, &tmp);
         if (!tmp)
             MALFORMED_MESSAGE();
-        tmpo->value = xstrdup(tmp);
-        if (!tmpo->value) {
+        options->value = xstrdup(tmp);
+        if (!options->value) {
             ErrorF("[config] couldn't duplicate option!\n");
             ret = BadAlloc;
             goto unwind;
         }
 
-        tmpo->next = options;
-        options = tmpo;
         dbus_message_iter_next(iter);
     }
 
@@ -164,16 +169,8 @@ configAddDevice(DBusMessage *message, DB
     if (ret != Success)
         DebugF("[config] NewInputDeviceRequest failed\n");
 
-    return ret;
-
+    /* Fall through, must deallocate memory we've allocated */
 unwind:
-    if (tmpo->key)
-        xfree(tmpo->key);
-    if (tmpo->value)
-        xfree(tmpo->value);
-    if (tmpo)
-        xfree(tmpo);
-
     while (options) {
         tmpo = options;
         options = options->next;
diff-tree 82962bbae2b4fda274625d1712ef839ce1ab9dc8 (from 7b82a836c66ba88566255052caff63577e1a0384)
Author: Magnus Vigerlöf <Magnus.Vigerlof at home.se>
Date:   Tue Apr 10 23:54:32 2007 +0300

    Input: Add DeleteInputDeviceRequest
    
    Add DIDR, which asks the DDX to remove a device, analogous to
    NewInputDeviceRequest.  Only implemented for XFree86 at the moment.

diff --git a/Xi/stubs.c b/Xi/stubs.c
index ed041b8..d425fe9 100644
--- a/Xi/stubs.c
+++ b/Xi/stubs.c
@@ -230,3 +230,15 @@ NewInputDeviceRequest(InputOption *optio
 {
     return BadValue;
 }
+
+/****************************************************************************
+ *
+ * Caller: configRemoveDevice (and others)
+ *
+ * Remove the specified device previously added.
+ *
+ */
+void
+DeleteInputDeviceRequest(DeviceIntPtr dev)
+{
+}
diff --git a/config/config.c b/config/config.c
index d72b588..b8d2428 100644
--- a/config/config.c
+++ b/config/config.c
@@ -212,7 +212,7 @@ configRemoveDevice(DBusMessage *message,
      * already been removed. */
     OsBlockSignals();
     ProcessInputEvents();
-    RemoveDevice(pDev);
+    DeleteInputDeviceRequest(pDev);
     OsReleaseSignals();
 
     return Success;
diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c
index 857f04f..a9a743b 100644
--- a/hw/kdrive/src/kinput.c
+++ b/hw/kdrive/src/kinput.c
@@ -2374,3 +2374,8 @@ NewInputDeviceRequest(InputOption *optio
 
     return Success;
 }
+
+void
+DeleteInputDeviceRequest(DeviceIntPtr pDev)
+{
+}
diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c
index 913735b..e0b758f 100644
--- a/hw/xfree86/common/xf86Helper.c
+++ b/hw/xfree86/common/xf86Helper.c
@@ -371,8 +371,11 @@ xf86DeleteInput(InputInfoPtr pInp, int f
     if (pInp->drv)
 	pInp->drv->refCount--;
 
+    /* This should *really* be handled in drv->UnInit(dev) call instead */
+#if 0
     if (pInp->private)
 	xfree(pInp->private);
+#endif
 
     /* Remove the entry from the list. */
     if (pInp == xf86InputDevs)
diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index 3800d9a..f662c17 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -427,6 +427,26 @@ unwind:
     return rval;
 }
 
+void
+DeleteInputDeviceRequest(DeviceIntPtr pDev)
+{
+    LocalDevicePtr pInfo = (LocalDevicePtr) pDev->public.devicePrivate;
+    InputDriverPtr drv = pInfo->drv;
+    IDevRec *idev = pInfo->conf_idev;
+
+    RemoveDevice(pDev);
+
+    if(drv->UnInit)
+        drv->UnInit(drv, pInfo, 0);
+    else
+        xf86DeleteInput(pInfo, 0);
+
+    xfree(idev->driver);
+    xfree(idev->identifier);
+    xf86optionListFree(idev->commonOptions);
+    xfree(idev);
+}
+
 /* 
  * convenient functions to post events
  */
diff --git a/include/input.h b/include/input.h
index fc607d3..1e65709 100644
--- a/include/input.h
+++ b/include/input.h
@@ -446,6 +446,8 @@ extern DeviceIntPtr LookupDeviceIntRec(
 /* Implemented by the DDX. */
 extern int NewInputDeviceRequest(
     InputOption *options);
+extern void DeleteInputDeviceRequest(
+    DeviceIntPtr dev);
 
 extern void DDXRingBell(
     int volume,
diff-tree 7b82a836c66ba88566255052caff63577e1a0384 (from 4771fa8747791498e504d73afccfb5833499a38b)
Author: Magnus Vigerlöf <Magnus.Vigerlof at home.se>
Date:   Tue Apr 10 23:52:08 2007 +0300

    XFree86: Fix memory leaks, option parsing, in NewInputDeviceRequest
    
    Plugged some possible memory leaks, and added some more checks on the
    options, particular for driver/identifier.  Added an unwind.

diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index 17ffed8..3800d9a 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -322,6 +322,7 @@ NewInputDeviceRequest (InputOption *opti
     InputInfoPtr pInfo = NULL;
     InputOption *option = NULL;
     DeviceIntPtr dev = NULL;
+    int rval = Success;
 
     idev = xcalloc(sizeof(*idev), 1);
     if (!idev)
@@ -329,64 +330,101 @@ NewInputDeviceRequest (InputOption *opti
 
     for (option = options; option; option = option->next) {
         if (strcmp(option->key, "driver") == 0) {
-            if (!xf86LoadOneModule(option->value, NULL))
-                return BadName;
+            if (idev->driver) {
+                rval = BadRequest;
+                goto unwind;
+            }
+            /* Memory leak for every attached device if we don't
+             * test if the module is already loaded first */
             drv = xf86LookupInputDriver(option->value);
+            if (!drv)
+                if(xf86LoadOneModule(option->value, NULL))
+                    drv = xf86LookupInputDriver(option->value);
             if (!drv) {
                 xf86Msg(X_ERROR, "No input driver matching `%s'\n",
                         option->value);
-                return BadName;
+                rval = BadName;
+                goto unwind;
             }
             idev->driver = xstrdup(option->value);
             if (!idev->driver) {
-                xfree(idev);
-                return BadAlloc;
+                rval = BadAlloc;
+                goto unwind;
             }
         }
         if (strcmp(option->key, "name") == 0 ||
             strcmp(option->key, "identifier") == 0) {
+            if (idev->identifier) {
+                rval = BadRequest;
+                goto unwind;
+            }
             idev->identifier = xstrdup(option->value);
             if (!idev->identifier) {
-                xfree(idev);
-                return BadAlloc;
+                rval = BadAlloc;
+                goto unwind;
             }
         }
     }
+    if(!idev->driver || !idev->identifier) {
+        xf86Msg(X_ERROR, "No input driver/identifier specified (ignoring)\n");
+        rval = BadRequest;
+        goto unwind;
+    }
 
     if (!drv->PreInit) {
         xf86Msg(X_ERROR,
                 "Input driver `%s' has no PreInit function (ignoring)\n",
                 drv->driverName);
-        return BadImplementation;
+        rval = BadImplementation;
+        goto unwind;
     }
 
-    idev->commonOptions = NULL;
-    for (option = options; option; option = option->next)
+    for (option = options; option; option = option->next) {
+        /* Steal option key/value strings from the provided list.
+         * We need those strings, the InputOption list doesn't. */
         idev->commonOptions = xf86addNewOption(idev->commonOptions,
                                                option->key, option->value);
-    idev->extraOptions = NULL;
+        option->key = NULL;
+        option->value = NULL;
+    }
 
     pInfo = drv->PreInit(drv, idev, 0);
 
     if (!pInfo) {
         xf86Msg(X_ERROR, "PreInit returned NULL for \"%s\"\n", idev->identifier);
-        return BadMatch;
+        rval = BadMatch;
+        goto unwind;
     }
     else if (!(pInfo->flags & XI86_CONFIGURED)) {
         xf86Msg(X_ERROR, "PreInit failed for input device \"%s\"\n",
                 idev->identifier);
-        xf86DeleteInput(pInfo, 0);
-        return BadMatch;
+        rval = BadMatch;
+        goto unwind;
     }
 
     xf86ActivateDevice(pInfo);
 
     dev = pInfo->dev;
-    dev->inited = ((*dev->deviceProc)(dev, DEVICE_INIT) == Success);
+    ActivateDevice(dev);
     if (dev->inited && dev->startup)
         EnableDevice(dev);
 
     return Success;
+
+unwind:
+    if(pInfo) {
+        if(drv->UnInit)
+            drv->UnInit(drv, pInfo, 0);
+        else
+            xf86DeleteInput(pInfo, 0);
+    }
+    if(idev->driver)
+        xfree(idev->driver);
+    if(idev->identifier)
+        xfree(idev->identifier);
+    xf86optionListFree(idev->commonOptions);
+    xfree(idev);
+    return rval;
 }
 
 /* 
diff-tree 4771fa8747791498e504d73afccfb5833499a38b (from 07c56abf84080c020a3e7b7703a447c7f996975c)
Author: Magnus Vigerlöf <Magnus.Vigerlof at home.se>
Date:   Tue Apr 10 23:48:00 2007 +0300

    XFree86: Fix memory leak in option parsing
    
    Fix option parsing functions and callers thereof to not leak memory.

diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index cbeda0b..0421bf9 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -1271,7 +1271,7 @@ checkCoreInputDevices(serverLayoutPtr se
 			      (count + 1) * sizeof(IDevRec));
 	    indp[count - 1] = Pointer;
 	    indp[count - 1].extraOptions =
-				xf86addNewOption(NULL, "CorePointer", NULL);
+				xf86addNewOption(NULL, xnfstrdup("CorePointer"), NULL);
 	    indp[count].identifier = NULL;
 	    servlayoutp->inputs = indp;
 	}
@@ -1310,7 +1310,7 @@ checkCoreInputDevices(serverLayoutPtr se
 			      (count + 1) * sizeof(IDevRec));
 	    indp[count - 1] = Pointer;
 	    indp[count - 1].extraOptions =
-				xf86addNewOption(NULL, "AlwaysCore", NULL);
+				xf86addNewOption(NULL, xnfstrdup("AlwaysCore"), NULL);
 	    indp[count].identifier = NULL;
 	    servlayoutp->inputs = indp;
 	}
@@ -1401,7 +1401,7 @@ checkCoreInputDevices(serverLayoutPtr se
 			      (count + 1) * sizeof(IDevRec));
 	    indp[count - 1] = Keyboard;
 	    indp[count - 1].extraOptions =
-				xf86addNewOption(NULL, "CoreKeyboard", NULL);
+				xf86addNewOption(NULL, xnfstrdup("CoreKeyboard"), NULL);
 	    indp[count].identifier = NULL;
 	    servlayoutp->inputs = indp;
 	}
diff --git a/hw/xfree86/common/xf86Configure.c b/hw/xfree86/common/xf86Configure.c
index 4b482df..7b04bd6 100644
--- a/hw/xfree86/common/xf86Configure.c
+++ b/hw/xfree86/common/xf86Configure.c
@@ -309,13 +309,16 @@ configureInputSection (void)
     mouse->inp_identifier = "Mouse0";
     mouse->inp_driver = "mouse";
     mouse->inp_option_lst = 
-		xf86addNewOption(mouse->inp_option_lst, "Protocol", DFLT_MOUSE_PROTO);
+		xf86addNewOption(mouse->inp_option_lst, xstrdup("Protocol"),
+				xstrdup(DFLT_MOUSE_PROTO));
 #ifndef __SCO__
     mouse->inp_option_lst = 
-		xf86addNewOption(mouse->inp_option_lst, "Device", DFLT_MOUSE_DEV);
+		xf86addNewOption(mouse->inp_option_lst, xstrdup("Device"),
+				xstrdup(DFLT_MOUSE_DEV));
 #endif
     mouse->inp_option_lst = 
-		xf86addNewOption(mouse->inp_option_lst, "ZAxisMapping", "4 5 6 7");
+		xf86addNewOption(mouse->inp_option_lst, xstrdup("ZAxisMapping"),
+				xstrdup("4 5 6 7"));
     ptr = (XF86ConfInputPtr)xf86addListItem((glp)ptr, (glp)mouse);
     return ptr;
 }
@@ -519,7 +522,7 @@ configureLayoutSection (void)
 	iptr->iref_option_lst = NULL;
 	iptr->iref_inputdev_str = "Mouse0";
 	iptr->iref_option_lst =
-		xf86addNewOption (iptr->iref_option_lst, "CorePointer", NULL);
+		xf86addNewOption (iptr->iref_option_lst, xstrdup("CorePointer"), NULL);
 	ptr->lay_input_lst = (XF86ConfInputrefPtr)
 		xf86addListItem ((glp) ptr->lay_input_lst, (glp) iptr);
     }
@@ -532,7 +535,7 @@ configureLayoutSection (void)
 	iptr->iref_option_lst = NULL;
 	iptr->iref_inputdev_str = "Keyboard0";
 	iptr->iref_option_lst =
-		xf86addNewOption (iptr->iref_option_lst, "CoreKeyboard", NULL);
+		xf86addNewOption (iptr->iref_option_lst, xstrdup("CoreKeyboard"), NULL);
 	ptr->lay_input_lst = (XF86ConfInputrefPtr)
 		xf86addListItem ((glp) ptr->lay_input_lst, (glp) iptr);
     }
@@ -751,7 +754,7 @@ configureDDCMonitorSection (int screennu
     }
 
     if (ConfiguredMonitor->features.dpms) {
-      ptr->mon_option_lst = xf86addNewOption(ptr->mon_option_lst, "DPMS", NULL);
+      ptr->mon_option_lst = xf86addNewOption(ptr->mon_option_lst, xstrdup("DPMS"), NULL);
     }
 
     return ptr;
diff --git a/hw/xfree86/common/xf86Option.c b/hw/xfree86/common/xf86Option.c
index 7afb63a..50a7d9c 100644
--- a/hw/xfree86/common/xf86Option.c
+++ b/hw/xfree86/common/xf86Option.c
@@ -289,7 +289,7 @@ xf86CheckBoolOption(pointer optlist, con
 _X_EXPORT pointer
 xf86ReplaceIntOption(pointer optlist, const char *name, const int val)
 {
-    char *tmp = xnfalloc(16);
+    char tmp[16];
     sprintf(tmp,"%i",val);
     return xf86AddNewOption(optlist,name,tmp);
 }
@@ -297,7 +297,7 @@ xf86ReplaceIntOption(pointer optlist, co
 _X_EXPORT pointer
 xf86ReplaceRealOption(pointer optlist, const char *name, const double val)
 {
-    char *tmp = xnfalloc(32);
+    char tmp[32];
     snprintf(tmp,32,"%f",val);
     return xf86AddNewOption(optlist,name,tmp);
 }
diff --git a/hw/xfree86/parser/Flags.c b/hw/xfree86/parser/Flags.c
index 4adea1a..5b60a51 100644
--- a/hw/xfree86/parser/Flags.c
+++ b/hw/xfree86/parser/Flags.c
@@ -198,21 +198,21 @@ addNewOption2 (XF86OptionPtr head, char 
 {
 	XF86OptionPtr new, old = NULL;
 
-	/* Don't allow duplicates */
- 	if (head != NULL && (old = xf86findOption(head, name)) != NULL)
- 		new = old;
- 	else {
+	/* Don't allow duplicates, free old strings */
+	if (head != NULL && (old = xf86findOption(head, name)) != NULL) {
+		new = old;
+		xf86conffree(new->opt_name);
+		xf86conffree(new->opt_val);
+	}
+	else
 		new = xf86confcalloc (1, sizeof (XF86OptionRec));
- 		new->list.next = NULL;
- 	}
- 	new->opt_name = name;
- 	new->opt_val = val;
- 	new->opt_used = used;
-	
-  	if (old == NULL)
-		return ((XF86OptionPtr) xf86addListItem ((glp) head, (glp) new));
- 	else 
- 		return head;
+	new->opt_name = name;
+	new->opt_val = val;
+	new->opt_used = used;
+
+	if (old)
+		return head;
+	return ((XF86OptionPtr) xf86addListItem ((glp) head, (glp) new));
 }
 
 XF86OptionPtr
diff --git a/hw/xfree86/utils/xorgcfg/text-mode.c b/hw/xfree86/utils/xorgcfg/text-mode.c
index 9797ca2..8800c29 100644
--- a/hw/xfree86/utils/xorgcfg/text-mode.c
+++ b/hw/xfree86/utils/xorgcfg/text-mode.c
@@ -2111,7 +2111,7 @@ LayoutConfig(void)
 		    else
 			iref->iref_option_lst =
 			    xf86addNewOption(iref->iref_option_lst,
-					  "CorePointer", NULL);
+					  XtNewString("CorePointer"), NULL);
 		    option = xf86findOption(mref->iref_option_lst,
 					    "CorePointer");
 		    XtFree(option->opt_name);
@@ -2209,7 +2209,7 @@ LayoutConfig(void)
 		    else
 			iref->iref_option_lst =
 			    xf86addNewOption(iref->iref_option_lst,
-					  "CoreKeyboard", NULL);
+					  XtNewString("CoreKeyboard"), NULL);
 		    option = xf86findOption(kref->iref_option_lst,
 					    "CoreKeyboard");
 		    XtFree(option->opt_name);
diff-tree 07c56abf84080c020a3e7b7703a447c7f996975c (from e92743bc9839c36914a44f3e5bc8cd85773ac794)
Author: Magnus Vigerlöf <Magnus.Vigerlof at home.se>
Date:   Tue Apr 10 23:43:58 2007 +0300

    Input: Plug memory leak in device free
    
    Remember to also free the motion history, if we're using the DIX-managed
    history.

diff --git a/dix/devices.c b/dix/devices.c
index 9631c86..004cb13 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -431,8 +431,13 @@ CloseDevice(DeviceIntPtr dev)
 	xfree(dev->key);
     }
 
-    if (dev->valuator)
+    if (dev->valuator) {
+        /* Counterpart to 'biggest hack ever' in init. */
+        if (dev->valuator->motion &&
+            dev->valuator->GetMotionProc == GetMotionHistory)
+            xfree(dev->valuator->motion);
         xfree(dev->valuator);
+    }
 
     if (dev->button) {
 #ifdef XKB
diff-tree e92743bc9839c36914a44f3e5bc8cd85773ac794 (from e49f836d6fa2768cd6d2a6d0227b5dbf516013dc)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Sun Apr 8 14:02:02 2007 +0300

    getevents: Copy modifier state from extended to core devices
    
    Make core events carry the same modifier state as the extended events, so
    that holding down Ctrl on keyboard A and pressing Q on keyboard B won't
    cause your app to quit.

diff --git a/dix/getevents.c b/dix/getevents.c
index 62f3bcb..6969f78 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -714,6 +714,7 @@ _X_EXPORT void
 SwitchCoreKeyboard(DeviceIntPtr pDev)
 {
     KeyClassPtr ckeyc = inputInfo.keyboard->key;
+    int i = 0;
 
     if (inputInfo.keyboard->devPrivates[CoreDevicePrivatesIndex].ptr != pDev) {
         memcpy(ckeyc->modifierMap, pDev->key->modifierMap, MAP_LENGTH);
@@ -728,6 +729,25 @@ SwitchCoreKeyboard(DeviceIntPtr pDev)
         ckeyc->curKeySyms.maxKeyCode = pDev->key->curKeySyms.maxKeyCode;
         SetKeySymsMap(&ckeyc->curKeySyms, &pDev->key->curKeySyms);
 
+        /*
+         * Copy state from the extended keyboard to core.  If you omit this,
+         * holding Ctrl on keyboard one, and pressing Q on keyboard two, will
+         * cause your app to quit.  This feels wrong to me, hence the below
+         * code.
+         *
+         * XXX: If you synthesise core modifier events, the state will get
+         *      clobbered here.  You'll have to work out something sensible
+         *      to fix that.  Good luck.
+         */
+
+#define KEYBOARD_MASK (ShiftMask | LockMask | ControlMask | Mod1Mask | \
+                       Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask)
+        ckeyc->state &= ~(KEYBOARD_MASK);
+        ckeyc->state |= (pDev->key->state & KEYBOARD_MASK);
+#undef KEYBOARD_MASK
+        for (i = 0; i < 8; i++)
+            ckeyc->modifierKeyCount[i] = pDev->key->modifierKeyCount[i];
+
 #ifdef XKB
         if (!noXkbExtension && pDev->key->xkbInfo && pDev->key->xkbInfo->desc) {
             if (!XkbCopyKeymap(pDev->key->xkbInfo->desc, ckeyc->xkbInfo->desc,
diff-tree e49f836d6fa2768cd6d2a6d0227b5dbf516013dc (from 4aae2de74b9224bac2b2e2522637dac09abc3837)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Sun Apr 8 13:56:41 2007 +0300

    mieq: Use larger default queue size
    
    Use a default queue size of 512 rather than 256, else Xephyr is too slow
    without a host cursor, so events get stuck in the queue.

diff --git a/mi/mieq.c b/mi/mieq.c
index 34509cd..a03fff1 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -58,7 +58,7 @@ in this Software without prior written a
 # include <X11/extensions/dpms.h>
 #endif
 
-#define QUEUE_SIZE  256
+#define QUEUE_SIZE  512
 
 typedef struct _Event {
     xEvent          event[7];
diff-tree 4aae2de74b9224bac2b2e2522637dac09abc3837 (from f77a8ea849d171a8ca00b2b7334866ace1ffbf73)
Author: Jared D. McNeill <jmcneill at netbsd.org>
Date:   Tue Apr 10 12:57:15 2007 -0700

    Add a real xf86EnableIO/xf86DisableIO for NetBSD/PPC.

diff --git a/hw/xfree86/os-support/bsd/Makefile.am b/hw/xfree86/os-support/bsd/Makefile.am
index 0992404..0432ba9 100644
--- a/hw/xfree86/os-support/bsd/Makefile.am
+++ b/hw/xfree86/os-support/bsd/Makefile.am
@@ -38,8 +38,7 @@ ARCH_SOURCES = i386_video.c
 endif
 
 if PPC_VIDEO
-ARCH_SOURCES = ppc_video.c \
-	$(srcdir)/../shared/ioperm_noop.c
+ARCH_SOURCES = ppc_video.c
 endif
 
 if SPARC64_VIDEO
diff --git a/hw/xfree86/os-support/bsd/ppc_video.c b/hw/xfree86/os-support/bsd/ppc_video.c
index ae65c8f..6a23b4e 100644
--- a/hw/xfree86/os-support/bsd/ppc_video.c
+++ b/hw/xfree86/os-support/bsd/ppc_video.c
@@ -56,6 +56,9 @@
 static pointer ppcMapVidMem(int, unsigned long, unsigned long, int flags);
 static void ppcUnmapVidMem(int, pointer, unsigned long);
 
+Bool xf86EnableIO(void);
+void xf86DisableIO(void);
+
 void
 xf86OSInitVidMem(VidMemInfoPtr pVidMem)
 {
@@ -63,6 +66,7 @@ xf86OSInitVidMem(VidMemInfoPtr pVidMem)
 	pVidMem->mapMem = ppcMapVidMem;
 	pVidMem->unmapMem = ppcUnmapVidMem;
 	pVidMem->initialised = TRUE;
+	xf86EnableIO();
 }
 
 
@@ -138,3 +142,32 @@ xf86EnableInterrupts()
 
 	return;
 }
+
+Bool xf86EnableIO()
+{
+        int fd = xf86Info.screenFd;
+
+        xf86MsgVerb(X_WARNING, 3, "xf86EnableIO %d\n", fd);
+        if (ioBase == MAP_FAILED)
+        {
+                ioBase=mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd,
+                    0xf2000000);
+                xf86MsgVerb(X_INFO, 3, "xf86EnableIO: %08x\n", ioBase);
+                if (ioBase == MAP_FAILED) {
+                        xf86MsgVerb(X_WARNING, 3, "Can't map IO space!\n");
+			return FALSE;
+		}
+        }
+	return TRUE;
+}
+
+void xf86DisableIO()
+{
+
+        if (ioBase != MAP_FAILED)
+        {
+                munmap(__UNVOLATILE(ioBase), 0x10000);
+                ioBase = MAP_FAILED;
+        }
+}
+
diff-tree f77a8ea849d171a8ca00b2b7334866ace1ffbf73 (from bcf17df69a232e5e84609abacdca36274316e170)
Author: Keith Packard <keithp at neko.keithp.com>
Date:   Mon Apr 9 14:29:46 2007 -0700

    Rotate screen size as needed from RandR 1.1 change requests.
    
    Screen size must reflect rotated mode size when setting rotated mode using
    RandR 1.1 SetScreenConfig request.
    (cherry picked from commit efcec7dbd3c2736c7b421d29c4d37e231aa681d2)

diff --git a/randr/rrscreen.c b/randr/rrscreen.c
index f83fce3..d92a0ff 100644
--- a/randr/rrscreen.c
+++ b/randr/rrscreen.c
@@ -741,6 +741,7 @@ ProcRRSetScreenConfig (ClientPtr client)
     RRModePtr		    mode;
     RR10DataPtr		    pData = NULL;
     RRScreenSizePtr    	    pSize;
+    int			    width, height;
     
     UpdateCurrentTime ();
 
@@ -883,8 +884,14 @@ ProcRRSetScreenConfig (ClientPtr client)
      * If the screen size is changing, adjust all of the other outputs
      * to fit the new size, mirroring as much as possible
      */
-    if (mode->mode.width != pScreen->width || 
-	mode->mode.height != pScreen->height)
+    width = mode->mode.width;
+    height = mode->mode.height;
+    if (rotation & (RR_Rotate_90|RR_Rotate_270))
+    {
+	width = mode->mode.height;
+	height = mode->mode.width;
+    }
+    if (width != pScreen->width || height != pScreen->height)
     {
 	int	c;
 
@@ -898,7 +905,7 @@ ProcRRSetScreenConfig (ClientPtr client)
 		goto sendReply;
 	    }
 	}
-	if (!RRScreenSizeSet (pScreen, mode->mode.width, mode->mode.height,
+	if (!RRScreenSizeSet (pScreen, width, height,
 			      pScreen->mmWidth, pScreen->mmHeight))
 	{
 	    rep.status = RRSetConfigFailed;
diff-tree bcf17df69a232e5e84609abacdca36274316e170 (from 67e1c98895a566f927e1ae2384d56cfca104f971)
Author: Keith Packard <keithp at neko.keithp.com>
Date:   Mon Apr 9 14:12:27 2007 -0700

    Disable CRTC when SetSingleMode has no matching mode. Update RandR as well.
    
    xf86SetSingleMode tries to resize all crtcs to match the selected mode. When
    a CRTC has no matching mode, it now disables the CRTC (instead of crashing).
    
    Also, poke the RandR extension when xf86SetSingleMode is done so that
    appropriate events can be delivered, and so that future RandR queries return
    correct information.
    (cherry picked from commit dc6c4f6989f87149d8605604f4514f5cbf11de67)

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 0fe03d3..7e7c7e7 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -233,8 +233,6 @@ xf86CrtcSetMode (xf86CrtcPtr crtc, Displ
     int			saved_x, saved_y;
     Rotation		saved_rotation;
 
-    adjusted_mode = xf86DuplicateMode(mode);
-
     crtc->enabled = xf86CrtcInUse (crtc);
     
     if (!crtc->enabled)
@@ -243,6 +241,8 @@ xf86CrtcSetMode (xf86CrtcPtr crtc, Displ
 	return TRUE;
     }
 
+    adjusted_mode = xf86DuplicateMode(mode);
+
     didLock = crtc->funcs->lock (crtc);
 
     saved_mode = crtc->mode;
@@ -1833,6 +1833,11 @@ xf86SetSingleMode (ScrnInfoPtr pScrn, Di
 	    else
 		crtc_mode = xf86OutputFindClosestMode (output, desired);
 	}
+	if (!crtc_mode)
+	{
+	    crtc->enabled = FALSE;
+	    continue;
+	}
 	if (!xf86CrtcSetMode (crtc, crtc_mode, rotation, 0, 0))
 	    ok = FALSE;
 	else
@@ -1844,6 +1849,7 @@ xf86SetSingleMode (ScrnInfoPtr pScrn, Di
 	}
     }
     xf86DisableUnusedFunctions(pScrn);
+    xf86RandR12TellChanged (pScrn->pScreen);
     return ok;
 }
 
diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
index 6f52ee2..90de585 100644
--- a/hw/xfree86/modes/xf86RandR12.c
+++ b/hw/xfree86/modes/xf86RandR12.c
@@ -1048,6 +1048,28 @@ xf86RandR12CreateScreenResources12 (Scre
     return TRUE;
 }
 
+/*
+ * Something happened within the screen configuration due
+ * to DGA, VidMode or hot key. Tell RandR
+ */
+
+void
+xf86RandR12TellChanged (ScreenPtr pScreen)
+{
+    ScrnInfoPtr		pScrn = xf86Screens[pScreen->myNum];
+    xf86CrtcConfigPtr   config = XF86_CRTC_CONFIG_PTR(pScrn);
+    XF86RandRInfoPtr	randrp = XF86RANDRINFO(pScreen);
+    int			c;
+
+    if (!randrp)
+	return;
+    xf86RandR12SetInfo12 (pScreen);
+    for (c = 0; c < config->num_crtc; c++)
+	xf86RandR12CrtcNotify (config->crtc[c]->randr_crtc);
+
+    RRTellChanged (pScreen);
+}
+
 static void
 xf86RandR12PointerMoved (int scrnIndex, int x, int y)
 {
diff --git a/hw/xfree86/modes/xf86RandR12.h b/hw/xfree86/modes/xf86RandR12.h
index 8a4668b..0d3346a 100644
--- a/hw/xfree86/modes/xf86RandR12.h
+++ b/hw/xfree86/modes/xf86RandR12.h
@@ -33,5 +33,6 @@ Bool xf86RandR12SetConfig(ScreenPtr pScr
 Rotation xf86RandR12GetRotation(ScreenPtr pScreen);
 void xf86RandR12GetOriginalVirtualSize(ScrnInfoPtr pScrn, int *x, int *y);
 Bool xf86RandR12PreInit (ScrnInfoPtr pScrn);
+void xf86RandR12TellChanged (ScreenPtr pScreen);
 
 #endif /* _XF86_RANDR_H_ */
diff-tree 67e1c98895a566f927e1ae2384d56cfca104f971 (from a08d5157f70567a0aa9583d4a15e62437340cf34)
Author: Adam Jackson <ajax at benzedrine.nwnk.net>
Date:   Mon Apr 9 19:08:52 2007 -0400

    Look for the PCI ROM file elsewhere in sysfs.
    
    /sys/devices reflects the bus topology, and we don't care that much.
    Easier (and more reliable) to just look in /sys/bus/pci/devices, which
    is a flat view.

diff --git a/hw/xfree86/os-support/bus/linuxPci.c b/hw/xfree86/os-support/bus/linuxPci.c
index 55ed878..2aaa89c 100644
--- a/hw/xfree86/os-support/bus/linuxPci.c
+++ b/hw/xfree86/os-support/bus/linuxPci.c
@@ -773,8 +773,8 @@ xf86ReadDomainMemory(PCITAG Tag, ADDRESS
     bus  = PCI_BUS_NO_DOMAIN(PCI_BUS_FROM_TAG(Tag));
     dev  = PCI_DEV_FROM_TAG(Tag);
     func = PCI_FUNC_FROM_TAG(Tag);
-    sprintf(file, "/sys/devices/pci%04x:%02x/%04x:%02x:%02x.%1x/rom",
-	    dom, bus, dom, bus, dev, func);
+    sprintf(file, "/sys/bus/pci/devices/%04x:%02x:%02x.%1x/rom",
+	    dom, bus, dev, func);
 
     /*
      * If the caller wants the ROM and the sysfs rom interface exists,
diff-tree a08d5157f70567a0aa9583d4a15e62437340cf34 (from 72b477f964c748a1ab668781643cc11877f19738)
Author: Adam Jackson <ajax at benzedrine.nwnk.net>
Date:   Mon Apr 9 19:04:56 2007 -0400

    VT activate or waitactive are fatal if they fail.
    
    Also, be sure to waitactive on the way down, to make sure we're off the VT
    before exiting.

diff --git a/hw/xfree86/os-support/linux/lnx_init.c b/hw/xfree86/os-support/linux/lnx_init.c
index 85b6def..9775180 100644
--- a/hw/xfree86/os-support/linux/lnx_init.c
+++ b/hw/xfree86/os-support/linux/lnx_init.c
@@ -245,15 +245,15 @@ xf86OpenConsole(void)
 	    lnx_savefont();
 #endif
 	    /*
-	     * now get the VT
+	     * now get the VT.  This _must_ succeed, or else fail completely.
 	     */
 	    if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, xf86Info.vtno) < 0)
-	        xf86Msg(X_WARNING, "xf86OpenConsole: VT_ACTIVATE failed: %s\n",
-		        strerror(errno));
+	        FatalError("xf86OpenConsole: VT_ACTIVATE failed: %s\n",
+		           strerror(errno));
 
 	    if (ioctl(xf86Info.consoleFd, VT_WAITACTIVE, xf86Info.vtno) < 0)
-	        xf86Msg(X_WARNING, "xf86OpenConsole: VT_WAITACTIVE failed: %s\n",
-		    strerror(errno));
+	        FatalError("xf86OpenConsole: VT_WAITACTIVE failed: %s\n",
+			   strerror(errno));
 
 	    if (ioctl(xf86Info.consoleFd, VT_GETMODE, &VT) < 0)
 	        FatalError("xf86OpenConsole: VT_GETMODE failed %s\n",
@@ -350,6 +350,10 @@ xf86CloseConsole()
 	    if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, activeVT) < 0)
 	        xf86Msg(X_WARNING, "xf86CloseConsole: VT_ACTIVATE failed: %s\n",
 		        strerror(errno));
+	    if (ioctl(xf86Info.consoleFd, VT_WAITACTIVE, activeVT) < 0)
+		xf86Msg(X_WARNING,
+			"xf86CloseConsole: VT_WAITACTIVE failed: %s\n",
+			strerror(errno));
 	    activeVT = -1;
         }
 
diff-tree 72b477f964c748a1ab668781643cc11877f19738 (from 1f6741db19d4c91b1eacb497dff1814acb1bf0c3)
Author: Adam Jackson <ajax at benzedrine.nwnk.net>
Date:   Mon Apr 9 18:59:01 2007 -0400

    Don't write out empty sections from the parser.

diff --git a/hw/xfree86/parser/write.c b/hw/xfree86/parser/write.c
index 1869f56..3924001 100644
--- a/hw/xfree86/parser/write.c
+++ b/hw/xfree86/parser/write.c
@@ -107,13 +107,19 @@ doWriteConfigFile (const char *filename,
 
 	xf86printLayoutSection (cf, cptr->conf_layout_lst);
 
-	fprintf (cf, "Section \"Files\"\n");
-	xf86printFileSection (cf, cptr->conf_files);
-	fprintf (cf, "EndSection\n\n");
-
-	fprintf (cf, "Section \"Module\"\n");
-	xf86printModuleSection (cf, cptr->conf_modules);
-	fprintf (cf, "EndSection\n\n");
+	if (cptr->conf_files != NULL)
+	{
+		fprintf (cf, "Section \"Files\"\n");
+		xf86printFileSection (cf, cptr->conf_files);
+		fprintf (cf, "EndSection\n\n");
+	}
+
+	if (cptr->conf_modules != NULL)
+	{
+		fprintf (cf, "Section \"Module\"\n");
+		xf86printModuleSection (cf, cptr->conf_modules);
+		fprintf (cf, "EndSection\n\n");
+	}
 
 	xf86printVendorSection (cf, cptr->conf_vendor_lst);
 
diff-tree 1f6741db19d4c91b1eacb497dff1814acb1bf0c3 (from f24391dbfd12a84253dfec794ee7884afd52e197)
Author: Stefan Huehner <stefan at huehner.org>
Date:   Mon Apr 9 14:33:15 2007 -0700

    Bug #10560: Code-Cleanup: function declarations () -> (void)
    
    X.Org Bugzilla #10560: <https://bugs.freedesktop.org/show_bug.cgi?id=10560>
    Patch #9511 <https://bugs.freedesktop.org/attachment.cgi?id=9511>

diff --git a/Xext/sync.c b/Xext/sync.c
index 531b48c..c5441a1 100644
--- a/Xext/sync.c
+++ b/Xext/sync.c
@@ -2509,7 +2509,7 @@ ServertimeBracketValues(pCounter, pbrack
 }
 
 static void
-SyncInitServerTime()
+SyncInitServerTime(void)
 {
     CARD64 resolution;
 
diff --git a/Xext/xvmain.c b/Xext/xvmain.c
index 2233901..ddf3d1d 100644
--- a/Xext/xvmain.c
+++ b/Xext/xvmain.c
@@ -153,7 +153,7 @@ static int XvdiSendVideoNotify(XvPortPtr
 */
 
 void 
-XvExtensionInit()
+XvExtensionInit(void)
 {
   ExtensionEntry *extEntry;
 
@@ -205,7 +205,7 @@ XvExtensionInit()
 }
 
 static Bool
-CreateResourceTypes()
+CreateResourceTypes(void)
 
 {
   
@@ -335,13 +335,13 @@ XvResetProc(ExtensionEntry* extEntry)
 }
 
 _X_EXPORT int
-XvGetScreenIndex()
+XvGetScreenIndex(void)
 {
   return XvScreenIndex;
 }
 
 _X_EXPORT unsigned long
-XvGetRTPort()
+XvGetRTPort(void)
 {
   return XvRTPort;
 }
diff --git a/Xext/xvmc.c b/Xext/xvmc.c
index 737fc5d..ae35893 100644
--- a/Xext/xvmc.c
+++ b/Xext/xvmc.c
@@ -675,7 +675,7 @@ SProcXvMCDispatch (ClientPtr client)
 }
 
 void 
-XvMCExtensionInit()
+XvMCExtensionInit(void)
 {
    ExtensionEntry *extEntry;
 
diff --git a/config/config.c b/config/config.c
index 6c40143..d72b588 100644
--- a/config/config.c
+++ b/config/config.c
@@ -410,13 +410,13 @@ configReconnect(OsTimerPtr timer, CARD32
 }
 
 void
-configInitialise()
+configInitialise(void)
 {
     TimerSet(NULL, 0, 1, configReconnect, NULL);
 }
 
 void
-configFini()
+configFini(void)
 {
     DBusError error;
 
diff --git a/dix/atom.c b/dix/atom.c
index bd3223c..6ae3e31 100644
--- a/dix/atom.c
+++ b/dix/atom.c
@@ -167,7 +167,7 @@ NameForAtom(Atom atom)
 }
 
 void
-AtomError()
+AtomError(void)
 {
     FatalError("initializing atoms");
 }
@@ -185,7 +185,7 @@ FreeAtom(NodePtr patom)
 }
 
 void
-FreeAllAtoms()
+FreeAllAtoms(void)
 {
     if(atomRoot == (NodePtr)NULL)
 	return;
@@ -197,7 +197,7 @@ FreeAllAtoms()
 }
 
 void
-InitAtoms()
+InitAtoms(void)
 {
     FreeAllAtoms();
     tableLength = InitialTableSize;
diff --git a/dix/devices.c b/dix/devices.c
index f622be7..9631c86 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -314,7 +314,7 @@ CorePointerProc(DeviceIntPtr pDev, int w
 }
 
 void
-InitCoreDevices()
+InitCoreDevices(void)
 {
     DeviceIntPtr dev;
 
@@ -373,7 +373,7 @@ InitCoreDevices()
 }
 
 int
-InitAndStartDevices()
+InitAndStartDevices(void)
 {
     DeviceIntPtr dev, next;
 
@@ -503,7 +503,7 @@ CloseDevice(DeviceIntPtr dev)
 }
 
 void
-CloseDownDevices()
+CloseDownDevices(void)
 {
     DeviceIntPtr dev, next;
 
@@ -580,7 +580,7 @@ RemoveDevice(DeviceIntPtr dev)
 }
 
 int
-NumMotionEvents()
+NumMotionEvents(void)
 {
     return inputInfo.pointer->valuator->numMotionEvents;
 }
@@ -598,13 +598,13 @@ RegisterKeyboardDevice(DeviceIntPtr devi
 }
 
 _X_EXPORT DevicePtr
-LookupKeyboardDevice()
+LookupKeyboardDevice(void)
 {
     return inputInfo.keyboard ? &inputInfo.keyboard->public : NULL;
 }
 
 _X_EXPORT DevicePtr
-LookupPointerDevice()
+LookupPointerDevice(void)
 {
     return inputInfo.pointer ? &inputInfo.pointer->public : NULL;
 }
diff --git a/dix/dispatch.c b/dix/dispatch.c
index 490b29c..6aba9db 100644
--- a/dix/dispatch.c
+++ b/dix/dispatch.c
@@ -218,7 +218,7 @@ SetInputCheck(HWEventQueuePtr c0, HWEven
 }
 
 _X_EXPORT void
-UpdateCurrentTime()
+UpdateCurrentTime(void)
 {
     TimeStamp systime;
 
@@ -237,7 +237,7 @@ UpdateCurrentTime()
 
 /* Like UpdateCurrentTime, but can't call ProcessInputEvents */
 _X_EXPORT void
-UpdateCurrentTimeIf()
+UpdateCurrentTimeIf(void)
 {
     TimeStamp systime;
 
@@ -250,7 +250,7 @@ UpdateCurrentTimeIf()
 }
 
 void
-InitSelections()
+InitSelections(void)
 {
     if (CurrentSelections)
 	xfree(CurrentSelections);
@@ -3654,7 +3654,7 @@ CloseDownClient(ClientPtr client)
 }
 
 static void
-KillAllClients()
+KillAllClients(void)
 {
     int i;
     for (i=1; i<currentMaxClients; i++)
diff --git a/dix/dixfonts.c b/dix/dixfonts.c
index 62ad575..c21b3ec 100644
--- a/dix/dixfonts.c
+++ b/dix/dixfonts.c
@@ -1878,7 +1878,7 @@ DeleteClientFontStuff(ClientPtr client)
 }
 
 void
-InitFonts ()
+InitFonts (void)
 {
     patternCache = MakeFontPatternCache();
 
@@ -1997,7 +1997,7 @@ RegisterFPEFunctions(NameCheckFunc name_
 }
 
 void
-FreeFonts()
+FreeFonts(void)
 {
     if (patternCache) {
 	FreeFontPatternCache(patternCache);
diff --git a/dix/dixutils.c b/dix/dixutils.c
index 44d82c9..30327d3 100644
--- a/dix/dixutils.c
+++ b/dix/dixutils.c
@@ -550,7 +550,7 @@ RemoveBlockAndWakeupHandlers (BlockHandl
 }
 
 void
-InitBlockAndWakeupHandlers ()
+InitBlockAndWakeupHandlers (void)
 {
     xfree (handlers);
     handlers = (BlockHandlerPtr) 0;
@@ -950,7 +950,7 @@ DeleteCallbackList(CallbackListPtr *pcbl
 }
 
 void 
-InitCallbackManager()
+InitCallbackManager(void)
 {
     int i;
 
diff --git a/dix/events.c b/dix/events.c
index e008e36..093a316 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -844,7 +844,7 @@ ConfineCursorToWindow(WindowPtr pWin, Bo
 }
 
 _X_EXPORT Bool
-PointerConfinedToScreen()
+PointerConfinedToScreen(void)
 {
     return sprite.confined;
 }
@@ -913,19 +913,19 @@ PostNewCursor(void)
 }
 
 _X_EXPORT WindowPtr
-GetCurrentRootWindow()
+GetCurrentRootWindow(void)
 {
     return ROOT;
 }
 
 _X_EXPORT WindowPtr
-GetSpriteWindow()
+GetSpriteWindow(void)
 {
     return sprite.win;
 }
 
 _X_EXPORT CursorPtr
-GetSpriteCursor()
+GetSpriteCursor(void)
 {
     return sprite.current;
 }
@@ -939,7 +939,7 @@ GetSpritePosition(int *px, int *py)
 
 #ifdef PANORAMIX
 _X_EXPORT int
-XineramaGetCursorScreen()
+XineramaGetCursorScreen(void)
 {
     if(!noPanoramiXExtension) {
 	return sprite.screen->myNum;
@@ -1114,7 +1114,7 @@ FreezeThaw(DeviceIntPtr dev, Bool frozen
 }
 
 void
-ComputeFreezes()
+ComputeFreezes(void)
 {
     DeviceIntPtr replayDev = syncEvents.replayDev;
     int i;
@@ -2047,7 +2047,7 @@ CheckMotion(xEvent *xE)
 }
 
 _X_EXPORT void
-WindowsRestructured()
+WindowsRestructured(void)
 {
     (void) CheckMotion((xEvent *)NULL);
 }
@@ -3970,7 +3970,7 @@ ProcQueryPointer(ClientPtr client)
 }
 
 void
-InitEvents()
+InitEvents(void)
 {
     int i;
 
diff --git a/dix/extension.c b/dix/extension.c
index 88dff15..186574d 100644
--- a/dix/extension.c
+++ b/dix/extension.c
@@ -278,7 +278,7 @@ MinorOpcodeOfRequest(ClientPtr client)
 }
 
 void
-CloseDownExtensions()
+CloseDownExtensions(void)
 {
     int i,j;
 
diff --git a/dix/getevents.c b/dix/getevents.c
index 3f636bc..62f3bcb 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -73,7 +73,7 @@ extern Bool XkbCopyKeymap(XkbDescPtr src
  * Pick some arbitrary size for Xi motion history.
  */
 _X_EXPORT int
-GetMotionHistorySize()
+GetMotionHistorySize(void)
 {
     return MOTION_HISTORY_SIZE;
 }
@@ -183,7 +183,7 @@ updateMotionHistory(DeviceIntPtr pDev, C
  * xEvent *events = xcalloc(sizeof(xEvent), GetMaximumEventsNum());
  */
 _X_EXPORT int
-GetMaximumEventsNum() {
+GetMaximumEventsNum(void) {
     /* Two base events -- core and device, plus valuator events.  Multiply
      * by two if we're doing key repeats. */
     int ret = 2 + MAX_VALUATOR_EVENTS;
diff --git a/dix/initatoms.c b/dix/initatoms.c
index a5972af..de101bd 100644
--- a/dix/initatoms.c
+++ b/dix/initatoms.c
@@ -11,7 +11,7 @@
 #include <X11/Xatom.h>
 #include "misc.h"
 #include "dix.h"
-void MakePredeclaredAtoms()
+void MakePredeclaredAtoms(void)
 {
     if (MakeAtom("PRIMARY", 7, 1) != XA_PRIMARY) AtomError();
     if (MakeAtom("SECONDARY", 9, 1) != XA_SECONDARY) AtomError();
diff --git a/dix/main.c b/dix/main.c
index 92c30b6..9a67ed9 100644
--- a/dix/main.c
+++ b/dix/main.c
@@ -544,7 +544,7 @@ static int padlength[4] = {0, 3, 2, 1};
 static
 #endif
 Bool
-CreateConnectionBlock()
+CreateConnectionBlock(void)
 {
     xConnSetup setup;
     xWindowRoot root;
diff --git a/dix/privates.c b/dix/privates.c
index a66fc3d..2465971 100644
--- a/dix/privates.c
+++ b/dix/privates.c
@@ -60,7 +60,7 @@ unsigned *extensionPrivateSizes;
 unsigned totalExtensionSize;
 
 void
-ResetExtensionPrivates()
+ResetExtensionPrivates(void)
 {
     extensionPrivateCount = 0;
     extensionPrivateLen = 0;
@@ -71,7 +71,7 @@ ResetExtensionPrivates()
 }
 
 _X_EXPORT int
-AllocateExtensionPrivateIndex()
+AllocateExtensionPrivateIndex(void)
 {
     return extensionPrivateCount++;
 }
@@ -117,7 +117,7 @@ unsigned *clientPrivateSizes;
 unsigned totalClientSize;
 
 void
-ResetClientPrivates()
+ResetClientPrivates(void)
 {
     clientPrivateCount = 0;
     clientPrivateLen = 0;
@@ -128,7 +128,7 @@ ResetClientPrivates()
 }
 
 _X_EXPORT int
-AllocateClientPrivateIndex()
+AllocateClientPrivateIndex(void)
 {
     return clientPrivateCount++;
 }
@@ -171,7 +171,7 @@ AllocateClientPrivate(int index2, unsign
 int  screenPrivateCount;
 
 void
-ResetScreenPrivates()
+ResetScreenPrivates(void)
 {
     screenPrivateCount = 0;
 }
@@ -180,7 +180,7 @@ ResetScreenPrivates()
  * so we have to worry about resizing existing devPrivates
  */
 _X_EXPORT int
-AllocateScreenPrivateIndex()
+AllocateScreenPrivateIndex(void)
 {
     int		idx;
     int		i;
@@ -213,13 +213,13 @@ AllocateScreenPrivateIndex()
 static int  windowPrivateCount;
 
 void
-ResetWindowPrivates()
+ResetWindowPrivates(void)
 {
     windowPrivateCount = 0;
 }
 
 _X_EXPORT int
-AllocateWindowPrivateIndex()
+AllocateWindowPrivateIndex(void)
 {
     return windowPrivateCount++;
 }
@@ -263,13 +263,13 @@ AllocateWindowPrivate(ScreenPtr pScreen,
 static int  gcPrivateCount;
 
 void
-ResetGCPrivates()
+ResetGCPrivates(void)
 {
     gcPrivateCount = 0;
 }
 
 _X_EXPORT int
-AllocateGCPrivateIndex()
+AllocateGCPrivateIndex(void)
 {
     return gcPrivateCount++;
 }
@@ -312,13 +312,13 @@ AllocateGCPrivate(ScreenPtr pScreen, int
 static int  pixmapPrivateCount;
 
 void
-ResetPixmapPrivates()
+ResetPixmapPrivates(void)
 {
     pixmapPrivateCount = 0;
 }
 
 _X_EXPORT int
-AllocatePixmapPrivateIndex()
+AllocatePixmapPrivateIndex(void)
 {
     return pixmapPrivateCount++;
 }
@@ -363,7 +363,7 @@ AllocatePixmapPrivate(ScreenPtr pScreen,
 int  colormapPrivateCount;
 
 void
-ResetColormapPrivates()
+ResetColormapPrivates(void)
 {
     colormapPrivateCount = 0;
 }
@@ -424,7 +424,7 @@ AllocateColormapPrivateIndex (InitCmapPr
 static int devicePrivateIndex = 0;
 
 _X_EXPORT int
-AllocateDevicePrivateIndex()
+AllocateDevicePrivateIndex(void)
 {
     return devicePrivateIndex++;
 }
diff --git a/dix/resource.c b/dix/resource.c
index a5a7eed..f4bf1fc 100644
--- a/dix/resource.c
+++ b/dix/resource.c
@@ -235,7 +235,7 @@ CreateNewResourceType(DeleteType deleteF
 }
 
 _X_EXPORT RESTYPE
-CreateNewResourceClass()
+CreateNewResourceClass(void)
 {
     RESTYPE next = lastResourceClass >> 1;
 
@@ -844,7 +844,7 @@ FreeClientResources(ClientPtr client)
 }
 
 void
-FreeAllResources()
+FreeAllResources(void)
 {
     int	i;
 
diff --git a/hw/xnest/Display.c b/hw/xnest/Display.c
index 1ec0609..0129041 100644
--- a/hw/xnest/Display.c
+++ b/hw/xnest/Display.c
@@ -176,7 +176,7 @@ xnestOpenDisplay(int argc, char *argv[])
 }
 
 void
-xnestCloseDisplay()
+xnestCloseDisplay(void)
 {
   if (!xnestDoFullGeneration || !xnestDisplay) return;
 
diff --git a/hw/xnest/Events.c b/hw/xnest/Events.c
index a209241..38fefa7 100644
--- a/hw/xnest/Events.c
+++ b/hw/xnest/Events.c
@@ -52,7 +52,7 @@ ProcessInputEvents()
 }
 
 int
-TimeSinceLastInputEvent()
+TimeSinceLastInputEvent(void)
 {
     if (lastEventTime == 0)
         lastEventTime = GetTimeInMillis();
@@ -60,7 +60,7 @@ TimeSinceLastInputEvent()
 }
 
 void
-SetTimeSinceLastInputEvent()
+SetTimeSinceLastInputEvent(void)
 {
   lastEventTime = GetTimeInMillis();
 }
@@ -78,7 +78,7 @@ xnestNotExposurePredicate(Display *displ
 }
 
 void
-xnestCollectExposures()
+xnestCollectExposures(void)
 {
   XEvent X;
   WindowPtr pWin;
@@ -113,7 +113,7 @@ xnestQueueKeyEvent(int type, unsigned in
 }
 
 void
-xnestCollectEvents()
+xnestCollectEvents(void)
 {
   XEvent X;
   xEvent x;
diff --git a/mi/micmap.c b/mi/micmap.c
index 977c587..33d9481 100644
--- a/mi/micmap.c
+++ b/mi/micmap.c
@@ -385,7 +385,7 @@ static int  miVisualPriority[] = {
 static miVisualsPtr	miVisuals;
 
 _X_EXPORT void
-miClearVisualTypes()
+miClearVisualTypes(void)
 {
     miVisualsPtr v;
 
@@ -690,7 +690,7 @@ miDoInitVisuals(VisualPtr *visualp, Dept
 }
 
 void
-miResetInitVisuals()
+miResetInitVisuals(void)
 {
     miInitVisualsProc = miDoInitVisuals;
 }
diff --git a/mi/mieq.c b/mi/mieq.c
index 5bd87eb..34509cd 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -80,7 +80,7 @@ typedef struct _EventQueue {
 static EventQueueRec miEventQueue;
 
 Bool
-mieqInit()
+mieqInit(void)
 {
     int i;
 
@@ -195,7 +195,7 @@ mieqSetHandler(int event, mieqHandler ha
 
 /* Call this from ProcessInputEvents(). */
 void
-mieqProcessInputEvents()
+mieqProcessInputEvents(void)
 {
     EventRec *e = NULL;
     int x = 0, y = 0;
diff --git a/os/log.c b/os/log.c
index b1d628c..e8aa3fa 100644
--- a/os/log.c
+++ b/os/log.c
@@ -221,7 +221,7 @@ LogInit(const char *fname, const char *b
 }
 
 void
-LogClose()
+LogClose(void)
 {
     if (logFile) {
 	fclose(logFile);
@@ -616,7 +616,7 @@ Error(char *str)
 }
 
 void
-LogPrintMarkers()
+LogPrintMarkers(void)
 {
     /* Show what the message marker symbols mean. */
     ErrorF("Markers: ");
diff --git a/os/oscolor.c b/os/oscolor.c
index a13a3a6..d53e4d8 100644
--- a/os/oscolor.c
+++ b/os/oscolor.c
@@ -102,7 +102,7 @@ typedef struct _builtinColor {
 #define NUM_BUILTIN_COLORS  (sizeof (BuiltinColors) / sizeof (BuiltinColors[0]))
 
 Bool
-OsInitColors()
+OsInitColors(void)
 {
     return TRUE;
 }
diff --git a/render/glyph.c b/render/glyph.c
index 5987cbc..583a52b 100644
--- a/render/glyph.c
+++ b/render/glyph.c
@@ -86,13 +86,13 @@ static int	globalTotalGlyphPrivateSize =
 static int	glyphPrivateCount = 0;
 
 void
-ResetGlyphPrivates ()
+ResetGlyphPrivates (void)
 {
     glyphPrivateCount = 0;
 }
 
 int
-AllocateGlyphPrivateIndex ()
+AllocateGlyphPrivateIndex (void)
 {
     return glyphPrivateCount++;
 }
diff-tree f24391dbfd12a84253dfec794ee7884afd52e197 (from 4c2e28b0916b5f75cfefb6df9fa0a7a09675539a)
Author: Keith Packard <keithp at neko.keithp.com>
Date:   Mon Apr 9 12:30:31 2007 -0700

    In AIGLX EnterVT processing, invoke driver EnterVT before resuming glx.
    
    As the driver EnterVT function generally re-enables the hardware and
    prepares it for rendering, it must be called before any gl functions are
    called which could touch the hardware.

diff --git a/GL/glx/glxdri.c b/GL/glx/glxdri.c
index 5e683a8..c30f372 100644
--- a/GL/glx/glxdri.c
+++ b/GL/glx/glxdri.c
@@ -829,12 +829,16 @@ static Bool
 glxDRIEnterVT (int index, int flags)
 {
     __GLXDRIscreen *screen = (__GLXDRIscreen *) __glXgetActiveScreen(index);
+    Bool ret;
 
     LogMessage(X_INFO, "AIGLX: Resuming AIGLX clients after VT switch\n");
 
+    if (!(*screen->enterVT) (index, flags))
+	return FALSE;
+    
     glxResumeClients();
 
-    return (*screen->enterVT) (index, flags);
+    return TRUE;
 }
 
 static void
diff-tree 4c2e28b0916b5f75cfefb6df9fa0a7a09675539a (from 4beeab8424774ea4c3142f29b90e33f1fc7cb154)
Author: Keith Packard <keithp at neko.keithp.com>
Date:   Mon Apr 9 12:28:53 2007 -0700

    Add setrlimit call in -core option to make dumps occur.
    
    Default core size limit for most environments is 0, which disables core
    dumps. Add code in the -core option processing path to set the core limit to
    the maximum value.

diff --git a/os/utils.c b/os/utils.c
index e605a6c..5058285 100644
--- a/os/utils.c
+++ b/os/utils.c
@@ -64,6 +64,8 @@ OR PERFORMANCE OF THIS SOFTWARE.
 #include <X11/Xos.h>
 #include <stdio.h>
 #include <time.h>
+#include <sys/time.h>
+#include <sys/resource.h>
 #include "misc.h"
 #include <X11/X.h>
 #define XSERV_t
@@ -795,7 +797,13 @@ ProcessCommandLine(int argc, char *argv[
 		UseMsg();
 	}
 	else if ( strcmp( argv[i], "-core") == 0)
+	{
+	    struct rlimit   core_limit;
 	    CoreDump = TRUE;
+	    getrlimit (RLIMIT_CORE, &core_limit);
+	    core_limit.rlim_cur = core_limit.rlim_max;
+	    setrlimit (RLIMIT_CORE, &core_limit);
+	}
 	else if ( strcmp( argv[i], "-dpi") == 0)
 	{
 	    if(++i < argc)
diff-tree 4beeab8424774ea4c3142f29b90e33f1fc7cb154 (from 0a6ac992363343487dfe0a0fc985ea55bd448382)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Sun Apr 8 13:39:06 2007 +0300

    XFree86: Treat evdev and vmmouse as mouse drivers (bug #10512, #10559)
    
    When we see an evdev or vmmouse section, assume that it's a mouse, and
    don't add a default mouse device.  This will break users who have an
    evdev keyboard section but no mouse, and want the mouse to get added
    by default.

diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index 4db844e..cbeda0b 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -1287,9 +1287,13 @@ checkCoreInputDevices(serverLayoutPtr se
      * always synthesize a 'mouse' section configured to send core
      * events, unless a 'void' section is found, in which case the user
      * probably wants to run footless.
+     *
+     * If you're using an evdev keyboard and expect a default mouse
+     * section ... deal.
      */
     for (i = servlayoutp->inputs; i->identifier && i->driver; i++) {
-	if (!strcmp(i->driver, "void") || !strcmp(i->driver, "mouse")) {
+	if (!strcmp(i->driver, "void") || !strcmp(i->driver, "mouse") ||
+            !strcmp(i->driver, "vmmouse") || !strcmp(i->driver, "evdev")) {
 	    found = 1; break;
 	}
     }
diff-tree 0a6ac992363343487dfe0a0fc985ea55bd448382 (from 7e385598613778de14c0feea0d32f17d7aa66a8e)
Author: Brian <brian at yutani.localnet.net>
Date:   Sat Apr 7 12:41:57 2007 -0600

    regenerated to fix bug 10371

diff --git a/GL/glx/indirect_size_get.c b/GL/glx/indirect_size_get.c
index 150c6a1..ccb25f8 100644
--- a/GL/glx/indirect_size_get.c
+++ b/GL/glx/indirect_size_get.c
@@ -639,7 +639,7 @@ __glGetBooleanv_size(GLenum e)
     case GL_PROGRAM_ERROR_POSITION_ARB:
     case GL_DEPTH_CLAMP_NV:
     case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
-/*      case GL_NUM_TEXTURE_COMPRESSED_FORMATS_ARB:*/
+/*      case GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB:*/
     case GL_MAX_VERTEX_UNITS_ARB:
     case GL_ACTIVE_VERTEX_UNITS_ARB:
     case GL_WEIGHT_SUM_UNITY_ARB:
@@ -699,6 +699,8 @@ __glGetBooleanv_size(GLenum e)
 /*      case GL_POINT_SPRITE_NV:*/
     case GL_POINT_SPRITE_R_MODE_NV:
     case GL_MAX_VERTEX_ATTRIBS_ARB:
+    case GL_MAX_TEXTURE_COORDS_ARB:
+    case GL_MAX_TEXTURE_IMAGE_UNITS_ARB:
     case GL_DEPTH_BOUNDS_TEST_EXT:
     case GL_STENCIL_TEST_TWO_SIDE_EXT:
     case GL_ACTIVE_STENCIL_FACE_EXT:
@@ -1005,8 +1007,6 @@ __glGetProgramivARB_size(GLenum e)
     case GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB:
     case GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB:
     case GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB:
-    case GL_MAX_TEXTURE_COORDS_ARB:
-    case GL_MAX_TEXTURE_IMAGE_UNITS_ARB:
     case GL_PROGRAM_FORMAT_ARB:
     case GL_PROGRAM_INSTRUCTIONS_ARB:
     case GL_MAX_PROGRAM_INSTRUCTIONS_ARB:
diff-tree 7e385598613778de14c0feea0d32f17d7aa66a8e (from 5a804f2e97ab59745482660a635b801ac2b9e769)
Author: George Sapountzis <gsap7 at yahoo.gr>
Date:   Fri Apr 6 13:38:12 2007 +0300

    GLcore: fix after moving xf86glx_util.[hc] to Mesa.

diff --git a/GL/mesa/.gitignore b/GL/mesa/.gitignore
index a00885d..6b92b24 100644
--- a/GL/mesa/.gitignore
+++ b/GL/mesa/.gitignore
@@ -1,6 +1,6 @@
 X/drivers
 X/glxheader.h
-X/xmesaP.h
+X/xm*.h
 X/xm*.c
 mesa/drivers
 mesa/glxheader.h
diff --git a/GL/mesa/X/Makefile.am b/GL/mesa/X/Makefile.am
index 056d31a..f8f16c3 100644
--- a/GL/mesa/X/Makefile.am
+++ b/GL/mesa/X/Makefile.am
@@ -22,14 +22,13 @@ AM_CFLAGS = \
 	-DXFree86Server \
 	@GLX_DEFINES@
 
-libX_la_SOURCES = xf86glx.c \
-                  xf86glx_util.c \
-                  xf86glx_util.h
+libX_la_SOURCES = xf86glx.c
 
 nodist_libX_la_SOURCES = \
                   xm_api.c \
 		  xm_buffer.c \
                   xm_dd.c \
+                  xm_image.c \
                   xm_line.c \
                   xm_span.c \
                   xm_tri.c \
diff --git a/GL/mesa/X/xf86glx_util.c b/GL/mesa/X/xf86glx_util.c
deleted file mode 100644
index 6af773f..0000000
--- a/GL/mesa/X/xf86glx_util.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/**************************************************************************
-
-Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
-All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sub license, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice (including the
-next paragraph) shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
-IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
-ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-**************************************************************************/
-
-/*
- * Authors:
- *   Kevin E. Martin <kevin at precisioninsight.com>
- *   Brian Paul <brian at precisioninsight.com>
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <stdlib.h>
-
-#include "xf86glx_util.h"
-#include <X11/Xmd.h>
-
-#ifdef ROUNDUP
-#undef ROUNDUP
-#endif
-
-#define ROUNDUP(nbytes, pad) ((((nbytes) + ((pad)-1)) / (pad)) * ((pad)>>3))
-
-XMesaImage *XMesaCreateImage(int bitsPerPixel, int width, int height, char *data)
-{
-    XMesaImage *image;
-
-    image = (XMesaImage *)xalloc(sizeof(XMesaImage));
-
-    if (image) {
-	image->width = width;
-	image->height = height;
-	image->data = data;
-	/* Always pad to 32 bits */
-	image->bytes_per_line = ROUNDUP((bitsPerPixel * width), 32);
-	image->bits_per_pixel = bitsPerPixel;
-    }
-
-    return image;
-}
-
-void XMesaDestroyImage(XMesaImage *image)
-{
-    if (image->data)
-	free(image->data);
-    xfree(image);
-}
-
-unsigned long XMesaGetPixel(XMesaImage *image, int x, int y)
-{
-    CARD8  *row = (CARD8 *)(image->data + y*image->bytes_per_line);
-    CARD8  *i8;
-    CARD16 *i16;
-    CARD32 *i32;
-    switch (image->bits_per_pixel) {
-    case 8:
-	i8 = (CARD8 *)row;
-	return i8[x];
-	break;
-    case 15:
-    case 16:
-	i16 = (CARD16 *)row;
-	return i16[x];
-	break;
-    case 24: /* WARNING: architecture specific code */
-	i8 = (CARD8 *)row;
-	return (((CARD32)i8[x*3]) |
-		(((CARD32)i8[x*3+1])<<8) |
-		(((CARD32)i8[x*3+2])<<16));
-	break;
-    case 32:
-	i32 = (CARD32 *)row;
-	return i32[x];
-	break;
-    }
-    return 0;
-}
-
-#ifndef XMESA_USE_PUTPIXEL_MACRO
-void XMesaPutPixel(XMesaImage *image, int x, int y, unsigned long pixel)
-{
-    CARD8  *row = (CARD8 *)(image->data + y*image->bytes_per_line);
-    CARD8  *i8;
-    CARD16 *i16;
-    CARD32 *i32;
-    switch (image->bits_per_pixel) {
-    case 8:
-	i8 = (CARD8 *)row;
-	i8[x] = (CARD8)pixel;
-	break;
-    case 15:
-    case 16:
-	i16 = (CARD16 *)row;
-	i16[x] = (CARD16)pixel;
-	break;
-    case 24: /* WARNING: architecture specific code */
-	i8 = (CARD8 *)__row;
-	i8[x*3]   = (CARD8)(p);
-	i8[x*3+1] = (CARD8)(p>>8);
-	i8[x*3+2] = (CARD8)(p>>16);
-    case 32:
-	i32 = (CARD32 *)row;
-	i32[x] = (CARD32)pixel;
-	break;
-    }
-}
-#endif
-
-void XMesaPutImageHelper(ScreenPtr display,
-			 DrawablePtr d, GCPtr gc,
-			 XMesaImage *image,
-			 int src_x, int src_y,
-			 int dest_x, int dest_y,
-			 unsigned int width, unsigned int height)
-{
-    /* NOT_DONE: Verify that the following works for all depths */
-    char *src = (image->data +
-		 src_y * image->bytes_per_line +
-		 ((src_x * image->bits_per_pixel) >> 3));
-
-    ValidateGC(d, gc);
-    (*gc->ops->PutImage)(d, gc, d->depth, dest_x, dest_y, width, height,
-			 0, ZPixmap, src);
-}
diff --git a/GL/mesa/X/xf86glx_util.h b/GL/mesa/X/xf86glx_util.h
deleted file mode 100644
index bb31412..0000000
--- a/GL/mesa/X/xf86glx_util.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/**************************************************************************
-
-Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
-All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sub license, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice (including the
-next paragraph) shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
-IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
-ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-**************************************************************************/
-
-/*
- * Authors:
- *   Kevin E. Martin <kevin at precisioninsight.com>
- *   Brian Paul <brian at precisioninsight.com>
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#ifndef _XF86GLX_UTIL_H_
-#define _XF86GLX_UTIL_H_
-
-#ifdef __CYGWIN__
-#undef WIN32
-#undef _WIN32
-#endif
-
-#include <screenint.h>
-#include <pixmap.h>
-#include <gc.h>
-#include "GL/xmesa.h"
-
-#define XMESA_USE_PUTPIXEL_MACRO
-
-struct _XMesaImageRec {
-    int width, height;
-    char *data;
-    int bytes_per_line; /* Padded to 32 bits */
-    int bits_per_pixel;
-};
-
-extern XMesaImage *XMesaCreateImage(int bitsPerPixel, int width, int height,
-				    char *data);
-extern void XMesaDestroyImage(XMesaImage *image);
-extern unsigned long XMesaGetPixel(XMesaImage *image, int x, int y);
-#ifdef XMESA_USE_PUTPIXEL_MACRO
-#define XMesaPutPixel(__i,__x,__y,__p) \
-{ \
-    CARD8  *__row = (CARD8 *)(__i->data + __y*__i->bytes_per_line); \
-    CARD8  *__i8; \
-    CARD16 *__i16; \
-    CARD32 *__i32; \
-    switch (__i->bits_per_pixel) { \
-    case 8: \
-	__i8 = (CARD8 *)__row; \
-	__i8[__x] = (CARD8)__p; \
-	break; \
-    case 15: \
-    case 16: \
-	__i16 = (CARD16 *)__row; \
-	__i16[__x] = (CARD16)__p; \
-	break; \
-    case 24: /* WARNING: architecture specific code */ \
-	__i8 = (CARD8 *)__row; \
-	__i8[__x*3]   = (CARD8)(__p); \
-	__i8[__x*3+1] = (CARD8)(__p>>8); \
-	__i8[__x*3+2] = (CARD8)(__p>>16); \
-	break; \
-    case 32: \
-	__i32 = (CARD32 *)__row; \
-	__i32[__x] = (CARD32)__p; \
-	break; \
-    } \
-}
-#else
-extern void XMesaPutPixel(XMesaImage *image, int x, int y,
-			  unsigned long pixel);
-#endif
-
-extern void XMesaPutImageHelper(ScreenPtr display,
-				DrawablePtr d, GCPtr gc,
-				XMesaImage *image,
-				int src_x, int src_y,
-				int dest_x, int dest_y,
-				unsigned int width, unsigned int height);
-
-#endif /* _XF86GLX_UTIL_H_ */
diff --git a/GL/symlink-mesa.sh b/GL/symlink-mesa.sh
index 3d96716..0cfe1c9 100755
--- a/GL/symlink-mesa.sh
+++ b/GL/symlink-mesa.sh
@@ -168,6 +168,8 @@ symlink_mesa_x() {
     action xm_api.c
     action xm_buffer.c
     action xm_dd.c
+    action xm_image.c
+    action xm_image.h
     action xm_line.c
     action xm_span.c
     action xm_tri.c
diff-tree 5a804f2e97ab59745482660a635b801ac2b9e769 (from a4e2fc703484fffed8dd50c1b4b24c564be4d3cd)
Author: George Sapountzis <gsap7 at yahoo.gr>
Date:   Thu Apr 5 19:14:31 2007 +0300

    configure: minor cosmetic, move GLX extension options together.

diff --git a/configure.ac b/configure.ac
index fde6a89..cb8b435 100644
--- a/configure.ac
+++ b/configure.ac
@@ -453,9 +453,6 @@ AC_ARG_WITH(os-vendor,       AS_HELP_STR
 AC_ARG_WITH(builderstring,   AS_HELP_STRING([--with-builderstring=BUILDERSTRING], [Additional builder string]),
 				[ BUILDERSTRING="$withval" ]
 				[ ])
-AC_ARG_WITH(mesa-source,     AS_HELP_STRING([--with-mesa-source=MESA_SOURCE], [Path to Mesa source tree]),
-                                [ MESA_SOURCE="$withval" ],
-                                [ MESA_SOURCE="" ])
 AC_ARG_WITH(fontdir,         AS_HELP_STRING([--with-fontdir=FONTDIR], [Path to top level dir where fonts are installed (default: ${libdir}/X11/fonts)]),
                                 [ FONTDIR="$withval" ],
                                 [ FONTDIR="${libdir}/X11/fonts" ])
@@ -472,9 +469,6 @@ AC_ARG_WITH(xkb-output,       AS_HELP_ST
 AC_ARG_WITH(rgb-path,         AS_HELP_STRING([--with-rgb-path=PATH], [Path to RGB database (default: ${datadir}/X11/rgb)]),
 				[ RGBPATH="$withval" ],
 				[ RGBPATH="${datadir}/X11/rgb" ])
-AC_ARG_WITH(dri-driver-path,  AS_HELP_STRING([--with-dri-driver-path=PATH], [Path to DRI drivers (default: ${libdir}/dri)]),
-				[ DRI_DRIVER_PATH="$withval" ],
-				[ DRI_DRIVER_PATH="${libdir}/dri" ])
 APPLE_APPLICATIONS_DIR="${bindir}/Applications"
 AC_ARG_WITH(apple-applications-dir,AS_HELP_STRING([--with-apple-applications-dir=PATH], [Path to the Applications directory (default: ${bindir}/Applications)]),
                                [ APPLE_APPLICATIONS_DIR="${withval}" ].
@@ -494,6 +488,20 @@ AC_ARG_ENABLE(null-root-cursor, AS_HELP_
                                  [NULL_ROOT_CURSOR=$enableval],
                                  [NULL_ROOT_CURSOR=no])
 
+dnl GLX build options
+AC_ARG_WITH(mesa-source,     AS_HELP_STRING([--with-mesa-source=MESA_SOURCE], [Path to Mesa source tree]),
+                                [ MESA_SOURCE="$withval" ],
+                                [ MESA_SOURCE="" ])
+AC_ARG_WITH(dri-driver-path,  AS_HELP_STRING([--with-dri-driver-path=PATH], [Path to DRI drivers (default: ${libdir}/dri)]),
+				[ DRI_DRIVER_PATH="$withval" ],
+				[ DRI_DRIVER_PATH="${libdir}/dri" ])
+AC_ARG_ENABLE(aiglx,          AS_HELP_STRING([--enable-aiglx], [Build accelerated indirect GLX (default: enabled)]),
+                                [AIGLX=$enableval],
+                                [AIGLX=yes])
+AC_ARG_ENABLE(glx-tls,        AS_HELP_STRING([--enable-glx-tls], [Build GLX with TLS support (default: disabled)]),
+                                [GLX_USE_TLS=$enableval],
+                                [GLX_USE_TLS=no])
+
 dnl Extensions.
 AC_ARG_ENABLE(composite,      AS_HELP_STRING([--disable-composite], [Build Composite extension (default: enabled)]), [COMPOSITE=$enableval], [COMPOSITE=yes])
 AC_ARG_ENABLE(mitshm,         AS_HELP_STRING([--disable-shm], [Build SHM extension (default: enabled)]), [MITSHM=$enableval], [MITSHM=yes])
@@ -508,13 +516,11 @@ AC_ARG_ENABLE(screensaver,    AS_HELP_ST
 AC_ARG_ENABLE(xdmcp,          AS_HELP_STRING([--disable-xdmcp], [Build XDMCP extension (default: auto)]), [XDMCP=$enableval], [XDMCP=auto])
 AC_ARG_ENABLE(xdm-auth-1,     AS_HELP_STRING([--disable-xdm-auth-1], [Build XDM-Auth-1 extension (default: auto)]), [XDMAUTH=$enableval], [XDMAUTH=auto])
 AC_ARG_ENABLE(glx,            AS_HELP_STRING([--disable-glx], [Build GLX extension (default: enabled)]), [GLX=$enableval], [GLX=yes])
-AC_ARG_ENABLE(aiglx,          AS_HELP_STRING([--enable-aiglx], [Build accelerated indirect GLX (default: enabled)]), [AIGLX=$enableval], [AIGLX=yes])
-AC_ARG_ENABLE(glx-tls,        AS_HELP_STRING([--enable-glx-tls], [Build GLX with TLS support (default: disabled)]), [GLX_USE_TLS=$enableval], [GLX_USE_TLS=no])
 AC_ARG_ENABLE(dri,            AS_HELP_STRING([--enable-dri], [Build DRI extension (default: auto)]), [DRI=$enableval])
 AC_ARG_ENABLE(xinerama,	      AS_HELP_STRING([--disable-xinerama], [Build Xinerama extension (default: enabled)]), [XINERAMA=$enableval], [XINERAMA=yes])
 AC_ARG_ENABLE(xf86vidmode,    AS_HELP_STRING([--disable-xf86vidmode], [Build XF86VidMode extension (default: auto)]), [XF86VIDMODE=$enableval], [XF86VIDMODE=auto])
 AC_ARG_ENABLE(xf86misc,       AS_HELP_STRING([--disable-xf86misc], [Build XF86Misc extension (default: auto)]), [XF86MISC=$enableval], [XF86MISC=auto])
-AC_ARG_ENABLE(xace,     AS_HELP_STRING([--disable-xace], [Build X-ACE extension (default: enabled)]), [XACE=$enableval], [XACE=yes])
+AC_ARG_ENABLE(xace,           AS_HELP_STRING([--disable-xace], [Build X-ACE extension (default: enabled)]), [XACE=$enableval], [XACE=yes])
 AC_ARG_ENABLE(xcsecurity,     AS_HELP_STRING([--disable-xcsecurity], [Build Security extension (default: enabled)]), [XCSECURITY=$enableval], [XCSECURITY=$XACE])
 AC_ARG_ENABLE(appgroup,       AS_HELP_STRING([--disable-appgroup], [Build XC-APPGROUP extension (default: enabled)]), [APPGROUP=$enableval], [APPGROUP=$XCSECURITY])
 AC_ARG_ENABLE(xcalibrate,     AS_HELP_STRING([--enable-xcalibrate], [Build XCalibrate extension (default: disabled)]), [XCALIBRATE=$enableval], [XCALIBRATE=no])
diff-tree a4e2fc703484fffed8dd50c1b4b24c564be4d3cd (from 38ca7d388c47c4800c74442172d6595a9b3dfcc7)
Author: George Sapountzis <gsap7 at yahoo.gr>
Date:   Thu Apr 5 19:13:47 2007 +0300

    glx: Remove stray __GLinterface.
    
    __GLinterface was droped from glcore.h

diff --git a/GL/glx/glxext.c b/GL/glx/glxext.c
index 1f6c7f3..ca874e3 100644
--- a/GL/glx/glxext.c
+++ b/GL/glx/glxext.c
@@ -275,7 +275,7 @@ static GLboolean errorOccured = GL_FALSE
 /*
 ** The GL was will call this routine if an error occurs.
 */
-void __glXErrorCallBack(__GLinterface *gc, GLenum code)
+void __glXErrorCallBack(GLenum code)
 {
     errorOccured = GL_TRUE;
 }
diff --git a/GL/glx/glxext.h b/GL/glx/glxext.h
index edd66a8..dc4cd4a 100644
--- a/GL/glx/glxext.h
+++ b/GL/glx/glxext.h
@@ -66,7 +66,7 @@ typedef struct {
 extern GLboolean __glXFreeContext(__GLXcontext *glxc);
 extern void __glXFlushContextCache(void);
 
-extern void __glXErrorCallBack(__GLinterface *gc, GLenum code);
+extern void __glXErrorCallBack(GLenum code);
 extern void __glXClearErrorOccured(void);
 extern GLboolean __glXErrorOccured(void);
 extern void __glXResetLargeCommandStatus(__GLXclientState*);
diff-tree 38ca7d388c47c4800c74442172d6595a9b3dfcc7 (from f8482967ae8080f49dd1bbb0b79cc65020df679f)
Author: George Sapountzis <gsap7 at yahoo.gr>
Date:   Thu Apr 5 19:13:14 2007 +0300

    glx: fix symlink, glcontextmodes.c was moved to mesa/src/glx/

diff --git a/GL/symlink-mesa.sh b/GL/symlink-mesa.sh
index 7d1e06e..3d96716 100755
--- a/GL/symlink-mesa.sh
+++ b/GL/symlink-mesa.sh
@@ -225,9 +225,6 @@ symlink_glx() {
     dst_dir glx
 
     action indirect_size.h
-
-    src_dir src/mesa/drivers/dri/common
-
     action glcontextmodes.c
     action glcontextmodes.h
 
diff-tree f8482967ae8080f49dd1bbb0b79cc65020df679f (from c10df5b967d4da4e11786520317e2917de5541fa)
Author: Thomas Hellstrom <thomas-at-tungstengraphics-dot-com>
Date:   Wed Apr 4 12:28:48 2007 +0200

    Add an EXA driver callback to determine whether a pixmap is
    
    "offscreen" in exa terms, which means accessible to the GPU.
    Bump exa minor. The change is backwards-compatible.

diff --git a/exa/exa.c b/exa/exa.c
index dd27d5e..23fe555 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -322,6 +322,9 @@ exaPixmapIsOffscreen(PixmapPtr p)
     if (p->devPrivate.ptr == NULL)
 	return TRUE;
 
+    if (pExaScr->info->PixmapIsOffscreen)
+	return pExaScr->info->PixmapIsOffscreen(p);
+
     return ((unsigned long) ((CARD8 *) p->devPrivate.ptr -
 			     (CARD8 *) pExaScr->info->memoryBase) <
 	    pExaScr->info->memorySize);
diff --git a/exa/exa.h b/exa/exa.h
index bf723f7..6c39a8f 100644
--- a/exa/exa.h
+++ b/exa/exa.h
@@ -39,7 +39,7 @@
 #include "fb.h"
 
 #define EXA_VERSION_MAJOR   2
-#define EXA_VERSION_MINOR   1
+#define EXA_VERSION_MINOR   2
 #define EXA_VERSION_RELEASE 0
 
 typedef struct _ExaOffscreenArea ExaOffscreenArea;
@@ -636,6 +636,23 @@ typedef struct _ExaDriver {
      */
     void	(*FinishAccess)(PixmapPtr pPix, int index);
 
+    /**
+     * PixmapIsOffscreen() is an optional driver replacement to
+     * exaPixmapIsOffscreen(). Set to NULL if you want the standard behaviour
+     * of exaPixmapIsOffscreen().
+     *
+     * @param pPix the pixmap
+     * @return TRUE if the given drawable is in framebuffer memory.
+     *
+     * exaPixmapIsOffscreen() is used to determine if a pixmap is in offscreen
+     * memory, meaning that acceleration could probably be done to it, and that it
+     * will need to be wrapped by PrepareAccess()/FinishAccess() when accessing it
+     * with the CPU.
+     *
+     *
+     */
+    Bool	(*PixmapIsOffscreen)(PixmapPtr pPix);
+
 	/** @name PrepareAccess() and FinishAccess() indices
 	 * @{
 	 */
diff-tree c10df5b967d4da4e11786520317e2917de5541fa (from e1dea151db6405e12d991feacba9446320739ee8)
Author: Aaron Plattner <aplattner at nvidia.com>
Date:   Tue Apr 3 15:47:01 2007 -0700

    Swap RRScreenChangeNotifyEvent dimensions when the screen has one crtc and it's rotated.
    
    RandR 1.1 clients expect the size fields in this event to be the unrotated
    dimensions of the screen.  This behavior is "weird", but that's the way the old
    code worked so we need to be bug-compatible with it.

diff --git a/randr/rrscreen.c b/randr/rrscreen.c
index ad74ac3..f83fce3 100644
--- a/randr/rrscreen.c
+++ b/randr/rrscreen.c
@@ -116,11 +116,19 @@ RRDeliverScreenEvent (ClientPtr client, 
 
     se.sequenceNumber = client->sequence;
     se.sizeID = RR10CurrentSizeID (pScreen);
-    
-    se.widthInPixels = pScreen->width;
-    se.heightInPixels = pScreen->height;
-    se.widthInMillimeters = pScreen->mmWidth;
-    se.heightInMillimeters = pScreen->mmHeight;
+
+    if (se.rotation & (RR_Rotate_90 | RR_Rotate_270)) {
+	se.widthInPixels = pScreen->height;
+	se.heightInPixels = pScreen->width;
+	se.widthInMillimeters = pScreen->mmHeight;
+	se.heightInMillimeters = pScreen->mmWidth;
+    } else {
+	se.widthInPixels = pScreen->width;
+	se.heightInPixels = pScreen->height;
+	se.widthInMillimeters = pScreen->mmWidth;
+	se.heightInMillimeters = pScreen->mmHeight;
+    }
+
     WriteEventsToClient (client, 1, (xEvent *) &se);
 }
 
diff-tree e1dea151db6405e12d991feacba9446320739ee8 (from 0ee40c935750e25a9e178cdd70f6b2c667e79344)
Author: Brian <brian at yutani.localnet.net>
Date:   Tue Apr 3 11:21:50 2007 -0600

    Implement a minor hack in dmxCheckFunctionKeys() to detect special keys.
    
    Keep track of status of (left) alt/ctrl keys so that ctrl-alt-q to exit
    can be detected.  Not ideal, but works for now.

diff --git a/hw/dmx/input/dmxevents.c b/hw/dmx/input/dmxevents.c
index e4d556b..4810b17 100644
--- a/hw/dmx/input/dmxevents.c
+++ b/hw/dmx/input/dmxevents.c
@@ -103,17 +103,36 @@ static int dmxCheckFunctionKeys(DMXLocal
 {
     DMXInputInfo   *dmxInput = &dmxInputs[dmxLocal->inputIdx];
     unsigned short state = 0;
-    
+
+#if 1 /* hack to detect ctrl-alt-q, etc */
+    static int ctrl = 0, alt = 0;
+    /* keep track of ctrl/alt key status */
+    if (type == KeyPress && keySym == 0xffe3) {
+        ctrl = 1;
+    }
+    else if (type == KeyRelease && keySym == 0xffe3) {
+        ctrl = 0;
+    }
+    else if (type == KeyPress && keySym == 0xffe9) {
+        alt = 1;
+    }
+    else if (type == KeyRelease && keySym == 0xffe9) {
+        alt = 0;
+    }
+    if (!ctrl || !alt)
+        return 0;
+#else
     if (dmxLocal->sendsCore)
         state = dmxLocalCoreKeyboard->pDevice->key->state;
     else if (dmxLocal->pDevice->key)
         state = dmxLocal->pDevice->key->state;
     
-    ErrorF/*DMXDBG3*/("dmxCheckFunctionKeys: keySym=0x%04x %s state=0x%04x\n",
+    DMXDBG3("dmxCheckFunctionKeys: keySym=0x%04x %s state=0x%04x\n",
             keySym, type == KeyPress ? "press" : "release", state);
 
     if ((state & (ControlMask|Mod1Mask)) != (ControlMask|Mod1Mask))
         return 0;
+#endif
 
     switch (keySym) {
     case XK_g:
@@ -679,7 +698,7 @@ void dmxEnqueue(DevicePtr pDev, int type
             xE.u.u.detail = dmxFixup(pDev, detail, keySym);
 
         events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
-        ErrorF("KEY %d  sym %d\n", detail, (int) keySym);
+        /*ErrorF("KEY %d  sym %d\n", detail, (int) keySym);*/
         nevents = GetKeyboardEvents(events, p, type, detail);
         for (i = 0; i < nevents; i++)
             mieqEnqueue(p, events + i);
diff-tree 0ee40c935750e25a9e178cdd70f6b2c667e79344 (from 23974f20bf0e0c2786cc75af026af5484f6dc331)
Author: Brian <brian at yutani.localnet.net>
Date:   Tue Apr 3 09:31:00 2007 -0600

    s/intead/instead/

diff --git a/fb/fbcmap.c b/fb/fbcmap.c
index a8cfb79..c29a513 100644
--- a/fb/fbcmap.c
+++ b/fb/fbcmap.c
@@ -40,7 +40,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include "fb.h"
 
 #ifdef XFree86Server
-#error "You should be compiling fbcmap_mi.c intead of fbcmap.c!"
+#error "You should be compiling fbcmap_mi.c instead of fbcmap.c!"
 #endif
 
 
diff-tree 23974f20bf0e0c2786cc75af026af5484f6dc331 (from a240c039c47c0be22ea5e100692307b26d938747)
Author: Brian <brian at yutani.localnet.net>
Date:   Tue Apr 3 09:30:24 2007 -0600

    add DDXRingBell() stub to solve link problem

diff --git a/hw/xprint/ddxInit.c b/hw/xprint/ddxInit.c
index 8e7ec2e..a465c4c 100644
--- a/hw/xprint/ddxInit.c
+++ b/hw/xprint/ddxInit.c
@@ -89,6 +89,12 @@ InitOutput(
 
 }
 
+void
+DDXRingBell(int volume, int pitch, int duration)
+{
+   /* dummy func; link fails without */
+}
+
 static void
 BellProc(
     int volume,
diff-tree a240c039c47c0be22ea5e100692307b26d938747 (from 1cc8db72816cd079f30255046e10043c350bf683)
Author: Brian <brian at yutani.localnet.net>
Date:   Tue Apr 3 09:27:57 2007 -0600

    Split the xserver/fb/fbcmap.c file into two files.
    
    Now, fbcmap_mi.c contains the fb functions which just wrap mi functions.
    Previously, these were in fbcmap.c and compiled when XFree86Server was defined.
    Now, clients of fbcmap should either use fbcmap.c or fbcmap_mi.c and not worry
    about setting the XFree86Server symbol.

diff --git a/fb/Makefile.am b/fb/Makefile.am
index 1649669..ab135c9 100644
--- a/fb/Makefile.am
+++ b/fb/Makefile.am
@@ -78,4 +78,4 @@ libwfb_la_SOURCES = $(libfb_la_SOURCES)
 
 libfb_la_LIBADD = libfbmmx.la
 
-EXTRA_DIST = fbcmap.c
+EXTRA_DIST = fbcmap.c fbcmap_mi.c
diff --git a/fb/fbcmap.c b/fb/fbcmap.c
index 9cf5bcb..a8cfb79 100644
--- a/fb/fbcmap.c
+++ b/fb/fbcmap.c
@@ -39,7 +39,12 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include "resource.h"
 #include "fb.h"
 
-#ifndef XFree86Server
+#ifdef XFree86Server
+#error "You should be compiling fbcmap_mi.c intead of fbcmap.c!"
+#endif
+
+
+
 ColormapPtr FbInstalledMaps[MAXSCREENS];
 
 int
@@ -584,87 +589,3 @@ fbInitVisuals (VisualPtr    *visualp, 
     *defaultVisp = depth[i].vids[j];
     return TRUE;
 }
-#else
-
-#include "micmap.h"
-
-int
-fbListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps)
-{
-    return miListInstalledColormaps(pScreen, pmaps);
-}
-
-void
-fbInstallColormap(ColormapPtr pmap)
-{
-    miInstallColormap(pmap);
-}
-
-void
-fbUninstallColormap(ColormapPtr pmap)
-{
-    miUninstallColormap(pmap);
-}
-
-void
-fbResolveColor(unsigned short   *pred,
-	       unsigned short   *pgreen,
-	       unsigned short   *pblue,
-	       VisualPtr	pVisual)
-{
-    miResolveColor(pred, pgreen, pblue, pVisual);
-}
-
-Bool
-fbInitializeColormap(ColormapPtr pmap)
-{
-    return miInitializeColormap(pmap);
-}
-
-int
-fbExpandDirectColors (ColormapPtr   pmap,
-		      int	    ndef,
-		      xColorItem    *indefs,
-		      xColorItem    *outdefs)
-{
-    return miExpandDirectColors(pmap, ndef, indefs, outdefs);
-}
-
-Bool
-fbCreateDefColormap(ScreenPtr pScreen)
-{
-    return miCreateDefColormap(pScreen);
-}
-
-void
-fbClearVisualTypes(void)
-{
-    miClearVisualTypes();
-}
-
-Bool
-fbSetVisualTypes (int depth, int visuals, int bitsPerRGB)
-{
-    return miSetVisualTypes(depth, visuals, bitsPerRGB, -1);
-}
-
-/*
- * Given a list of formats for a screen, create a list
- * of visuals and depths for the screen which coorespond to
- * the set which can be used with this version of fb.
- */
-
-Bool
-fbInitVisuals (VisualPtr    *visualp, 
-	       DepthPtr	    *depthp,
-	       int	    *nvisualp,
-	       int	    *ndepthp,
-	       int	    *rootDepthp,
-	       VisualID	    *defaultVisp,
-	       unsigned long	sizes,
-	       int	    bitsPerRGB)
-{
-    return miInitVisuals(visualp, depthp, nvisualp, ndepthp, rootDepthp,
-			 defaultVisp, sizes, bitsPerRGB, -1);
-}
-#endif
diff --git a/fb/fbcmap_mi.c b/fb/fbcmap_mi.c
new file mode 100644
index 0000000..58bcae3
--- /dev/null
+++ b/fb/fbcmap_mi.c
@@ -0,0 +1,123 @@
+/************************************************************
+Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA.
+
+                    All Rights Reserved
+
+Permission  to  use,  copy,  modify,  and  distribute   this
+software  and  its documentation for any purpose and without
+fee is hereby granted, provided that the above copyright no-
+tice  appear  in all copies and that both that copyright no-
+tice and this permission notice appear in  supporting  docu-
+mentation,  and  that the names of Sun or X Consortium
+not be used in advertising or publicity pertaining to 
+distribution  of  the software  without specific prior 
+written permission. Sun and X Consortium make no 
+representations about the suitability of this software for 
+any purpose. It is provided "as is" without any express or 
+implied warranty.
+
+SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO  THIS  SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT-
+NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE  LI-
+ABLE  FOR  ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,  DATA  OR
+PROFITS,  WHETHER  IN  AN  ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
+THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+********************************************************/
+
+
+/**
+ * This version of fbcmap.c is implemented in terms of mi functions.
+ * These functions used to be in fbcmap.c and depended upon the symbol
+ * XFree86Server being defined.
+ */
+
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <X11/X.h>
+#include "fb.h"
+#include "micmap.h"
+
+int
+fbListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps)
+{
+    return miListInstalledColormaps(pScreen, pmaps);
+}
+
+void
+fbInstallColormap(ColormapPtr pmap)
+{
+    miInstallColormap(pmap);
+}
+
+void
+fbUninstallColormap(ColormapPtr pmap)
+{
+    miUninstallColormap(pmap);
+}
+
+void
+fbResolveColor(unsigned short   *pred,
+	       unsigned short   *pgreen,
+	       unsigned short   *pblue,
+	       VisualPtr	pVisual)
+{
+    miResolveColor(pred, pgreen, pblue, pVisual);
+}
+
+Bool
+fbInitializeColormap(ColormapPtr pmap)
+{
+    return miInitializeColormap(pmap);
+}
+
+int
+fbExpandDirectColors (ColormapPtr   pmap,
+		      int	    ndef,
+		      xColorItem    *indefs,
+		      xColorItem    *outdefs)
+{
+    return miExpandDirectColors(pmap, ndef, indefs, outdefs);
+}
+
+Bool
+fbCreateDefColormap(ScreenPtr pScreen)
+{
+    return miCreateDefColormap(pScreen);
+}
+
+void
+fbClearVisualTypes(void)
+{
+    miClearVisualTypes();
+}
+
+Bool
+fbSetVisualTypes (int depth, int visuals, int bitsPerRGB)
+{
+    return miSetVisualTypes(depth, visuals, bitsPerRGB, -1);
+}
+
+/*
+ * Given a list of formats for a screen, create a list
+ * of visuals and depths for the screen which coorespond to
+ * the set which can be used with this version of fb.
+ */
+Bool
+fbInitVisuals (VisualPtr    *visualp, 
+	       DepthPtr	    *depthp,
+	       int	    *nvisualp,
+	       int	    *ndepthp,
+	       int	    *rootDepthp,
+	       VisualID	    *defaultVisp,
+	       unsigned long	sizes,
+	       int	    bitsPerRGB)
+{
+    return miInitVisuals(visualp, depthp, nvisualp, ndepthp, rootDepthp,
+			 defaultVisp, sizes, bitsPerRGB, -1);
+}
diff --git a/hw/darwin/Makefile.am b/hw/darwin/Makefile.am
index 3e28d32..b8641bb 100644
--- a/hw/darwin/Makefile.am
+++ b/hw/darwin/Makefile.am
@@ -26,12 +26,12 @@ libdarwinShared_a_SOURCES = darwin.c \
 
 bin_PROGRAMS = XDarwin Xquartz
 XDarwin_SOURCES = \
-                  $(top_srcdir)/fb/fbcmap.c \
+                  $(top_srcdir)/fb/fbcmap_mi.c \
                   $(top_srcdir)/mi/miinitext.c \
                   $(top_srcdir)/Xi/stubs.c
 
 Xquartz_SOURCES = \
-                  $(top_srcdir)/fb/fbcmap.c \
+                  $(top_srcdir)/fb/fbcmap_mi.c \
                   $(top_srcdir)/mi/miinitext.c \
                   $(top_srcdir)/Xi/stubs.c \
                   apple/X11Application.m \
@@ -115,7 +115,7 @@ x11app:
 	cd apple && xcodebuild CFLAGS="$(XSERVERCFLAGS_CFLAGS)" LDFLAGS="$(XSERVERCFLAGS_LIBS)"
 
 XDarwinApp_SOURCES = \
-                $(top_srcdir)/fb/fbcmap.c \
+                $(top_srcdir)/fb/fbcmap_mi.c \
                 $(top_srcdir)/mi/miinitext.c \
 		$(top_srcdir)/Xi/stubs.c 
 
diff --git a/hw/dmx/Makefile.am b/hw/dmx/Makefile.am
index 41dc5d2..002ea11 100644
--- a/hw/dmx/Makefile.am
+++ b/hw/dmx/Makefile.am
@@ -16,9 +16,6 @@ GLX_INCS = -I$(top_srcdir)/hw/xfree86/di
 GLX_DEFS = @GL_CFLAGS@ 
 endif
 
-# It's essential that fbcmap.c be compiled with this flag for DMX to work!!
-DMX_CFLAGS = -DXFree86Server=1
-
 if BUILDDOCS
 SUBDIRS += doc
 endif
@@ -76,7 +73,7 @@ Xdmx_SOURCES = dmx.c \
                dmxwindow.c \
                dmxwindow.h \
                $(top_srcdir)/mi/miinitext.c \
-               $(top_srcdir)/fb/fbcmap.c \
+               $(top_srcdir)/fb/fbcmap_mi.c \
                $(GLX_SRCS) 
 
 
diff --git a/hw/vfb/Makefile.am b/hw/vfb/Makefile.am
index 40c3854..6842b45 100644
--- a/hw/vfb/Makefile.am
+++ b/hw/vfb/Makefile.am
@@ -14,8 +14,8 @@ SRCS =	InitInput.c \
 	$(top_srcdir)/Xi/stubs.c \
 	$(top_srcdir)/mi/miinitext.c
 
-libfbcmap_a_CFLAGS = $(AM_CFLAGS) -DXFree86Server
-libfbcmap_a_SOURCES = $(top_srcdir)/fb/fbcmap.c
+libfbcmap_a_CFLAGS = $(AM_CFLAGS)
+libfbcmap_a_SOURCES = $(top_srcdir)/fb/fbcmap_mi.c
 
 Xvfb_SOURCES = $(SRCS)
 
diff --git a/hw/xfree86/dixmods/Makefile.am b/hw/xfree86/dixmods/Makefile.am
index 58099bc..1581019 100644
--- a/hw/xfree86/dixmods/Makefile.am
+++ b/hw/xfree86/dixmods/Makefile.am
@@ -75,13 +75,13 @@ libdbe_la_SOURCES = dbemodule.c
 
 libfb_la_LDFLAGS = -avoid-version
 libfb_la_LIBADD = $(top_builddir)/fb/libfb.la
-libfb_la_SOURCES = $(top_builddir)/fb/fbcmap.c fbmodule.c
-libfb_la_CFLAGS = -DXFree86Server $(AM_CFLAGS)
+libfb_la_SOURCES = $(top_builddir)/fb/fbcmap_mi.c fbmodule.c
+libfb_la_CFLAGS = $(AM_CFLAGS)
 
 libwfb_la_LDFLAGS = -avoid-version
 libwfb_la_LIBADD = $(top_builddir)/fb/libwfb.la
-libwfb_la_SOURCES = $(top_builddir)/fb/fbcmap.c fbmodule.c
-libwfb_la_CFLAGS = -DXFree86Server $(AM_CFLAGS) -DFB_ACCESS_WRAPPER
+libwfb_la_SOURCES = $(top_builddir)/fb/fbcmap_mi.c fbmodule.c
+libwfb_la_CFLAGS = $(AM_CFLAGS) -DFB_ACCESS_WRAPPER
 
 libglx_la_LDFLAGS = -avoid-version
 if AIGLX
diff --git a/hw/xnest/Makefile.am b/hw/xnest/Makefile.am
index b897616..e958c0e 100644
--- a/hw/xnest/Makefile.am
+++ b/hw/xnest/Makefile.am
@@ -45,8 +45,8 @@ SRCS =	Args.c \
 	$(top_srcdir)/Xi/stubs.c \
 	$(top_srcdir)/mi/miinitext.c
 
-libfbcmap_a_SOURCES = $(top_srcdir)/fb/fbcmap.c
-libfbcmap_a_CFLAGS = $(AM_CFLAGS) -DXFree86Server
+libfbcmap_a_SOURCES = $(top_srcdir)/fb/fbcmap_mi.c
+libfbcmap_a_CFLAGS = $(AM_CFLAGS)
 
 Xnest_SOURCES = $(SRCS)
 
diff --git a/hw/xprint/Makefile.am b/hw/xprint/Makefile.am
index d4f22d2..45168b1 100644
--- a/hw/xprint/Makefile.am
+++ b/hw/xprint/Makefile.am
@@ -38,6 +38,6 @@ Xprt_SOURCES =			\
 	Util.c			\
 	miinitext-wrapper.c	\
 	dpmsstubs-wrapper.c     \
-        $(top_srcdir)/fb/fbcmap.c
+        $(top_srcdir)/fb/fbcmap_mi.c
 
 EXTRA_DIST = ValTree.c
diff-tree 1cc8db72816cd079f30255046e10043c350bf683 (from parents)
Merge: 645d87cf8ef724d4591614f9994cdc4d7549a7a8 a39f297ada4fa87c858395ae2aacefac5f8fba05
Author: Matthieu Herrb <matthieu at roadrock.(none)>
Date:   Tue Apr 3 16:04:45 2007 +0200

    Merge branch 'master' of ssh://herrb@git.freedesktop.org/git/xorg/xserver

diff-tree 645d87cf8ef724d4591614f9994cdc4d7549a7a8 (from f2808005f4ee72c5fd7f5f3dcca181306485113e)
Author: Matthieu Herrb <matthieu at roadrock.(none)>
Date:   Tue Apr 3 15:47:18 2007 +0200

    CVE-2007-1003: XC-MISC Extension ProcXCMiscGetXIDList() Memory Corruption

diff --git a/Xext/xcmisc.c b/Xext/xcmisc.c
index f26218e..8c7a86e 100644
--- a/Xext/xcmisc.c
+++ b/Xext/xcmisc.c
@@ -42,6 +42,12 @@ from The Open Group.
 #include <X11/extensions/xcmiscstr.h>
 #include "modinit.h"
 
+#if HAVE_STDINT_H
+#include <stdint.h>
+#elif !defined(UINT32_MAX)
+#define UINT32_MAX 0xffffffffU
+#endif
+
 #if 0
 static unsigned char XCMiscCode;
 #endif
@@ -143,7 +149,10 @@ ProcXCMiscGetXIDList(client)
 
     REQUEST_SIZE_MATCH(xXCMiscGetXIDListReq);
 
-    pids = (XID *)ALLOCATE_LOCAL(stuff->count * sizeof(XID));
+    if (stuff->count > UINT32_MAX / sizeof(XID))
+	    return BadAlloc;
+
+    pids = (XID *)Xalloc(stuff->count * sizeof(XID));
     if (!pids)
     {
 	return BadAlloc;
@@ -164,7 +173,7 @@ ProcXCMiscGetXIDList(client)
     	client->pSwapReplyFunc = (ReplySwapPtr) Swap32Write;
 	WriteSwappedDataToClient(client, count * sizeof(XID), pids);
     }
-    DEALLOCATE_LOCAL(pids);
+    Xfree(pids);
     return(client->noClientException);
 }
 
diff-tree a39f297ada4fa87c858395ae2aacefac5f8fba05 (from 11797ffdcc22160317a5ebbc9291472570a51c6d)
Author: Keith Packard <keithp at viola.jf.intel.com>
Date:   Mon Apr 2 14:15:36 2007 -0700

    Don't erase current crtc for outputs on CloseScreen
    
    Erasing this variable causes some outputs (SDVO on intel) to fail
    to be correctly reset at server reset time.
    (cherry picked from commit 56262a4ee943f328d089a8eb4aa70b9a4bd5d135)

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 32bdcba..0fe03d3 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -598,7 +598,6 @@ xf86CrtcCloseScreen (int index, ScreenPt
     {
 	xf86OutputPtr	output = config->output[o];
 
-	output->crtc = NULL;
 	output->randr_output = NULL;
     }
     for (c = 0; c < config->num_crtc; c++)
diff-tree 11797ffdcc22160317a5ebbc9291472570a51c6d (from e44f106ffc796c025abdfb66717c06db8b12b4e4)
Author: Eric Anholt <eric at anholt.net>
Date:   Mon Apr 2 18:21:58 2007 -0700

    Move modes/ debugging output under Option "ModeDebug" in the Device section.

diff --git a/hw/xfree86/doc/man/xorg.conf.man.pre b/hw/xfree86/doc/man/xorg.conf.man.pre
index cc60d07..19315c0 100644
--- a/hw/xfree86/doc/man/xorg.conf.man.pre
+++ b/hw/xfree86/doc/man/xorg.conf.man.pre
@@ -958,6 +958,10 @@ the driver-specific documentation recomm
 This optional entry specifies the pixel clock frequency that is used
 for the regular text mode.  The frequency is specified in MHz.  This is
 rarely used.
+.TP 7
+.BI "Option \*qModeDebug\*q \*q" boolean \*q
+Enable printing of additional debugging information about modesetting to
+the server log.
 .ig
 .TP 7
 This optional entry allows an IRQ number to be specified.
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 7d86b66..32bdcba 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -377,6 +377,15 @@ static OptionInfoRec xf86OutputOptions[]
     {-1,		    NULL,		OPTV_NONE,    {0}, FALSE },
 };
 
+enum {
+    OPTION_MODEDEBUG,
+};
+
+static OptionInfoRec xf86DeviceOptions[] = {
+    {OPTION_MODEDEBUG,	    "ModeDebug",	OPTV_STRING,  {0}, FALSE },
+    {-1,		    NULL,		OPTV_NONE,    {0}, FALSE },
+};
+
 static void
 xf86OutputSetMonitor (xf86OutputPtr output)
 {
@@ -1160,8 +1169,6 @@ xf86SortModes (DisplayModePtr input)
     return output;
 }
 
-#define DEBUG_REPROBE 1
-
 void
 xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
 {
@@ -1330,7 +1337,8 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, 
 	    if (mode->status == MODE_OK)
 		mode->status = (*output->funcs->mode_valid)(output, mode);
 	
-	xf86PruneInvalidModes(scrn, &output->probed_modes, TRUE);
+	xf86PruneInvalidModes(scrn, &output->probed_modes,
+			      config->debug_modes);
 	
 	output->probed_modes = xf86SortModes (output->probed_modes);
 	
@@ -1363,17 +1371,17 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, 
 	
 	output->initial_rotation = xf86OutputInitialRotation (output);
 
-#ifdef DEBUG_REPROBE
-	if (output->probed_modes != NULL) {
-	    xf86DrvMsg(scrn->scrnIndex, X_INFO,
-		       "Printing probed modes for output %s\n",
-		       output->name);
-	} else {
-	    xf86DrvMsg(scrn->scrnIndex, X_INFO,
-		       "No remaining probed modes for output %s\n",
-		       output->name);
+	if (config->debug_modes) {
+	    if (output->probed_modes != NULL) {
+		xf86DrvMsg(scrn->scrnIndex, X_INFO,
+			   "Printing probed modes for output %s\n",
+			   output->name);
+	    } else {
+		xf86DrvMsg(scrn->scrnIndex, X_INFO,
+			   "No remaining probed modes for output %s\n",
+			   output->name);
+	    }
 	}
-#endif
 	for (mode = output->probed_modes; mode != NULL; mode = mode->next)
 	{
 	    /* The code to choose the best mode per pipe later on will require
@@ -1382,9 +1390,8 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, 
 	    mode->VRefresh = xf86ModeVRefresh(mode);
 	    xf86SetModeCrtc(mode, INTERLACE_HALVE_V);
 
-#ifdef DEBUG_REPROBE
-	    xf86PrintModeline(scrn->scrnIndex, mode);
-#endif
+	    if (config->debug_modes)
+		xf86PrintModeline(scrn->scrnIndex, mode);
 	}
     }
 }
@@ -1479,6 +1486,15 @@ xf86InitialConfiguration (ScrnInfoPtr sc
     int			width;
     int			height;
 
+    /* Set up the device options */
+    config->options = xnfalloc (sizeof (xf86DeviceOptions));
+    memcpy (config->options, xf86DeviceOptions, sizeof (xf86DeviceOptions));
+    xf86ProcessOptions (scrn->scrnIndex,
+			scrn->options,
+			config->options);
+    config->debug_modes = xf86ReturnOptValBool (config->options,
+						OPTION_MODEDEBUG, FALSE);
+
     if (scrn->display->virtualX)
 	width = scrn->display->virtualX;
     else
@@ -1962,10 +1978,12 @@ xf86OutputSetEDID (xf86OutputPtr output,
     
     output->MonInfo = edid_mon;
 
-    /* Debug info for now, at least */
-    xf86DrvMsg(scrn->scrnIndex, X_INFO, "EDID for output %s\n", output->name);
-    xf86PrintEDID(edid_mon);
-    
+    if (config->debug_modes) {
+	xf86DrvMsg(scrn->scrnIndex, X_INFO, "EDID for output %s\n",
+		   output->name);
+	xf86PrintEDID(edid_mon);
+    }
+
     /* Set the DDC properties for the 'compat' output */
     if (output == config->output[config->compat_output])
         xf86SetDDCproperties(scrn, edid_mon);
diff --git a/hw/xfree86/modes/xf86Crtc.h b/hw/xfree86/modes/xf86Crtc.h
index 42daf60..030f6bf 100644
--- a/hw/xfree86/modes/xf86Crtc.h
+++ b/hw/xfree86/modes/xf86Crtc.h
@@ -552,6 +552,13 @@ typedef struct _xf86CrtcConfig {
     CARD8		*cursor_image;
     Bool		cursor_on;
     CARD32		cursor_fg, cursor_bg;
+
+    /**
+     * Options parsed from the related device section
+     */
+    OptionInfoPtr	options;
+
+    Bool		debug_modes;
 } xf86CrtcConfigRec, *xf86CrtcConfigPtr;
 
 extern int xf86CrtcConfigPrivateIndex;
diff-tree e44f106ffc796c025abdfb66717c06db8b12b4e4 (from 8d8bc8927760fad631bef83fa2841b455ff6d511)
Author: Brian <brian at yutani.localnet.net>
Date:   Mon Apr 2 16:26:15 2007 -0600

    clean-up, debug code

diff --git a/hw/dmx/input/dmxevents.c b/hw/dmx/input/dmxevents.c
index 288570d..e4d556b 100644
--- a/hw/dmx/input/dmxevents.c
+++ b/hw/dmx/input/dmxevents.c
@@ -109,11 +109,11 @@ static int dmxCheckFunctionKeys(DMXLocal
     else if (dmxLocal->pDevice->key)
         state = dmxLocal->pDevice->key->state;
     
-    DMXDBG3("dmxCheckFunctionKeys: keySym=0x%04x %s state=0x%04x\n",
+    ErrorF/*DMXDBG3*/("dmxCheckFunctionKeys: keySym=0x%04x %s state=0x%04x\n",
             keySym, type == KeyPress ? "press" : "release", state);
 
     if ((state & (ControlMask|Mod1Mask)) != (ControlMask|Mod1Mask))
-       return 0;
+        return 0;
 
     switch (keySym) {
     case XK_g:
@@ -679,7 +679,7 @@ void dmxEnqueue(DevicePtr pDev, int type
             xE.u.u.detail = dmxFixup(pDev, detail, keySym);
 
         events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
-        ErrorF("KEY %d\n", detail);
+        ErrorF("KEY %d  sym %d\n", detail, (int) keySym);
         nevents = GetKeyboardEvents(events, p, type, detail);
         for (i = 0; i < nevents; i++)
             mieqEnqueue(p, events + i);
@@ -719,12 +719,12 @@ void dmxEnqueue(DevicePtr pDev, int type
                                  * modifier map on the backend/console
                                  * input device so that we have complete
                                  * control of the input device LEDs. */
-       ErrorF("Enter/Leave/Keymap/Mapping\n");
         return;
     default:
 #ifdef XINPUT
         if (type == ProximityIn || type == ProximityOut) {
-            if (dmxLocal->sendsCore) return; /* Not a core event */
+            if (dmxLocal->sendsCore)
+                return; /* Not a core event */
             break;
         }
 #endif
diff-tree 8d8bc8927760fad631bef83fa2841b455ff6d511 (from 3e482de7b145a5eed79b81c30c359fe43647824a)
Author: Brian <brian at yutani.localnet.net>
Date:   Mon Apr 2 16:21:57 2007 -0600

    fix formatting

diff --git a/hw/dmx/input/dmxcommon.c b/hw/dmx/input/dmxcommon.c
index 278a74e..1dcc1e9 100644
--- a/hw/dmx/input/dmxcommon.c
+++ b/hw/dmx/input/dmxcommon.c
@@ -241,13 +241,15 @@ void dmxCommonKbdGetMap(DevicePtr pDev, 
 
                                 /* Compute pModMap  */
     modifier_mapping     = XGetModifierMapping(priv->display);
-    for (i = 0; i < MAP_LENGTH; i++) pModMap[i] = 0;
+    for (i = 0; i < MAP_LENGTH; i++)
+        pModMap[i] = 0;
     for (j = 0; j < 8; j++) {
         int max_keypermod = modifier_mapping->max_keypermod;
         
         for (i = 0; i < max_keypermod; i++) {
             CARD8 keycode = modifier_mapping->modifiermap[j*max_keypermod + i];
-            if (keycode) pModMap[keycode] |= 1 << j;
+            if (keycode)
+                pModMap[keycode] |= 1 << j;
         }
     }
     XFreeModifiermap(modifier_mapping);
@@ -611,6 +613,7 @@ void dmxCommonSaveState(pointer private)
                         &priv->dmxLocal->kctrl);
 
     priv->savedModMap                   = XGetModifierMapping(priv->display);
+
     modmap                              = XNewModifiermap(0);
     XSetModifierMapping(priv->display, modmap);
     if (dmxInput->scrnIdx != -1)
@@ -627,8 +630,10 @@ void dmxCommonRestoreState(pointer priva
     int retcode = -1;
     CARD32 start;
 
-    if (dmxInput->console) priv = dmxInput->devs[0]->private;
-    if (!priv->stateSaved) return;
+    if (dmxInput->console)
+        priv = dmxInput->devs[0]->private;
+    if (!priv->stateSaved)
+        return;
     priv->stateSaved = 0;
     
     DMXDBG0("dmxCommonRestoreState\n");
@@ -645,7 +650,8 @@ void dmxCommonRestoreState(pointer priva
         CARD32 tmp;
         
         retcode = XSetModifierMapping(priv->display, priv->savedModMap);
-        if (retcode == MappingSuccess) break;
+        if (retcode == MappingSuccess)
+            break;
         if (retcode == MappingBusy)
             dmxLogInput(dmxInput, "Keyboard busy, waiting\n");
         else
diff-tree 3e482de7b145a5eed79b81c30c359fe43647824a (from 76a7a5ca1f068c27c9b5fbd49d5a1da80ed6f488)
Author: Brian <brian at yutani.localnet.net>
Date:   Mon Apr 2 15:38:15 2007 -0600

    checkpoint: more clean-up

diff --git a/hw/dmx/input/dmxevents.c b/hw/dmx/input/dmxevents.c
index 17047f7..288570d 100644
--- a/hw/dmx/input/dmxevents.c
+++ b/hw/dmx/input/dmxevents.c
@@ -662,70 +662,56 @@ void dmxEnqueue(DevicePtr pDev, int type
 {
     GETDMXINPUTFROMPDEV;
     xEvent xE;
+    DeviceIntPtr p = dmxLocal->pDevice;
+    int i, nevents, valuators[3];
+    xEvent *events;
 
     DMXDBG2("dmxEnqueue: Enqueuing type=%d detail=0x%0x\n", type, detail);
 
     switch (type) {
     case KeyPress:
     case KeyRelease:
-        if (!keySym) keySym = dmxKeyCodeToKeySym(dmxLocal, detail);
+        if (!keySym)
+            keySym = dmxKeyCodeToKeySym(dmxLocal, detail);
         if (dmxCheckFunctionKeys(dmxLocal, type, keySym))
             return;
         if (dmxLocal->sendsCore && dmxLocal != dmxLocalCoreKeyboard)
             xE.u.u.detail = dmxFixup(pDev, detail, keySym);
-        {
-           DeviceIntPtr p = dmxLocal->pDevice;
-           int i, nevents;
-           xEvent *events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
-           ErrorF("KEY %d\n", detail);
-           nevents = GetKeyboardEvents(events, p, type, detail);
-           for (i = 0; i < nevents; i++)
-              mieqEnqueue(p, events + i);
-           xfree(events);
-           return;
-        }
-        break;
+
+        events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
+        ErrorF("KEY %d\n", detail);
+        nevents = GetKeyboardEvents(events, p, type, detail);
+        for (i = 0; i < nevents; i++)
+            mieqEnqueue(p, events + i);
+        xfree(events);
+        return;
+
     case ButtonPress:
     case ButtonRelease:
         detail = dmxGetButtonMapping(dmxLocal, detail);
-        {
-           DeviceIntPtr p = dmxLocal->pDevice;
-           int i, nevents, valuators[3];
-           xEvent *events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
-           valuators[2] = e->xbutton.button;
-           nevents = GetPointerEvents(events, p, type, detail,
-                                      POINTER_ABSOLUTE,
-                                      0,   /* first_valuator = 0 */
-                                      0,   /* num_valuators = 0 */
-                                      valuators);
-
-           ErrorF("BUTTON %d, %d %d  n=%d\n",
-                  valuators[0], valuators[1], valuators[2], nevents);
-
-           for (i = 0; i < nevents; i++)
-              mieqEnqueue(p, events + i);
-           xfree(events);
-           return;
-        }
-        break;
+        events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
+        nevents = GetPointerEvents(events, p, type, detail,
+                                   POINTER_ABSOLUTE,
+                                   0,   /* first_valuator = 0 */
+                                   0,   /* num_valuators = 0 */
+                                   valuators);
+        for (i = 0; i < nevents; i++)
+            mieqEnqueue(p, events + i);
+        xfree(events);
+        return;
+
     case MotionNotify:
-        {
-           DeviceIntPtr p = dmxLocal->pDevice;
-           int i, nevents, valuators[3];
-           xEvent *events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
-           valuators[0] = e->xmotion.x;
-           valuators[1] = e->xmotion.y;
-           valuators[2] = e->xmotion.state;
-           nevents = GetPointerEvents(events, p, type, detail, 
-                                      POINTER_ABSOLUTE, 0, 3, valuators);
-           ErrorF("MOTION %d, %d  n = %d\n", valuators[0], valuators[1], nevents);
-           for (i = 0; i < nevents; i++)
-              mieqEnqueue(p, events + i);
-           xfree(events);
-           return;
-        }
-        break;
-                                /* Always ignore these events */
+        events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
+        valuators[0] = e->xmotion.x;
+        valuators[1] = e->xmotion.y;
+        valuators[2] = e->xmotion.state;
+        nevents = GetPointerEvents(events, p, type, detail, 
+                                   POINTER_ABSOLUTE, 0, 3, valuators);
+        for (i = 0; i < nevents; i++)
+            mieqEnqueue(p, events + i);
+        xfree(events);
+        return;
+
     case EnterNotify:
     case LeaveNotify:
     case KeymapNotify:
@@ -754,25 +740,19 @@ void dmxEnqueue(DevicePtr pDev, int type
         return;
     }
 
+#if 00 /* dead code? */
     memset(&xE, 0, sizeof(xE));
     xE.u.u.type                = type;
     xE.u.u.detail              = detail;
     xE.u.keyButtonPointer.time = GetTimeInMillis();
 
 #ifdef XINPUT
-    if (!dmxLocal->sendsCore) dmxEnqueueExtEvent(dmxLocal, &xE, block);
+    if (!dmxLocal->sendsCore)
+        dmxEnqueueExtEvent(dmxLocal, &xE, block);
     else
 #endif
-#if 00 /*BP*/
         dmxeqEnqueue(&xE);
-#else
-    /* never get here! */
-    if (0) {
-       DeviceIntPtr p = dmxLocal->pDevice;
-       ErrorF("enque %d\n", type);
-       mieqEnqueue(p, &xE);
-    }
-#endif
+#endif /*00*/
 }
 
 /** A pointer to this routine is passed to low-level input drivers so
diff-tree 76a7a5ca1f068c27c9b5fbd49d5a1da80ed6f488 (from 69baad321d35dae0bfa535be0c6ed2131fed1e60)
Author: Brian <brian at yutani.localnet.net>
Date:   Mon Apr 2 15:24:05 2007 -0600

    formatting fixes

diff --git a/hw/dmx/input/dmxevents.c b/hw/dmx/input/dmxevents.c
index bca1a10..17047f7 100644
--- a/hw/dmx/input/dmxevents.c
+++ b/hw/dmx/input/dmxevents.c
@@ -112,7 +112,8 @@ static int dmxCheckFunctionKeys(DMXLocal
     DMXDBG3("dmxCheckFunctionKeys: keySym=0x%04x %s state=0x%04x\n",
             keySym, type == KeyPress ? "press" : "release", state);
 
-    if ((state & (ControlMask|Mod1Mask)) != (ControlMask|Mod1Mask)) return 0;
+    if ((state & (ControlMask|Mod1Mask)) != (ControlMask|Mod1Mask))
+       return 0;
 
     switch (keySym) {
     case XK_g:
@@ -147,16 +148,25 @@ static void dmxEnqueueExtEvent(DMXLocalI
     int                    type      = e->u.u.type;
 
     switch (e->u.u.type) {
-    case KeyPress:      type = DeviceKeyPress;      break;
-    case KeyRelease:    type = DeviceKeyRelease;    break;
-    case ButtonPress:   type = DeviceButtonPress;   break;
-    case ButtonRelease: type = DeviceButtonRelease; break;
+    case KeyPress:
+        type = DeviceKeyPress;
+        break;
+    case KeyRelease:
+        type = DeviceKeyRelease;
+        break;
+    case ButtonPress:
+        type = DeviceButtonPress;
+        break;
+    case ButtonRelease:
+        type = DeviceButtonRelease;
+        break;
     case MotionNotify:
         dmxLog(dmxError,
                "dmxEnqueueExtEvent: MotionNotify not allowed here\n");
         return;
     default:
-        if (e->u.u.type == ProximityIn || e->u.u.type == ProximityOut) break;
+        if (e->u.u.type == ProximityIn || e->u.u.type == ProximityOut)
+            break;
         dmxLogInput(dmxInput,
                     "dmxEnqueueExtEvent: Unhandled %s event (%d)\n",
                     e->u.u.type >= LASTEvent ? "extension" : "non-extension",
@@ -174,9 +184,11 @@ static void dmxEnqueueExtEvent(DMXLocalI
     xv->num_valuators  = 0;
     xv->first_valuator = 0;
 
-    if (block) dmxSigioBlock();
+    if (block)
+        dmxSigioBlock();
     dmxeqEnqueue(xE);
-    if (block) dmxSigioUnblock();
+    if (block)
+        dmxSigioUnblock();
 }
 #endif
 
@@ -186,7 +198,8 @@ DMXScreenInfo *dmxFindFirstScreen(int x,
 
     for (i = 0; i < dmxNumScreens; i++) {
         DMXScreenInfo *dmxScreen = &dmxScreens[i];
-        if (dmxOnScreen(x, y, dmxScreen)) return dmxScreen;
+        if (dmxOnScreen(x, y, dmxScreen))
+            return dmxScreen;
     }
     return NULL;
 }
@@ -223,7 +236,8 @@ dmxCoreMotion(DevicePtr pDev, int x, int
     int           localY;
     int           i;
 
-    if (!dmxGlobalInvalid && dmxGlobalX == x && dmxGlobalY == y) return;
+    if (!dmxGlobalInvalid && dmxGlobalX == x && dmxGlobalY == y)
+        return;
     
     DMXDBG5("dmxCoreMotion(%d,%d,%d) dmxGlobalX=%d dmxGlobalY=%d\n",
             x, y, delta, dmxGlobalX, dmxGlobalY);
@@ -232,10 +246,14 @@ dmxCoreMotion(DevicePtr pDev, int x, int
     dmxGlobalX       = x;
     dmxGlobalY       = y;
 
-    if (dmxGlobalX < 0)                dmxGlobalX = 0;
-    if (dmxGlobalY < 0)                dmxGlobalY = 0;
-    if (dmxGlobalX >= dmxGlobalWidth)  dmxGlobalX = dmxGlobalWidth  + delta -1;
-    if (dmxGlobalY >= dmxGlobalHeight) dmxGlobalY = dmxGlobalHeight + delta -1;
+    if (dmxGlobalX < 0)
+        dmxGlobalX = 0;
+    if (dmxGlobalY < 0)
+        dmxGlobalY = 0;
+    if (dmxGlobalX >= dmxGlobalWidth)
+        dmxGlobalX = dmxGlobalWidth  + delta -1;
+    if (dmxGlobalY >= dmxGlobalHeight)
+        dmxGlobalY = dmxGlobalHeight + delta -1;
     
     if ((dmxScreen = dmxFindFirstScreen(dmxGlobalX, dmxGlobalY))) {
         localX = dmxGlobalX - dmxScreen->rootXOrigin;
@@ -283,7 +301,6 @@ dmxCoreMotion(DevicePtr pDev, int x, int
                                  * drivers */
     for (i = 0, dmxInput = &dmxInputs[0]; i < dmxNumInputs; i++, dmxInput++) {
         int j;
-
         for (j = 0; j < dmxInput->numDevs; j += dmxInput->devs[j]->binding)
             if (!dmxInput->detached
                 && dmxInput->devs[j]->sendsCore
@@ -386,10 +403,12 @@ static void dmxExtMotion(DMXLocalInputIn
         }
     }
 
-    if (block) dmxSigioBlock();
+    if (block)
+        dmxSigioBlock();
     dmxPointerPutMotionEvent(pDevice, firstAxis, axesCount, v, xev->time);
     dmxeqEnqueue(xE);
-    if (block) dmxSigioUnblock();
+    if (block)
+        dmxSigioUnblock();
 }
 
 static int dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
@@ -403,7 +422,8 @@ static int dmxTranslateAndEnqueueExtEven
     XDeviceKeyEvent        *ke     = (XDeviceKeyEvent *)e;
     XDeviceMotionEvent     *me     = (XDeviceMotionEvent *)e;
 
-    if (!e) return -1;          /* No extended event passed, cannot handle */
+    if (!e)
+        return -1;          /* No extended event passed, cannot handle */
     
     if ((XID)dmxLocal->deviceId != ke->deviceid) {
                                 /* Search for the correct dmxLocal,
@@ -414,7 +434,8 @@ static int dmxTranslateAndEnqueueExtEven
         DMXInputInfo *dmxInput = &dmxInputs[dmxLocal->inputIdx];
         for (i = 0; i < dmxInput->numDevs; i++) {
             dmxLocal = dmxInput->devs[i];
-            if ((XID)dmxLocal->deviceId == ke->deviceid) break;
+            if ((XID)dmxLocal->deviceId == ke->deviceid)
+                break;
         }
     }
 
@@ -463,9 +484,11 @@ static int dmxTranslateAndEnqueueExtEven
         xv->valuator4      = ke->axis_data[4];
         xv->valuator5      = ke->axis_data[5];
 
-        if (block) dmxSigioBlock();
+        if (block)
+            dmxSigioBlock();
         dmxeqEnqueue(xE);
-        if (block) dmxSigioUnblock();
+        if (block)
+            dmxSigioUnblock();
         break;
 
     case XI_DeviceMotionNotify:
@@ -568,7 +591,8 @@ static KeySym dmxKeyCodeToKeySym(DMXLoca
     if (!dmxLocal || !dmxLocal->pDevice || !dmxLocal->pDevice->key)
         return NoSymbol;
     pKeySyms = &dmxLocal->pDevice->key->curKeySyms;
-    if (!pKeySyms) return NoSymbol;
+    if (!pKeySyms)
+        return NoSymbol;
     
     if (keyCode > pKeySyms->minKeyCode && keyCode <= pKeySyms->maxKeyCode) {
         DMXDBG2("dmxKeyCodeToKeySym: Translated keyCode=%d to keySym=0x%04x\n",
@@ -617,8 +641,10 @@ static int dmxFixup(DevicePtr pDev, int 
                dmxLocal->pDevice->name);
         return NoSymbol;
     }
-    if (!keySym) keySym = dmxKeyCodeToKeySym(dmxLocal, detail);
-    if (keySym == NoSymbol) return detail;
+    if (!keySym)
+        keySym = dmxKeyCodeToKeySym(dmxLocal, detail);
+    if (keySym == NoSymbol)
+        return detail;
     keyCode = dmxKeySymToKeyCode(dmxLocalCoreKeyboard, keySym, detail);
 
     return keyCode ? keyCode : detail;
diff-tree 69baad321d35dae0bfa535be0c6ed2131fed1e60 (from 44eb15adeee3b299677070f39625daa53679bd13)
Author: Brian <brian at yutani.localnet.net>
Date:   Mon Apr 2 15:21:22 2007 -0600

    clean-up dmxCoreMotion() dmxCoreMotion2()

diff --git a/hw/dmx/input/dmxevents.c b/hw/dmx/input/dmxevents.c
index 3634324..bca1a10 100644
--- a/hw/dmx/input/dmxevents.c
+++ b/hw/dmx/input/dmxevents.c
@@ -192,8 +192,6 @@ DMXScreenInfo *dmxFindFirstScreen(int x,
 }
 
 
-#if 11/*BP*/
-
 /**
  * Enqueue a motion event.
  */
@@ -215,8 +213,8 @@ static void enqueueMotion(DevicePtr pDev
 }
 
 
-static void
-dmxCoreMotion2(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)
+void
+dmxCoreMotion(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)
 {
     DMXScreenInfo *dmxScreen;
     DMXInputInfo  *dmxInput;
@@ -239,8 +237,6 @@ dmxCoreMotion2(DevicePtr pDev, int x, in
     if (dmxGlobalX >= dmxGlobalWidth)  dmxGlobalX = dmxGlobalWidth  + delta -1;
     if (dmxGlobalY >= dmxGlobalHeight) dmxGlobalY = dmxGlobalHeight + delta -1;
     
-    ErrorF("Global Pos: %d, %d\n", dmxGlobalX, dmxGlobalY);
-
     if ((dmxScreen = dmxFindFirstScreen(dmxGlobalX, dmxGlobalY))) {
         localX = dmxGlobalX - dmxScreen->rootXOrigin;
         localY = dmxGlobalY - dmxScreen->rootYOrigin;
@@ -249,13 +245,8 @@ dmxCoreMotion2(DevicePtr pDev, int x, in
                                 /* Screen is old screen */
             if (block)
                 dmxSigioBlock();
-#if 000
-            miPointerSetPosition(inputInfo.pointer, &localX, &localY,
-                                 GetTimeInMillis());
-#else
             if (pDev)
                enqueueMotion(pDev, localX, localY);
-#endif
             if (block)
                 dmxSigioUnblock();
         } else {
@@ -267,13 +258,8 @@ dmxCoreMotion2(DevicePtr pDev, int x, in
             dmxeqProcessInputEvents();
             miPointerSetScreen(inputInfo.pointer, dmxScreen->index,
                                localX, localY);
-#if 000
-            miPointerSetPosition(inputInfo.pointer, &localX, &localY,
-                                 GetTimeInMillis());
-#else
             if (pDev)
                enqueueMotion(pDev, localX, localY);
-#endif
             if (block)
                 dmxSigioUnblock();
         }
@@ -307,105 +293,6 @@ dmxCoreMotion2(DevicePtr pDev, int x, in
     }
     if (!dmxScreen) ProcessInputEvents();
 }
-#endif
-
-void dmxCoreMotion(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)
-{
-    DMXScreenInfo *dmxScreen;
-    DMXInputInfo  *dmxInput;
-    ScreenPtr     pScreen;
-    int           localX;
-    int           localY;
-    int           i;
-
-#if 11/*BP*/
-    dmxCoreMotion2(pDev, x, y, delta, block);
-    return;
-#endif
-
-    if (!dmxGlobalInvalid && dmxGlobalX == x && dmxGlobalY == y) return;
-    
-    DMXDBG5("dmxCoreMotion(%d,%d,%d) dmxGlobalX=%d dmxGlobalY=%d\n",
-            x, y, delta, dmxGlobalX, dmxGlobalY);
-
-    dmxGlobalInvalid = 0;
-    dmxGlobalX       = x;
-    dmxGlobalY       = y;
-
-    if (dmxGlobalX < 0)                dmxGlobalX = 0;
-    if (dmxGlobalY < 0)                dmxGlobalY = 0;
-    if (dmxGlobalX >= dmxGlobalWidth)  dmxGlobalX = dmxGlobalWidth  + delta -1;
-    if (dmxGlobalY >= dmxGlobalHeight) dmxGlobalY = dmxGlobalHeight + delta -1;
-    
-    if ((dmxScreen = dmxFindFirstScreen(dmxGlobalX, dmxGlobalY))) {
-        localX = dmxGlobalX - dmxScreen->rootXOrigin;
-        localY = dmxGlobalY - dmxScreen->rootYOrigin;
-#if 00 /*BP*/
-        if ((pScreen = miPointerCurrentScreen())
-#else
-        if ((pScreen = miPointerGetScreen(inputInfo.pointer))
-#endif
-            && pScreen->myNum == dmxScreen->index) {
-                                /* Screen is old screen */
-            if (block) dmxSigioBlock();
-#if 00 /*BP*/
-            miPointerAbsoluteCursor(localX, localY, GetTimeInMillis());
-#else
-            miPointerSetPosition(inputInfo.pointer, &localX, &localY,
-                                 GetTimeInMillis());
-#endif
-            if (block) dmxSigioUnblock();
-        } else {
-                                /* Screen is new */
-            DMXDBG4("   New screen: old=%d new=%d localX=%d localY=%d\n",
-                    pScreen->myNum, dmxScreen->index, localX, localY);
-            if (block) dmxSigioBlock();
-            dmxeqProcessInputEvents();
-#if 00 /*BP*/
-            miPointerSetNewScreen(dmxScreen->index, localX, localY);
-            miPointerAbsoluteCursor(localX, localY, GetTimeInMillis());
-#else
-            miPointerSetScreen(inputInfo.pointer, dmxScreen->index,
-                               localX, localY);
-            miPointerSetPosition(inputInfo.pointer, &localX, &localY,
-                                 GetTimeInMillis());
-#endif
-            if (block) dmxSigioUnblock();
-        }
-#if 00 /*BP*/
-        miPointerPosition(&localX, &localY);
-#else
-        miPointerGetPosition(inputInfo.pointer, &localX, &localY);
-#endif
-
-#if 00 /*BP*/
-        if ((pScreen = miPointerCurrentScreen())) {
-#else
-        if ((pScreen = miPointerGetScreen(inputInfo.pointer))) {
-#endif
-            dmxGlobalX = localX + dmxScreens[pScreen->myNum].rootXOrigin;
-            dmxGlobalY = localY + dmxScreens[pScreen->myNum].rootYOrigin;
-            DMXDBG6("   Moved to dmxGlobalX=%d dmxGlobalY=%d"
-                    " on screen index=%d/%d localX=%d localY=%d\n",
-                    dmxGlobalX, dmxGlobalY,
-                    dmxScreen ? dmxScreen->index : -1, pScreen->myNum,
-                    localX, localY);
-        }
-    }
-                                /* Send updates down to all core input
-                                 * drivers */
-    for (i = 0, dmxInput = &dmxInputs[0]; i < dmxNumInputs; i++, dmxInput++) {
-        int j;
-
-        for (j = 0; j < dmxInput->numDevs; j += dmxInput->devs[j]->binding)
-            if (!dmxInput->detached
-                && dmxInput->devs[j]->sendsCore
-                && dmxInput->devs[j]->update_position)
-                dmxInput->devs[j]->update_position(dmxInput->devs[j]->private,
-                                                   dmxGlobalX, dmxGlobalY);
-    }
-    if (!dmxScreen) ProcessInputEvents();
-}
 
 
 
@@ -760,25 +647,20 @@ void dmxEnqueue(DevicePtr pDev, int type
             return;
         if (dmxLocal->sendsCore && dmxLocal != dmxLocalCoreKeyboard)
             xE.u.u.detail = dmxFixup(pDev, detail, keySym);
-#if 11/*BP*/
         {
            DeviceIntPtr p = dmxLocal->pDevice;
            int i, nevents;
            xEvent *events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
+           ErrorF("KEY %d\n", detail);
            nevents = GetKeyboardEvents(events, p, type, detail);
-           ErrorF("KEY %d  n=%d\n", detail, nevents);
            for (i = 0; i < nevents; i++)
               mieqEnqueue(p, events + i);
            xfree(events);
            return;
         }
-#endif
         break;
     case ButtonPress:
     case ButtonRelease:
-#if 00 /*BP*/
-        detail = dmxGetButtonMapping(dmxLocal, detail);
-#else
         detail = dmxGetButtonMapping(dmxLocal, detail);
         {
            DeviceIntPtr p = dmxLocal->pDevice;
@@ -799,15 +681,8 @@ void dmxEnqueue(DevicePtr pDev, int type
            xfree(events);
            return;
         }
-#endif
         break;
     case MotionNotify:
-        /* All MotionNotify events should be sent via dmxCoreMotion and
-         * dmxExtMotion -- no input driver should build motion events by
-         * hand. */
-#if 00 /*BP*/
-        dmxLog(dmxError, "dmxEnqueueXEvent: MotionNotify not allowed here\n");
-#else
         {
            DeviceIntPtr p = dmxLocal->pDevice;
            int i, nevents, valuators[3];
@@ -815,25 +690,14 @@ void dmxEnqueue(DevicePtr pDev, int type
            valuators[0] = e->xmotion.x;
            valuators[1] = e->xmotion.y;
            valuators[2] = e->xmotion.state;
-           nevents = GetPointerEvents(events,
-                                      /*pDev*/p,
-                                      /*KeyPress*/type,
-                                      detail,
-                                      POINTER_ABSOLUTE,
-                                      0, 3, valuators);
+           nevents = GetPointerEvents(events, p, type, detail, 
+                                      POINTER_ABSOLUTE, 0, 3, valuators);
            ErrorF("MOTION %d, %d  n = %d\n", valuators[0], valuators[1], nevents);
-           /*
-           ErrorF("NEW MOTION %d st %d (%d,%d,%d) n=%d\n",
-                  detail, e->xmotion.state,
-                  valuators[0], valuators[1], valuators[2],
-                  nevents);
-           */
            for (i = 0; i < nevents; i++)
               mieqEnqueue(p, events + i);
            xfree(events);
            return;
         }
-#endif
         break;
                                 /* Always ignore these events */
     case EnterNotify:
diff-tree 44eb15adeee3b299677070f39625daa53679bd13 (from 0f873a9d4f02b399c37b4058c6a9a2e21aa205e8)
Author: Brian <brian at yutani.localnet.net>
Date:   Mon Apr 2 15:12:04 2007 -0600

    checkpoint clean-up

diff --git a/hw/dmx/input/dmxbackend.c b/hw/dmx/input/dmxbackend.c
index 315979e..7aa8510 100644
--- a/hw/dmx/input/dmxbackend.c
+++ b/hw/dmx/input/dmxbackend.c
@@ -242,11 +242,7 @@ static int dmxBackendOffscreen(int scree
 void dmxBackendUpdatePosition(pointer private, int x, int y)
 {
     GETPRIVFROMPRIVATE;
-#if 00 /*BP*/
-    int           screen      = miPointerCurrentScreen()->myNum;
-#else
     int           screen      = miPointerGetScreen(inputInfo.pointer)->myNum;
-#endif
     DMXScreenInfo *dmxScreen  = &dmxScreens[priv->myScreen];
     int           oldRelative = priv->relative;
     int           topscreen   = dmxBackendFindOverlapping(priv, screen, x, y);
@@ -397,7 +393,6 @@ void dmxBackendCollectEvents(DevicePtr p
             }
             break;
 	case MotionNotify:
-#if 001 /*BP*/
             DMXDBG9("dmxBackendCollectEvents: MotionNotify %d/%d (mi %d)"
                     " newscreen=%d: %d %d (e=%d; last=%d,%d)\n",
                     dmxScreen->index, priv->myScreen,
@@ -451,25 +446,15 @@ void dmxBackendCollectEvents(DevicePtr p
                         (dmxScreen->rootYOrigin + X.xmotion.y
                          - dmxScreen->rootY));
             }
-#else
-            /*
-            ErrorF("motion %d, %d, %d\n",
-                   X.xmotion.x, X.xmotion.y, X.xmotion.state);
-            */
-            enqueue(priv->mou, X.type, 0/*X.xbutton.button*/, 0, &X, block);
-#endif
 	    break;
 
         case KeyPress:
         case KeyRelease:
             enqueue(priv->kbd, X.type, X.xkey.keycode, 0, NULL, block);
             break;
-#if 11/*BP*/
         case ButtonPress:
         case ButtonRelease:
-           ErrorF("press/release at %d, %d\n", X.xbutton.x, X.xbutton.y);
-           /* fall-through */
-#endif
+            /* fall-through */
 	default:
                                 /* Pass the whole event here, because
                                  * this may be an extension event. */
diff --git a/hw/dmx/input/dmxevents.c b/hw/dmx/input/dmxevents.c
index d174a59..3634324 100644
--- a/hw/dmx/input/dmxevents.c
+++ b/hw/dmx/input/dmxevents.c
@@ -194,30 +194,20 @@ DMXScreenInfo *dmxFindFirstScreen(int x,
 
 #if 11/*BP*/
 
+/**
+ * Enqueue a motion event.
+ */
 static void enqueueMotion(DevicePtr pDev, int x, int y)
 {
-    GETDMXINPUTFROMPDEV;
+    GETDMXLOCALFROMPDEV;
     DeviceIntPtr p = dmxLocal->pDevice;
     int i, nevents, valuators[3];
     xEvent *events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
-    int detail = 0;
-
+    int detail = 0;  /* XXX should this be mask of pressed buttons? */
     valuators[0] = x;
     valuators[1] = y;
-    valuators[2] = detail;
-    nevents = GetPointerEvents(events,
-                               /*pDev*/p,
-                               MotionNotify,
-                               detail,
-                               POINTER_ABSOLUTE,
-                               0, 2, valuators);
-    ErrorF("MOTION2 %d, %d  n = %d\n", valuators[0], valuators[1], nevents);
-    /*
-      ErrorF("NEW MOTION %d st %d (%d,%d,%d) n=%d\n",
-      detail, e->xmotion.state,
-      valuators[0], valuators[1], valuators[2],
-      nevents);
-    */
+    nevents = GetPointerEvents(events, p, MotionNotify, detail,
+                               POINTER_ABSOLUTE, 0, 2, valuators);
     for (i = 0; i < nevents; i++)
        mieqEnqueue(p, events + i);
     xfree(events);
@@ -347,8 +337,6 @@ void dmxCoreMotion(DevicePtr pDev, int x
     if (dmxGlobalX >= dmxGlobalWidth)  dmxGlobalX = dmxGlobalWidth  + delta -1;
     if (dmxGlobalY >= dmxGlobalHeight) dmxGlobalY = dmxGlobalHeight + delta -1;
     
-    ErrorF("Global Pos: %d, %d\n", dmxGlobalX, dmxGlobalY);
-
     if ((dmxScreen = dmxFindFirstScreen(dmxGlobalX, dmxGlobalY))) {
         localX = dmxGlobalX - dmxScreen->rootXOrigin;
         localY = dmxGlobalY - dmxScreen->rootYOrigin;
@@ -397,7 +385,6 @@ void dmxCoreMotion(DevicePtr pDev, int x
 #endif
             dmxGlobalX = localX + dmxScreens[pScreen->myNum].rootXOrigin;
             dmxGlobalY = localY + dmxScreens[pScreen->myNum].rootYOrigin;
-           ErrorF("Global is now %d, %d\n", dmxGlobalX, dmxGlobalY);
             DMXDBG6("   Moved to dmxGlobalX=%d dmxGlobalY=%d"
                     " on screen index=%d/%d localX=%d localY=%d\n",
                     dmxGlobalX, dmxGlobalY,
@@ -750,7 +737,7 @@ static int dmxFixup(DevicePtr pDev, int 
     return keyCode ? keyCode : detail;
 }
 
-/** Enqueue a non-motion event from the \a pDev device with the
+/** Enqueue an event from the \a pDev device with the
  * specified \a type and \a detail.  If the event is a KeyPress or
  * KeyRelease event, then the \a keySym is also specified.
  *
@@ -778,10 +765,7 @@ void dmxEnqueue(DevicePtr pDev, int type
            DeviceIntPtr p = dmxLocal->pDevice;
            int i, nevents;
            xEvent *events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
-           nevents = GetKeyboardEvents(events,
-                                       /*pDev*/p,
-                                       /*KeyPress*/type,
-                                       /*n*/detail);
+           nevents = GetKeyboardEvents(events, p, type, detail);
            ErrorF("KEY %d  n=%d\n", detail, nevents);
            for (i = 0; i < nevents; i++)
               mieqEnqueue(p, events + i);
@@ -795,6 +779,7 @@ void dmxEnqueue(DevicePtr pDev, int type
 #if 00 /*BP*/
         detail = dmxGetButtonMapping(dmxLocal, detail);
 #else
+        detail = dmxGetButtonMapping(dmxLocal, detail);
         {
            DeviceIntPtr p = dmxLocal->pDevice;
            int i, nevents, valuators[3];
diff-tree 0f873a9d4f02b399c37b4058c6a9a2e21aa205e8 (from 3a0ce1084a18e17a3c8a009d99c228652b8763a9)
Author: Brian <brian at yutani.localnet.net>
Date:   Mon Apr 2 14:51:38 2007 -0600

    remove some debug code

diff --git a/hw/dmx/input/dmxinputinit.c b/hw/dmx/input/dmxinputinit.c
index d14aeb7..a9d902e 100644
--- a/hw/dmx/input/dmxinputinit.c
+++ b/hw/dmx/input/dmxinputinit.c
@@ -505,7 +505,6 @@ static int dmxDeviceOnOff(DeviceIntPtr p
                                               GetMaximumEventsNum(),
 #endif
                                               Relative);
-                ErrorF("MOTION BUFFER SIZE %d\n", GetMaximumEventsNum());
 #ifdef XINPUT
                 for (i = 0; i < info.numRelAxes; i++)
                     InitValuatorAxisStruct(pDevice, i, info.minval[0],
@@ -588,10 +587,6 @@ static void dmxProcessInputEvents(DMXInp
 {
     int i;
 
-    /*
-    ErrorF("%s\n", __FUNCTION__);
-    */
-
     dmxeqProcessInputEvents();
 #if 00 /*BP*/
     miPointerUpdate();
diff-tree 3a0ce1084a18e17a3c8a009d99c228652b8763a9 (from 12016f20f7f5365f30cfbeb05568b3fb89759e5a)
Author: Brian <brian at yutani.localnet.net>
Date:   Mon Apr 2 14:51:21 2007 -0600

    for completeness, init dummy's min/maxval[1] values (vertical axis)

diff --git a/hw/dmx/input/dmxdummy.c b/hw/dmx/input/dmxdummy.c
index d6e614e..b9c72b0 100644
--- a/hw/dmx/input/dmxdummy.c
+++ b/hw/dmx/input/dmxdummy.c
@@ -79,7 +79,9 @@ void dmxDummyMouGetInfo(DevicePtr pDev, 
     info->valuatorClass    = 1;
     info->numRelAxes       = 2;
     info->minval[0]        = 0;
+    info->minval[1]        = 0;
     info->maxval[0]        = 0;
+    info->maxval[1]        = 0;
     info->res[0]           = 1;
     info->minres[0]        = 0;
     info->maxres[0]        = 1;
diff-tree 12016f20f7f5365f30cfbeb05568b3fb89759e5a (from 0aaf28e5633a59563b89a2e42d19fabc84adc3ed)
Author: Brian <brian at yutani.localnet.net>
Date:   Mon Apr 2 14:50:48 2007 -0600

    As for normal mouse device, init valuator maxval[] to real values, not zero.

diff --git a/hw/dmx/input/dmxconsole.c b/hw/dmx/input/dmxconsole.c
index 835909e..aac5e08 100644
--- a/hw/dmx/input/dmxconsole.c
+++ b/hw/dmx/input/dmxconsole.c
@@ -860,12 +860,17 @@ void dmxConsoleInit(DevicePtr pDev)
  * for pointers. */
 void dmxConsoleMouGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
 {
+    GETPRIVFROMPDEV;
+
     info->buttonClass      = 1;
     dmxCommonMouGetMap(pDev, info->map, &info->numButtons);
     info->valuatorClass    = 1;
     info->numRelAxes       = 2;
-    info->minval[0]        = 0;
-    info->maxval[0]        = 0;
+    info->minval[0] = 0;
+    info->minval[1] = 0;
+    /* max possible console window size: */
+    info->maxval[0] = DisplayWidth(priv->display, DefaultScreen(priv->display));
+    info->maxval[1] = DisplayHeight(priv->display, DefaultScreen(priv->display));
     info->res[0]           = 1;
     info->minres[0]        = 0;
     info->maxres[0]        = 1;
diff-tree 0aaf28e5633a59563b89a2e42d19fabc84adc3ed (from 0013bf6ddb3867c9a504603434d8c2ec83f3f3bc)
Author: Brian <brian at yutani.localnet.net>
Date:   Mon Apr 2 12:41:30 2007 -0600

    In dmxBackendMouGetInfo() initialize the info->minval[], maxval[] arrays to the size of the backend display.
    
    It seems that the changes to X input exposed a problem that wasn't detected
    before.  The axis clipping code in GetPointerEvents() uses those limits to
    constrain the pointer's coordinate range.  The max was zero so the pointer
    couldn't move.

diff --git a/hw/dmx/input/dmxbackend.c b/hw/dmx/input/dmxbackend.c
index 09a2a32..315979e 100644
--- a/hw/dmx/input/dmxbackend.c
+++ b/hw/dmx/input/dmxbackend.c
@@ -592,12 +592,16 @@ void dmxBackendInit(DevicePtr pDev)
 /** Get information about the backend pointer (for initialization). */
 void dmxBackendMouGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
 {
+    const DMXScreenInfo *dmxScreen = dmxBackendInitPrivate(pDev);
+
     info->buttonClass      = 1;
     dmxCommonMouGetMap(pDev, info->map, &info->numButtons);
     info->valuatorClass    = 1;
     info->numRelAxes       = 2;
     info->minval[0]        = 0;
-    info->maxval[0]        = 0;
+    info->minval[1]        = 0;
+    info->maxval[0]        = dmxScreen->beWidth;
+    info->maxval[1]        = dmxScreen->beHeight;
     info->res[0]           = 1;
     info->minres[0]        = 0;
     info->maxres[0]        = 1;
diff-tree 0013bf6ddb3867c9a504603434d8c2ec83f3f3bc (from 08a88d1803f672555141011e082fbc0edeedcf05)
Author: Brian <brian at yutani.localnet.net>
Date:   Mon Apr 2 12:39:04 2007 -0600

    undo 1280 valuator hack

diff --git a/hw/dmx/input/dmxinputinit.c b/hw/dmx/input/dmxinputinit.c
index cf68051..d14aeb7 100644
--- a/hw/dmx/input/dmxinputinit.c
+++ b/hw/dmx/input/dmxinputinit.c
@@ -509,7 +509,7 @@ static int dmxDeviceOnOff(DeviceIntPtr p
 #ifdef XINPUT
                 for (i = 0; i < info.numRelAxes; i++)
                     InitValuatorAxisStruct(pDevice, i, info.minval[0],
-                                           1280/*info.maxval[0]*/, info.res[0],
+                                           info.maxval[0], info.res[0],
                                            info.minres[0], info.maxres[0]);
 #endif
             } else if (info.numRelAxes) {
@@ -520,7 +520,7 @@ static int dmxDeviceOnOff(DeviceIntPtr p
 #ifdef XINPUT
                 for (i = 0; i < info.numRelAxes; i++)
                     InitValuatorAxisStruct(pDevice, i, info.minval[0],
-                                           1280/*info.maxval[0]*/, info.res[0],
+                                           info.maxval[0], info.res[0],
                                            info.minres[0], info.maxres[0]);
 #endif
             } else if (info.numAbsAxes) {
@@ -531,7 +531,7 @@ static int dmxDeviceOnOff(DeviceIntPtr p
 #ifdef XINPUT
                 for (i = 0; i < info.numAbsAxes; i++)
                     InitValuatorAxisStruct(pDevice, i+info.numRelAxes,
-                                           info.minval[i+1], 1280/*info.maxval[i+1]*/,
+                                           info.minval[i+1], info.maxval[i+1],
                                            info.res[i+1], info.minres[i+1],
                                            info.maxres[i+1]);
 #endif
diff-tree 08a88d1803f672555141011e082fbc0edeedcf05 (from 70683e338dacc48e3adf489d66ec33b29dfc3b77)
Author: Brian <brian at yutani.localnet.net>
Date:   Mon Apr 2 12:28:14 2007 -0600

    Pass num_valuators=0 for ButtonPress/Release. This seems to fix the button coordinate problem

diff --git a/hw/dmx/input/dmxevents.c b/hw/dmx/input/dmxevents.c
index fae2049..d174a59 100644
--- a/hw/dmx/input/dmxevents.c
+++ b/hw/dmx/input/dmxevents.c
@@ -799,20 +799,12 @@ void dmxEnqueue(DevicePtr pDev, int type
            DeviceIntPtr p = dmxLocal->pDevice;
            int i, nevents, valuators[3];
            xEvent *events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
-
-           valuators[0] = e->xbutton.x;
-           valuators[1] = e->xbutton.y;
-           /*
-           valuators[0] = dmxGlobalX;
-           valuators[1] = dmxGlobalY;
-           */
            valuators[2] = e->xbutton.button;
-           nevents = GetPointerEvents(events,
-                                      /*pDev*/p,
-                                      /*KeyPress*/type,
-                                      detail,
+           nevents = GetPointerEvents(events, p, type, detail,
                                       POINTER_ABSOLUTE,
-                                      0, 2/*3*/, valuators);
+                                      0,   /* first_valuator = 0 */
+                                      0,   /* num_valuators = 0 */
+                                      valuators);
 
            ErrorF("BUTTON %d, %d %d  n=%d\n",
                   valuators[0], valuators[1], valuators[2], nevents);
diff-tree 70683e338dacc48e3adf489d66ec33b29dfc3b77 (from f2808005f4ee72c5fd7f5f3dcca181306485113e)
Author: Brian <brian at yutani.localnet.net>
Date:   Mon Apr 2 12:26:27 2007 -0600

    formatting fixes

diff --git a/hw/dmx/input/dmxbackend.c b/hw/dmx/input/dmxbackend.c
index 7efb2ee..09a2a32 100644
--- a/hw/dmx/input/dmxbackend.c
+++ b/hw/dmx/input/dmxbackend.c
@@ -358,7 +358,8 @@ void dmxBackendCollectEvents(DevicePtr p
 	switch (X.type) {
         case EnterNotify:
             dmxCommonSaveState(priv);
-            if (entered++) continue;
+            if (entered++)
+                continue;
             priv->entered = 1;
             ignoreLeave   = 1;
             DMXDBG5("dmxBackendCollectEvents: Enter %lu %d,%d; GRAB %s %p\n",
@@ -382,7 +383,8 @@ void dmxBackendCollectEvents(DevicePtr p
                 continue;
             }
             dmxCommonRestoreState(priv);
-            if (left++) continue;
+            if (left++)
+                continue;
             DMXDBG7("dmxBackendCollectEvents: Leave %lu %d,%d %d %d %s %s\n",
                     X.xcrossing.root, X.xcrossing.x, X.xcrossing.y,
                     X.xcrossing.detail, X.xcrossing.focus,
@@ -403,7 +405,8 @@ void dmxBackendCollectEvents(DevicePtr p
                     priv->newscreen,
                     X.xmotion.x, X.xmotion.y,
                     entered, priv->lastX, priv->lastY);
-            if (dmxBackendPendingMotionEvent(priv, TRUE)) continue;
+            if (dmxBackendPendingMotionEvent(priv, TRUE))
+                continue;
             if (!(dmxScreen = dmxBackendFindWindow(priv, X.xmotion.window)))
                 dmxLog(dmxFatal,
                        "   Event on non-existant window %lu\n",



More information about the xorg-commit mailing list