xserver: Branch 'input-hotplug' - 32 commits

Daniel Stone daniels at kemper.freedesktop.org
Mon Oct 23 02:59:00 EEST 2006


 Xi/stubs.c                           |   17 +++++-
 configure.ac                         |    2 
 dix/events.c                         |   33 ++---------
 dix/getevents.c                      |   97 ++++++++++++++++++++---------------
 doc/Xserver.man.pre                  |    4 -
 hw/kdrive/chips/chipsstub.c          |    3 -
 hw/kdrive/epson/epson13806stub.c     |    6 --
 hw/kdrive/i810/i810stub.c            |    3 -
 hw/kdrive/igs/igsstub.c              |    3 -
 hw/kdrive/linux/linux.c              |   12 ++++
 hw/kdrive/linux/tslib.c              |   21 +------
 hw/kdrive/mach64/mach64stub.c        |    3 -
 hw/kdrive/mga/mgastub.c              |    3 -
 hw/kdrive/neomagic/neomagic.h        |    8 --
 hw/kdrive/neomagic/neomagicstub.c    |    6 --
 hw/kdrive/nvidia/nvidiastub.c        |    3 -
 hw/kdrive/pcmcia/pcmciastub.c        |    3 -
 hw/kdrive/pm2/pm2stub.c              |    3 -
 hw/kdrive/r128/r128stub.c            |    3 -
 hw/kdrive/savage/s3stub.c            |    8 --
 hw/kdrive/sis300/sis_stub.c          |    3 -
 hw/kdrive/sis530/sisstub.c           |    3 -
 hw/kdrive/smi/smistub.c              |    3 -
 hw/kdrive/src/kdrive.h               |    3 +
 hw/kdrive/src/kinput.c               |    2 
 hw/kdrive/trident/tridentstub.c      |    3 -
 hw/kdrive/trio/s3stub.c              |    3 -
 hw/kdrive/via/viastub.c              |    3 -
 hw/kdrive/vxworks/vxworks.c          |   13 ++--
 hw/vfb/InitInput.c                   |    5 -
 hw/xfree86/common/xf86Module.h       |    2 
 hw/xfree86/common/xf86Option.c       |    4 -
 hw/xfree86/common/xf86PciInfo.h      |    4 +
 hw/xfree86/doc/man/xorg.conf.man.pre |    2 
 hw/xfree86/utils/xorgcfg/text-mode.c |    1 
 hw/xfree86/utils/xorgconfig/Cards    |    5 +
 hw/xnest/Args.c                      |   15 +++--
 hw/xnest/Events.c                    |   65 ++++++++++++-----------
 hw/xnest/Init.c                      |    9 ++-
 hw/xnest/Pointer.c                   |    2 
 include/input.h                      |    4 +
 include/inputstr.h                   |    4 -
 mi/miinitext.c                       |    4 -
 xkb/xkbUtils.c                       |    4 -
 44 files changed, 224 insertions(+), 183 deletions(-)

New commits:
diff-tree c5b5b046e86b159a9d32451308f38246cc4587f7 (from parents)
Merge: fab1d37ecbeee9777ad1485b0cc62b55042d5014 948a97b97e93cee05a23f1f1ae699c5e181bc8ce
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Mon Oct 23 02:58:30 2006 +0300

    Merge branch 'master' of git+ssh://git.freedesktop.org/git/xorg/xserver into input-hotplug

diff-tree fab1d37ecbeee9777ad1485b0cc62b55042d5014 (from 523fe64ba16cf7a40f4095432d81300726d83e8d)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Mon Oct 23 02:57:00 2006 +0300

    xfree86/options: don't blindly dereference NULL pointers
    Sure, conf_idev should be initialised, but if it's not, try to make the
    best of a bad situation.

diff --git a/hw/xfree86/common/xf86Option.c b/hw/xfree86/common/xf86Option.c
index 0a4c11d..7afb63a 100644
--- a/hw/xfree86/common/xf86Option.c
+++ b/hw/xfree86/common/xf86Option.c
@@ -142,14 +142,14 @@ xf86CollectInputOptions(InputInfoPtr pIn
     if (defaultOpts) {
 	pInfo->options = xf86OptionListCreate(defaultOpts, -1, 0);
     }
-    if (pInfo->conf_idev->commonOptions) {
+    if (pInfo->conf_idev && pInfo->conf_idev->commonOptions) {
 	tmp = xf86optionListDup(pInfo->conf_idev->commonOptions);
 	if (pInfo->options)
 	    pInfo->options = xf86optionListMerge(pInfo->options, tmp);
 	else
 	    pInfo->options = tmp;
     }
-    if (pInfo->conf_idev->extraOptions) {
+    if (pInfo->conf_idev && pInfo->conf_idev->extraOptions) {
 	tmp = xf86optionListDup(pInfo->conf_idev->extraOptions);
 	if (pInfo->options)
 	    pInfo->options = xf86optionListMerge(pInfo->options, tmp);
diff-tree 523fe64ba16cf7a40f4095432d81300726d83e8d (from 57f98e2b72d5c7fea93a9f6da86228ffb4856bf3)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Mon Oct 23 02:56:28 2006 +0300

    kdrive/lots of DDXes: make stubs use KdOsAddInputDrivers()
    In theory, removing LinuxPciScan should make these drivers OS-independent.

diff --git a/hw/kdrive/chips/chipsstub.c b/hw/kdrive/chips/chipsstub.c
index 3499a48..7fec1c7 100644
--- a/hw/kdrive/chips/chipsstub.c
+++ b/hw/kdrive/chips/chipsstub.c
@@ -48,7 +48,8 @@ InitOutput (ScreenInfo *pScreenInfo, int
 void
 InitInput (int argc, char **argv)
 {
-    KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
+    KdOsAddInputDrivers ();
+    KdInitInput ();
 }
 
 void
diff --git a/hw/kdrive/epson/epson13806stub.c b/hw/kdrive/epson/epson13806stub.c
index 125d902..7981782 100644
--- a/hw/kdrive/epson/epson13806stub.c
+++ b/hw/kdrive/epson/epson13806stub.c
@@ -53,10 +53,8 @@ InitOutput (ScreenInfo *pScreenInfo, int
 void
 InitInput (int argc, char **argv)
 {
-    KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
-#ifdef TOUCHSCREEN
-    KdAddMouseDriver (&TsFuncs);
-#endif
+    KdOsAddInputDrivers ();
+    KdInitInput ();
 }
 
 int
diff --git a/hw/kdrive/i810/i810stub.c b/hw/kdrive/i810/i810stub.c
index c195947..364d16b 100644
--- a/hw/kdrive/i810/i810stub.c
+++ b/hw/kdrive/i810/i810stub.c
@@ -73,7 +73,8 @@ InitOutput (ScreenInfo *pScreenInfo, int
 void
 InitInput (int argc, char **argv)
 {
-    KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
+    KdOsAddInputDrivers ();
+    KdInitInput ();
 }
 
 void
diff --git a/hw/kdrive/igs/igsstub.c b/hw/kdrive/igs/igsstub.c
index b0ce151..39c6fd4 100644
--- a/hw/kdrive/igs/igsstub.c
+++ b/hw/kdrive/igs/igsstub.c
@@ -56,7 +56,8 @@ InitOutput (ScreenInfo *pScreenInfo, int
 void
 InitInput (int argc, char **argv)
 {
-    KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
+    KdOsAddInputDrivers ();
+    KdInitInput ();
 }
 
 void
diff --git a/hw/kdrive/mach64/mach64stub.c b/hw/kdrive/mach64/mach64stub.c
index 60808c2..f3fef3c 100644
--- a/hw/kdrive/mach64/mach64stub.c
+++ b/hw/kdrive/mach64/mach64stub.c
@@ -56,7 +56,8 @@ InitOutput (ScreenInfo *pScreenInfo, int
 void
 InitInput (int argc, char **argv)
 {
-    KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
+    KdOsAddInputDrivers ();
+    KdInitInput ();
 }
 
 void
diff --git a/hw/kdrive/mga/mgastub.c b/hw/kdrive/mga/mgastub.c
index ebb40fd..5afbf7f 100644
--- a/hw/kdrive/mga/mgastub.c
+++ b/hw/kdrive/mga/mgastub.c
@@ -45,7 +45,8 @@ InitOutput (ScreenInfo *pScreenInfo, int
 void
 InitInput (int argc, char **argv)
 {
-    KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
+    KdOsAddInputDrivers ();
+    KdInitInput ();
 }
 
 void
diff --git a/hw/kdrive/neomagic/neomagicstub.c b/hw/kdrive/neomagic/neomagicstub.c
index 308f4a2..c7ec83b 100644
--- a/hw/kdrive/neomagic/neomagicstub.c
+++ b/hw/kdrive/neomagic/neomagicstub.c
@@ -51,10 +51,8 @@ InitOutput (ScreenInfo *pScreenInfo, int
 void
 InitInput (int argc, char **argv)
 {
-    KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
-#ifdef TOUCHSCREEN
-    KdAddMouseDriver (&TsFuncs);
-#endif
+    KdOsAddInputDrivers ();
+    KdInitInput ();
 }
 
 void
diff --git a/hw/kdrive/nvidia/nvidiastub.c b/hw/kdrive/nvidia/nvidiastub.c
index ea2dd0f..2309419 100644
--- a/hw/kdrive/nvidia/nvidiastub.c
+++ b/hw/kdrive/nvidia/nvidiastub.c
@@ -45,7 +45,8 @@ InitOutput (ScreenInfo *pScreenInfo, int
 void
 InitInput (int argc, char **argv)
 {
-    KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
+    KdOsAddInputDrivers ();
+    KdInitInput ();
 }
 
 void
diff --git a/hw/kdrive/pcmcia/pcmciastub.c b/hw/kdrive/pcmcia/pcmciastub.c
index c509553..a56d2cb 100644
--- a/hw/kdrive/pcmcia/pcmciastub.c
+++ b/hw/kdrive/pcmcia/pcmciastub.c
@@ -45,7 +45,8 @@ InitOutput (ScreenInfo *pScreenInfo, int
 void
 InitInput (int argc, char **argv)
 {
-    KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
+    KdOsAddInputDrivers ();
+    KdInitInput ();
 }
 
 extern pcmciaDisplayModeRec pcmciaDefaultModes[];
diff --git a/hw/kdrive/pm2/pm2stub.c b/hw/kdrive/pm2/pm2stub.c
index fe46951..1f824b3 100644
--- a/hw/kdrive/pm2/pm2stub.c
+++ b/hw/kdrive/pm2/pm2stub.c
@@ -32,7 +32,8 @@ InitOutput (ScreenInfo *pScreenInfo, int
 void
 InitInput (int argc, char **argv)
 {
-    KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
+    KdOsAddInputDrivers ();
+    KdInitInput ();
 }
 
 void
diff --git a/hw/kdrive/r128/r128stub.c b/hw/kdrive/r128/r128stub.c
index 221648d..dbf3c0e 100644
--- a/hw/kdrive/r128/r128stub.c
+++ b/hw/kdrive/r128/r128stub.c
@@ -48,7 +48,8 @@ InitOutput (ScreenInfo *pScreenInfo, int
 void
 InitInput (int argc, char **argv)
 {
-    KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
+    KdOsAddInputDrivers ();
+    KdInitInput ();
 }
 
 void
diff --git a/hw/kdrive/savage/s3stub.c b/hw/kdrive/savage/s3stub.c
index 41553e6..776f8da 100644
--- a/hw/kdrive/savage/s3stub.c
+++ b/hw/kdrive/savage/s3stub.c
@@ -60,12 +60,8 @@ InitOutput (ScreenInfo *pScreenInfo, int
 void
 InitInput (int argc, char **argv)
 {
-#ifdef VXWORKS
-    KdInitInput (&VxWorksMouseFuncs, &VxWorksKeyboardFuncs);
-#endif
-#ifdef linux
-    KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
-#endif
+    KdOsAddInputDrivers ();
+    KdInitInput ();
 }
 
 extern int	s3CpuTimeout;
diff --git a/hw/kdrive/sis300/sis_stub.c b/hw/kdrive/sis300/sis_stub.c
index 7f2e482..8a4c06c 100644
--- a/hw/kdrive/sis300/sis_stub.c
+++ b/hw/kdrive/sis300/sis_stub.c
@@ -53,7 +53,8 @@ InitOutput(ScreenInfo *pScreenInfo, int 
 void
 InitInput(int argc, char **argv)
 {
-	KdInitInput(&LinuxMouseFuncs, &LinuxKeyboardFuncs);
+        KdOsAddInputDrivers();
+	KdInitInput();
 }
 
 void
diff --git a/hw/kdrive/sis530/sisstub.c b/hw/kdrive/sis530/sisstub.c
index a377dd5..2375f65 100644
--- a/hw/kdrive/sis530/sisstub.c
+++ b/hw/kdrive/sis530/sisstub.c
@@ -53,7 +53,8 @@ InitOutput (ScreenInfo *pScreenInfo, int
 void
 InitInput (int argc, char **argv)
 {
-    KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
+    KdOsAddInputDrivers ();
+    KdInitInput ();
 }
 
 void
diff --git a/hw/kdrive/smi/smistub.c b/hw/kdrive/smi/smistub.c
index e0f33fe..1db6708 100644
--- a/hw/kdrive/smi/smistub.c
+++ b/hw/kdrive/smi/smistub.c
@@ -47,7 +47,8 @@ InitOutput (ScreenInfo *pScreenInfo, int
 void
 InitInput (int argc, char **argv)
 {
-    KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
+    KdOsAddInputDrivers ();
+    KdInitInput ();
 }
 
 void
diff --git a/hw/kdrive/trident/tridentstub.c b/hw/kdrive/trident/tridentstub.c
index ebfd7ee..650206a 100644
--- a/hw/kdrive/trident/tridentstub.c
+++ b/hw/kdrive/trident/tridentstub.c
@@ -49,7 +49,8 @@ InitOutput (ScreenInfo *pScreenInfo, int
 void
 InitInput (int argc, char **argv)
 {
-    KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
+    KdOsAddInputDrivers ();
+    KdInitInput ();
 }
 
 void
diff --git a/hw/kdrive/trio/s3stub.c b/hw/kdrive/trio/s3stub.c
index 68178ed..7531858 100644
--- a/hw/kdrive/trio/s3stub.c
+++ b/hw/kdrive/trio/s3stub.c
@@ -52,7 +52,8 @@ InitOutput (ScreenInfo *pScreenInfo, int
 void
 InitInput (int argc, char **argv)
 {
-    KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
+    KdOsAddInputDrivers ();
+    KdInitInput ();
 }
 
 void
diff --git a/hw/kdrive/via/viastub.c b/hw/kdrive/via/viastub.c
index f63ee0d..1439010 100644
--- a/hw/kdrive/via/viastub.c
+++ b/hw/kdrive/via/viastub.c
@@ -87,7 +87,8 @@ InitOutput( ScreenInfo* pScreenInfo, int
 */
 void
 InitInput( int argc, char** argv ) {
-	KdInitInput( &LinuxMouseFuncs, &LinuxKeyboardFuncs );
+        KdOsAddInputDrivers();
+	KdInitInput();
 }
 
 /*
diff-tree 57f98e2b72d5c7fea93a9f6da86228ffb4856bf3 (from a6dc629052f0ad509cfa30e98217043a63c09552)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Mon Oct 23 02:55:41 2006 +0300

    kdrive/tslib: port to new absolute API, remove debugging
    Port to new absolute device (not touchscreen) API, and remove some
    leftover debugging.

diff --git a/hw/kdrive/linux/tslib.c b/hw/kdrive/linux/tslib.c
index bf2a3db..44b4b54 100644
--- a/hw/kdrive/linux/tslib.c
+++ b/hw/kdrive/linux/tslib.c
@@ -74,11 +74,8 @@ TsRead (int fd, void *closure)
     }
 
     while (ts_read(private->tsDev, &event, 1) == 1) {
-#ifdef DEBUG
-        ErrorF("[tslib] originally from (%d, %d)\n", event.x, event.y);
-#endif
         if (event.pressure) {
-            if (event.pressure > pi->dixdev->touchscreen->button_threshold) 
+            if (event.pressure > pi->dixdev->absolute->button_threshold) 
                 flags = KD_BUTTON_8;
             else
                 flags = KD_BUTTON_1;
@@ -109,9 +106,6 @@ TsRead (int fd, void *closure)
             y = private->lasty;
         }
 
-#ifdef DEBUG
-        ErrorF("event at (%lu, %lu), pressure is %d, sending flags %lu\n", x, y, event.pressure, flags);
-#endif
         KdEnqueuePointerEvent (pi, flags, x, y, event.pressure);
     }
 }
@@ -132,13 +126,9 @@ TslibEnable (KdPointerInfo *pi)
             close(private->fd);
         return BadAlloc;
     }
-    if (pi->dixdev && pi->dixdev->touchscreen &&
-        pi->dixdev->touchscreen->button_threshold == 0)
-        pi->dixdev->touchscreen->button_threshold = 115;
-
-#ifdef DEBUG
-    ErrorF("[tslib/TslibEnable] successfully enabled %s\n", pi->path);
-#endif
+    if (pi->dixdev && pi->dixdev->absolute &&
+        pi->dixdev->absolute->button_threshold == 0)
+        pi->dixdev->absolute->button_threshold = 115;
 
     KdRegisterFd(private->fd, TsRead, pi);
   
@@ -186,9 +176,6 @@ TslibInit (KdPointerInfo *pi)
     pi->nAxes = 3;
     pi->name = KdSaveString("Touchscreen");
     pi->inputClass = KD_TOUCHSCREEN;
-#ifdef DEBUG
-    ErrorF("[tslib/TslibInit] successfully inited for device %s\n", pi->path);
-#endif
 
     return Success;
 }
diff-tree a6dc629052f0ad509cfa30e98217043a63c09552 (from ac240b00ff6fc354c1aa641406ae8b49244c0b8b)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Mon Oct 23 02:54:59 2006 +0300

    kdrive/os: add KdOsAddInputDrivers
    Add KdOsAddInputDrivers, which adds all relevant input drivers.
    
    Could possibly be refactored to KdAddInputDrivers, which called through
    OsFuncs to a new function, if it existed.

diff --git a/hw/kdrive/linux/linux.c b/hw/kdrive/linux/linux.c
index e75f8d5..7ba99b4 100644
--- a/hw/kdrive/linux/linux.c
+++ b/hw/kdrive/linux/linux.c
@@ -469,6 +469,18 @@ LinuxFini (void)
     return;
 }
 
+void
+KdOsAddInputDrivers ()
+{
+    KdAddPointerDriver(&LinuxMouseDriver);
+    KdAddPointerDriver(&MsMouseDriver);
+    KdAddPointerDriver(&Ps2MouseDriver);
+#ifdef TSLIB
+    KdAddPointerDriver(&TsDriver);
+#endif
+    KdAddKeyboardDriver(&LinuxKeyboardDriver);
+}
+
 KdOsFuncs   LinuxFuncs = {
     LinuxInit,
     LinuxEnable,
diff --git a/hw/kdrive/src/kdrive.h b/hw/kdrive/src/kdrive.h
index 7e8712c..7f752e9 100644
--- a/hw/kdrive/src/kdrive.h
+++ b/hw/kdrive/src/kdrive.h
@@ -739,6 +739,9 @@ KdProcessArgument (int argc, char **argv
 void
 KdOsInit (KdOsFuncs *pOsFuncs);
 
+void
+KdOsAddInputDrivers (void);
+
 Bool
 KdAllocatePrivates (ScreenPtr pScreen);
 
diff --git a/hw/kdrive/vxworks/vxworks.c b/hw/kdrive/vxworks/vxworks.c
index ce214ff..aa46001 100644
--- a/hw/kdrive/vxworks/vxworks.c
+++ b/hw/kdrive/vxworks/vxworks.c
@@ -33,12 +33,6 @@ VxWorksSpecialKey (KeySym sym)
     case XK_Break:
 	download(1, "launcher", 0);
 	return TRUE;
-    case XK_Delete:
-	dispatchException |= DE_REBOOT;
-	return TRUE;
-    case XK_BackSpace:
-	dispatchException |= DE_RESET;
-	return TRUE;
     }
     return FALSE;
 }
@@ -53,6 +47,13 @@ VxWorksFini (void)
 {
 }
 
+void
+KdOsAddInputDrivers (void)
+{
+    KdAddPointerDriver(&VxWorksMouseDriver);
+    KdAddPointerDriver(&VxWorksKeyboardDriver);
+}
+
 KdOsFuncs   VxWorksFuncs = {
     VxWorksInit,
     VxWorksEnable,
diff-tree ac240b00ff6fc354c1aa641406ae8b49244c0b8b (from b1ba4b3e8ad427af1fa8618b0bd839f741ec2ce3)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Mon Oct 23 02:54:07 2006 +0300

    kdrive/input: use Absolute instead of Touchscreen
    Adjust to suit Zepheniah's new absolute device API.

diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c
index a2e2c0f..c900266 100644
--- a/hw/kdrive/src/kinput.c
+++ b/hw/kdrive/src/kinput.c
@@ -444,7 +444,7 @@ KdPointerProc(DeviceIntPtr pDevice, int 
 
 #ifdef XINPUT
         if (pi->inputClass == KD_TOUCHSCREEN) {
-            InitTouchscreenClassDeviceStruct(pDevice);
+            InitAbsoluteClassDeviceStruct(pDev);
             xiclass = AtomFromName(XI_TOUCHSCREEN);
         }
         else {
diff-tree b1ba4b3e8ad427af1fa8618b0bd839f741ec2ce3 (from 29f28dd1a8a7ed07e945a67946e3510f4b32d12a)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Mon Oct 23 02:53:15 2006 +0300

    kdrive/neomagic: include vesa.h, use DebugF

diff --git a/hw/kdrive/neomagic/neomagic.h b/hw/kdrive/neomagic/neomagic.h
index b91e81e..9b10005 100644
--- a/hw/kdrive/neomagic/neomagic.h
+++ b/hw/kdrive/neomagic/neomagic.h
@@ -26,14 +26,10 @@
 #include <backend.h>
 #include "kxv.h"
 #include "klinux.h"
+#include "vesa.h"
 
 
-#define DEBUG
-#ifdef DEBUG
-#define DBGOUT(fmt,a...) fprintf (stderr, fmt, ##a)
-#else
-#define DBGOUT(fmt,a...)
-#endif
+#define DBGOUT DebugF
 
 #define ENTER()    DBGOUT("Enter %s\n", __FUNCTION__)
 #define LEAVE() DBGOUT("Leave %s\n", __FUNCTION__)
diff-tree 29f28dd1a8a7ed07e945a67946e3510f4b32d12a (from 2f33f4065d89ae2b6fdda43c7105d72f89920cae)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Mon Oct 23 02:52:52 2006 +0300

    configure.ac: add XSERVER_LIBS to XNEST_LIBS

diff --git a/configure.ac b/configure.ac
index 9700d61..a6eb8cc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1005,7 +1005,7 @@ AC_MSG_RESULT([$XNEST])
 AM_CONDITIONAL(XNEST, [test "x$XNEST" = xyes])
 
 if test "x$XNEST" = xyes; then
-	XNEST_LIBS="$FB_LIB $MI_LIB $FIXES_LIB $XEXT_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $GLX_LIBS $RENDER_LIB $RANDR_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $XPSTUBS_LIB $CWRAP_LIB $OS_LIB"
+	XNEST_LIBS="$XSERVER_LIBS $FB_LIB $MI_LIB $FIXES_LIB $XEXT_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $GLX_LIBS $RENDER_LIB $RANDR_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $XPSTUBS_LIB $CWRAP_LIB $OS_LIB"
 	AC_SUBST([XNEST_LIBS])
 fi
 
diff-tree 2f33f4065d89ae2b6fdda43c7105d72f89920cae (from 08928afb0500d46b0caa0a1d1244dee2ed80e6a0)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Mon Oct 23 02:52:35 2006 +0300

    Xnest: port to new input API
    Port Xnest to Get{Pointer,Keyboard}Events, plus the new mieq API.

diff --git a/hw/xnest/Events.c b/hw/xnest/Events.c
index e5cf99e..a209241 100644
--- a/hw/xnest/Events.c
+++ b/hw/xnest/Events.c
@@ -37,10 +37,13 @@ is" without express or implied warranty.
 #include "XNWindow.h"
 #include "Events.h"
 #include "Keyboard.h"
+#include "Pointer.h"
 #include "mipointer.h"
 
 CARD32 lastEventTime = 0;
 
+extern xEvent *xnestEvents;
+
 void
 ProcessInputEvents()
 {
@@ -101,11 +104,12 @@ xnestCollectExposures()
 void
 xnestQueueKeyEvent(int type, unsigned int keycode)
 {
-  xEvent x;
-  x.u.u.type = type;
-  x.u.u.detail = keycode;
-  x.u.keyButtonPointer.time = lastEventTime = GetTimeInMillis();
-  mieqEnqueue(&x);
+  int i, n;
+
+  lastEventTime = GetTimeInMillis();
+  n = GetKeyboardEvents(xnestEvents, xnestKeyboardDevice, type, keycode);
+  for (i = 0; i < n; i++)
+    mieqEnqueue(xnestKeyboardDevice, xnestEvents + i);
 }
 
 void
@@ -113,6 +117,7 @@ xnestCollectEvents()
 {
   XEvent X;
   xEvent x;
+  int i, n, valuators[2];
   ScreenPtr pScreen;
 
   while (XCheckIfEvent(xnestDisplay, &X, xnestNotExposurePredicate, NULL)) {
@@ -129,30 +134,30 @@ xnestCollectEvents()
       
     case ButtonPress:
       xnestUpdateModifierState(X.xkey.state);
-      x.u.u.type = ButtonPress;
-      x.u.u.detail = X.xbutton.button;
-      x.u.keyButtonPointer.time = lastEventTime = GetTimeInMillis();
-      mieqEnqueue(&x);
+      lastEventTime = GetTimeInMillis();
+      n = GetPointerEvents(xnestEvents, xnestPointerDevice, ButtonPress,
+                           X.xbutton.button, POINTER_RELATIVE, 0, 0, NULL);
+      for (i = 0; i < n; i++)
+        mieqEnqueue(xnestPointerDevice, xnestEvents + i);
       break;
       
     case ButtonRelease:
       xnestUpdateModifierState(X.xkey.state);
-      x.u.u.type = ButtonRelease;
-      x.u.u.detail = X.xbutton.button;
-      x.u.keyButtonPointer.time = lastEventTime = GetTimeInMillis();
-      mieqEnqueue(&x);
+      lastEventTime = GetTimeInMillis();
+      n = GetPointerEvents(xnestEvents, xnestPointerDevice, ButtonRelease,
+                           X.xbutton.button, POINTER_RELATIVE, 0, 0, NULL);
+      for (i = 0; i < n; i++)
+        mieqEnqueue(xnestPointerDevice, xnestEvents + i);
       break;
       
     case MotionNotify:
-#if 0
-      x.u.u.type = MotionNotify;
-      x.u.keyButtonPointer.rootX = X.xmotion.x;
-      x.u.keyButtonPointer.rootY = X.xmotion.y;
-      x.u.keyButtonPointer.time = lastEventTime = GetTimeInMillis();
-      mieqEnqueue(&x);
-#endif 
-      miPointerAbsoluteCursor (X.xmotion.x, X.xmotion.y, 
-			       lastEventTime = GetTimeInMillis());
+      valuators[0] = X.xmotion.x;
+      valuators[1] = X.xmotion.y;
+      lastEventTime = GetTimeInMillis();
+      n = GetPointerEvents(xnestEvents, xnestPointerDevice, MotionNotify,
+                           0, POINTER_ABSOLUTE, 0, 2, valuators);
+      for (i = 0; i < n; i++)
+        mieqEnqueue(xnestPointerDevice, xnestEvents + i);
       break;
       
     case FocusIn:
@@ -179,15 +184,13 @@ xnestCollectEvents()
 	pScreen = xnestScreen(X.xcrossing.window);
 	if (pScreen) {
 	  NewCurrentScreen(pScreen, X.xcrossing.x, X.xcrossing.y);
-#if 0
-	  x.u.u.type = MotionNotify;
-	  x.u.keyButtonPointer.rootX = X.xcrossing.x;
-	  x.u.keyButtonPointer.rootY = X.xcrossing.y;
-	  x.u.keyButtonPointer.time = lastEventTime = GetTimeInMillis();
-	  mieqEnqueue(&x);
-#endif
-	  miPointerAbsoluteCursor (X.xcrossing.x, X.xcrossing.y, 
-				   lastEventTime = GetTimeInMillis());
+          valuators[0] = X.xcrossing.x;
+          valuators[1] = X.xcrossing.y;
+          lastEventTime = GetTimeInMillis();
+          n = GetPointerEvents(xnestEvents, xnestPointerDevice, MotionNotify,
+                               0, POINTER_ABSOLUTE, 0, 2, valuators);
+          for (i = 0; i < n; i++)
+            mieqEnqueue(xnestPointerDevice, xnestEvents + i);
 	  xnestDirectInstallColormaps(pScreen);
 	}
       }
diff --git a/hw/xnest/Init.c b/hw/xnest/Init.c
index 8c397a7..5bf0300 100644
--- a/hw/xnest/Init.c
+++ b/hw/xnest/Init.c
@@ -45,6 +45,8 @@ is" without express or implied warranty.
 
 Bool xnestDoFullGeneration = True;
 
+xEvent *xnestEvents = NULL;
+
 void
 InitOutput(ScreenInfo *screenInfo, int argc, char *argv[])
 {
@@ -92,10 +94,15 @@ InitInput(int argc, char *argv[])
   xnestPointerDevice = AddInputDevice(xnestPointerProc, TRUE);
   xnestKeyboardDevice = AddInputDevice(xnestKeyboardProc, TRUE);
 
+  if (!xnestEvents)
+      xnestEvents = (xEvent *) xcalloc(sizeof(xEvent), GetMaximumEventsNum());
+  if (!xnestEvents)
+      FatalError("couldn't allocate room for events\n");
+
   RegisterPointerDevice(xnestPointerDevice);
   RegisterKeyboardDevice(xnestKeyboardDevice);
 
-  mieqInit((DevicePtr)xnestKeyboardDevice, (DevicePtr)xnestPointerDevice);
+  mieqInit();
 
   AddEnabledDevice(XConnectionNumber(xnestDisplay));
 
diff --git a/hw/xnest/Pointer.c b/hw/xnest/Pointer.c
index 4544497..b5e45db 100644
--- a/hw/xnest/Pointer.c
+++ b/hw/xnest/Pointer.c
@@ -59,7 +59,7 @@ xnestPointerProc(DeviceIntPtr pDev, int 
       InitPointerDeviceStruct(&pDev->public, map, nmap,
 			      miPointerGetMotionEvents,
 			      xnestChangePointerControl,
-			      miPointerGetMotionBufferSize());
+			      miPointerGetMotionBufferSize(), 2);
       break;
     case DEVICE_ON: 
       xnestEventMask |= XNEST_POINTER_EVENT_MASK;
diff-tree 08928afb0500d46b0caa0a1d1244dee2ed80e6a0 (from cd3b16a57efaf89108054f18a94c91e2dd74fafa)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Mon Oct 23 02:51:52 2006 +0300

    Xnest: disable XKB, reshuffle code
    Disable XKB, as we can't yet use it; move Composite disabling to
    ddxInitGlobals, along with XKB.

diff --git a/hw/xnest/Args.c b/hw/xnest/Args.c
index 5d0a0c0..c2e8b0d 100644
--- a/hw/xnest/Args.c
+++ b/hw/xnest/Args.c
@@ -53,18 +53,21 @@ Window xnestParentWindow = 0;
 /* ddxInitGlobals - called by |InitGlobals| from os/util.c */
 void ddxInitGlobals(void)
 {
-}
-
-int
-ddxProcessArgument (int argc, char *argv[], int i)
-{
-
 #ifdef COMPOSITE
     /* XXX terrible hack */
     extern Bool noCompositeExtension;
     noCompositeExtension = TRUE;
 #endif
 
+#ifdef XKB
+    extern Bool noXkbExtension;
+    noXkbExtension = TRUE;
+#endif
+}
+
+int
+ddxProcessArgument (int argc, char *argv[], int i)
+{
   if (!strcmp(argv[i], "-display")) {
     if (++i < argc) {
       xnestDisplayName = argv[i];
diff-tree cd3b16a57efaf89108054f18a94c91e2dd74fafa (from bf4df9b73f0c1a84093aaf9a2e2cbc56fb341c60)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Mon Oct 23 02:51:13 2006 +0300

    Xvfb: port to new mieq API

diff --git a/hw/vfb/InitInput.c b/hw/vfb/InitInput.c
index 17e023a..c0bfb55 100644
--- a/hw/vfb/InitInput.c
+++ b/hw/vfb/InitInput.c
@@ -293,7 +293,7 @@ vfbMouseProc(DeviceIntPtr pDevice, int o
 	    map[2] = 2;
 	    map[3] = 3;
 	    InitPointerDeviceStruct(pDev, map, 3, miPointerGetMotionEvents,
-		(PtrCtrlProcPtr)NoopDDA, miPointerGetMotionBufferSize());
+		(PtrCtrlProcPtr)NoopDDA, miPointerGetMotionBufferSize(), 2);
 	    break;
 
     case DEVICE_ON:
@@ -318,6 +318,5 @@ InitInput(int argc, char *argv[])
     k = AddInputDevice(vfbKeybdProc, TRUE);
     RegisterPointerDevice(p);
     RegisterKeyboardDevice(k);
-    miRegisterPointerDevice(screenInfo.screens[0], p);
-    (void)mieqInit ((DevicePtr) k, (DevicePtr) p);
+    (void)mieqInit();
 }
diff-tree bf4df9b73f0c1a84093aaf9a2e2cbc56fb341c60 (from 4dd91c45abea9fb561a5acb10290e29487df6722)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Mon Oct 23 02:50:53 2006 +0300

    include: move POINTER_* flags from inputstr.h to input.h
    Given they're just numeric constants, they should be included in
    input.h, not inputstr.h.

diff --git a/include/input.h b/include/input.h
index e598963..4acc856 100644
--- a/include/input.h
+++ b/include/input.h
@@ -59,6 +59,10 @@ SOFTWARE.
 #define DEVICE_OFF	2
 #define DEVICE_CLOSE	3
 
+#define POINTER_RELATIVE (1 << 1)
+#define POINTER_ABSOLUTE (1 << 2)
+#define POINTER_ACCELERATE (1 << 3)
+
 #define MAP_LENGTH	256
 #define DOWN_LENGTH	32	/* 256/8 => number of bytes to hold 256 bits */
 #define NullGrab ((GrabPtr)NULL)
diff --git a/include/inputstr.h b/include/inputstr.h
index 52175ad..2c64e0d 100644
--- a/include/inputstr.h
+++ b/include/inputstr.h
@@ -62,10 +62,6 @@ SOFTWARE.
 
 #define EMASKSIZE	MAX_DEVICES
 
-#define POINTER_RELATIVE (1 << 1)
-#define POINTER_ABSOLUTE (1 << 2)
-#define POINTER_ACCELERATE (1 << 3)
-
 extern int CoreDevicePrivatesIndex, CoreDevicePrivatesGeneration;
 
 /* Kludge: OtherClients and InputClients must be compatible, see code */
diff-tree 4dd91c45abea9fb561a5acb10290e29487df6722 (from 562096a012f4bb8f44d5ec6320a32f4010c189e4)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Mon Oct 23 02:50:03 2006 +0300

    miinitext: Xi and XKB are not hardware-only extensions
    Xi is now a required extension, and XKB can be used without hardware,
    so include them both when NO_HW_ONLY_EXTS is defined.

diff --git a/mi/miinitext.c b/mi/miinitext.c
index aafd014..f618595 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -549,7 +549,7 @@ InitExtensions(argc, argv)
 #ifdef MULTIBUFFER
     if (!noMultibufferExtension) MultibufferExtensionInit();
 #endif
-#if defined(XINPUT) && !defined(NO_HW_ONLY_EXTS)
+#if defined(XINPUT)
     if (!noXInputExtension) XInputExtensionInit();
 #endif
 #ifdef XTEST
@@ -579,7 +579,7 @@ InitExtensions(argc, argv)
 #ifdef XSYNC
     if (!noSyncExtension) SyncExtensionInit();
 #endif
-#if defined(XKB) && !defined(PRINT_ONLY_SERVER) && !defined(NO_HW_ONLY_EXTS)
+#if defined(XKB) && !defined(PRINT_ONLY_SERVER)
     if (!noXkbExtension) XkbExtensionInit();
 #endif
 #ifdef XCMISC
diff-tree 562096a012f4bb8f44d5ec6320a32f4010c189e4 (from eec182259112fba240751f974f7e5ca09fce8b9d)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Mon Oct 23 02:49:22 2006 +0300

    XkbCopyKeymap: increment shapes and outlines when copying
    Remember to increment the source and destination shapes when copying,
    instead of just endlessly copying the first one.

diff --git a/xkb/xkbUtils.c b/xkb/xkbUtils.c
index cddeb9e..0c1ac9c 100644
--- a/xkb/xkbUtils.c
+++ b/xkb/xkbUtils.c
@@ -1665,7 +1665,7 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr
 
             for (i = 0, sshape = src->geom->shapes, dshape = dst->geom->shapes;
                  i < src->geom->num_shapes;
-                 i++) {
+                 i++, sshape++, dshape++) {
                 if (sshape->num_outlines) {
                     tmp = xcalloc(sshape->num_outlines, sizeof(XkbOutlineRec));
                     if (!tmp)
@@ -1676,7 +1676,7 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr
                           soutline = sshape->outlines,
                           doutline = dshape->outlines;
                          j < sshape->num_outlines;
-                         j++) {
+                         j++, soutline++, doutline++) {
                         if (soutline->num_points) {
                             tmp = xalloc(soutline->num_points *
                                           sizeof(XkbPointRec));
diff-tree eec182259112fba240751f974f7e5ca09fce8b9d (from bc701a14292da5abfb601e3a040651a74f46df8f)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Mon Oct 23 02:48:30 2006 +0300

    dix/getevents: move SyntheticMotion to getevents.c
    Mostly, this is just a cheesy hack to ensure that getevents.o gets
    included when linking.  Sigh.

diff --git a/dix/events.c b/dix/events.c
index e1a3e75..321c552 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -320,11 +320,16 @@ static CARD8 criticalEvents[32] =
 };
 
 #ifdef PANORAMIX
-
 static void ConfineToShape(RegionPtr shape, int *px, int *py);
-static void SyntheticMotion(int x, int y);
+static void PostSyntheticMotion(int x, int y, int screenNum, int time);
 static void PostNewCursor(void);
 
+#define SyntheticMotion(x, y) \
+    PostSyntheticMotion(x, y, sprite.screen->myNum, \
+                        syncEvents.playingEvents ? \
+                          syncEvents.time.milliseconds : \
+                          currentTime.milliseconds);
+
 static Bool
 XineramaSetCursorPosition(
     int x, 
@@ -667,30 +672,6 @@ SetCriticalEvent(int event)
     criticalEvents[event >> 3] |= 1 << (event & 7);
 }
 
-static void
-SyntheticMotion(int x, int y)
-{
-    xEvent xE;
-
-#ifdef PANORAMIX
-    /* Translate back to the sprite screen since processInputProc
-       will translate from sprite screen to screen 0 upon reentry
-       to the DIX layer */
-    if(!noPanoramiXExtension) {
-	x += panoramiXdataPtr[0].x - panoramiXdataPtr[sprite.screen->myNum].x;
-	y += panoramiXdataPtr[0].y - panoramiXdataPtr[sprite.screen->myNum].y;
-    }
-#endif
-    xE.u.keyButtonPointer.rootX = x;
-    xE.u.keyButtonPointer.rootY = y;
-    if (syncEvents.playingEvents)
-	xE.u.keyButtonPointer.time = syncEvents.time.milliseconds;
-    else
-	xE.u.keyButtonPointer.time = currentTime.milliseconds;
-    xE.u.u.type = MotionNotify;
-    (*inputInfo.pointer->public.processInputProc)(&xE, inputInfo.pointer, 1);
-}
-
 #ifdef SHAPE
 static void
 ConfineToShape(RegionPtr shape, int *px, int *py)
diff --git a/dix/getevents.c b/dix/getevents.c
index 03fe5fe..ca199c6 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -51,6 +51,11 @@ extern Bool XkbCopyKeymap(XkbDescPtr src
 #include "xace.h"
 #endif
 
+#ifdef PANORAMIX
+#include "panoramiX.h"
+#include "panoramiXsrv.h"
+#endif
+
 #include <X11/extensions/XIproto.h>
 #include "exglobals.h"
 #include "exevents.h"
@@ -546,3 +551,32 @@ SwitchCorePointer(DeviceIntPtr pDev)
     if (inputInfo.pointer->devPrivates[CoreDevicePrivatesIndex].ptr != pDev)
         inputInfo.pointer->devPrivates[CoreDevicePrivatesIndex].ptr = pDev;
 }
+
+
+/**
+ * Synthesize a single motion event for the core pointer.
+ *
+ * Used in cursor functions, e.g. when cursor confinement changes, and we need
+ * to shift the pointer to get it inside the new bounds.
+ */
+void
+PostSyntheticMotion(int x, int y, int screenNum, unsigned long time)
+{
+    xEvent xE = { 0, };
+
+#ifdef PANORAMIX
+    /* Translate back to the sprite screen since processInputProc
+       will translate from sprite screen to screen 0 upon reentry
+       to the DIX layer. */
+    if (!noPanoramiXExtension) {
+        x += panoramiXdataPtr[0].x - panoramiXdataPtr[screenNum].x;
+        y += panoramiXdataPtr[0].y - panoramiXdataPtr[screenNum].y;
+    }
+#endif
+
+    xE.u.u.type = MotionNotify;
+    xE.u.keyButtonPointer.rootX = x;
+    xE.u.keyButtonPointer.rootY = y;
+
+    (*inputInfo.pointer->public.processInputProc)(&xE, inputInfo.pointer, 1);
+}
diff-tree bc701a14292da5abfb601e3a040651a74f46df8f (from b03e2f7029506640a8fe5cb88818b329c23503ff)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Mon Oct 23 00:08:32 2006 +0300

    dix/getevents: cosmetic cleanups, remove keymap copy from GKVE
    Remove keymap copy from GetKeyboardValuatorEvents, as
    SwitchCoreKeyboard now takes care of this for us.
    Remove unused variable and function prototype.
    Update comments to be as informative as possible.

diff --git a/dix/getevents.c b/dix/getevents.c
index c6a35ba..03fe5fe 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -44,7 +44,6 @@
 #ifdef XKB
 #include <X11/extensions/XKBproto.h>
 #include <X11/extensions/XKBsrv.h>
-extern Bool XkbFilterEvents(ClientPtr, int, xEvent *);
 extern Bool XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies);
 #endif
 
@@ -99,9 +98,10 @@ GetKeyboardEvents(xEvent *events, Device
  * The DDX is responsible for allocating the event structure in the first
  * place via GetMaximumEventsNum(), and for freeing it.
  *
- * If pDev is set to send core events, then the keymap on the core
- * keyboard will be pivoted to that of the new keyboard and the appropriate
- * MapNotify events (both core and XKB) will be sent.
+ * This function does not change the core keymap to that of the device;
+ * that is done by SwitchCoreKeyboard, which is called from
+ * mieqProcessInputEvents.  If replacing function, take care to call
+ * SetCoreKeyboard before processInputProc, so keymaps are altered to suit.
  *
  * Note that this function recurses!  If called for non-XKB, a repeating
  * key press will trigger a matching KeyRelease, as well as the
@@ -117,7 +117,6 @@ GetKeyboardValuatorEvents(xEvent *events
                                            pDev->key->curKeySyms.mapWidth];
     deviceKeyButtonPointer *kbp = NULL;
     deviceValuator *xv = NULL;
-    KeyClassPtr ckeyc;
 
     if (!events)
         return 0;
@@ -220,40 +219,13 @@ GetKeyboardValuatorEvents(xEvent *events
         events->u.keyButtonPointer.time = ms;
         events->u.u.type = type;
         events->u.u.detail = key_code;
-
-        if (inputInfo.keyboard->devPrivates[CoreDevicePrivatesIndex].ptr !=
-            pDev) {
-            ckeyc = inputInfo.keyboard->key;
-            memcpy(ckeyc->modifierMap, pDev->key->modifierMap, MAP_LENGTH);
-            if (ckeyc->modifierKeyMap)
-                xfree(ckeyc->modifierKeyMap);
-            ckeyc->modifierKeyMap = xalloc(8 * pDev->key->maxKeysPerModifier);
-            memcpy(ckeyc->modifierKeyMap, pDev->key->modifierKeyMap,
-                    (8 * pDev->key->maxKeysPerModifier));
-            ckeyc->maxKeysPerModifier = pDev->key->maxKeysPerModifier;
-            ckeyc->curKeySyms.minKeyCode = pDev->key->curKeySyms.minKeyCode;
-            ckeyc->curKeySyms.maxKeyCode = pDev->key->curKeySyms.maxKeyCode;
-            SetKeySymsMap(&ckeyc->curKeySyms, &pDev->key->curKeySyms);
-#ifdef XKB
-            if (!noXkbExtension && pDev->key->xkbInfo &&
-                pDev->key->xkbInfo->desc) {
-                if (!XkbCopyKeymap(pDev->key->xkbInfo->desc,
-                                   ckeyc->xkbInfo->desc, True))
-                    FatalError("Couldn't pivot keymap from device to core!\n");
-            }
-#endif
-            SendMappingNotify(MappingKeyboard, ckeyc->curKeySyms.minKeyCode,
-                              (ckeyc->curKeySyms.maxKeyCode -
-                               ckeyc->curKeySyms.minKeyCode),
-                              serverClient);
-            inputInfo.keyboard->devPrivates[CoreDevicePrivatesIndex].ptr = pDev;
-        }
     }
 
     return numEvents;
 }
 
-/* Originally a part of xf86PostMotionEvent. */
+/* Originally a part of xf86PostMotionEvent; modifies valuators
+ * in-place. */
 static void
 acceleratePointer(DeviceIntPtr pDev, int first_valuator, int num_valuators,
                   int *valuators)
@@ -277,9 +249,6 @@ acceleratePointer(DeviceIntPtr pDev, int
     if (!dx && !dy)
         return;
 
-    /*
-     * Accelerate
-     */
     if (pDev->ptrfeed && pDev->ptrfeed->ctrl.num) {
         /* modeled from xf86Events.c */
         if (pDev->ptrfeed->ctrl.threshold) {
@@ -524,7 +493,15 @@ GetPointerEvents(xEvent *events, DeviceI
     return num_events;
 }
 
-void SwitchCoreKeyboard(DeviceIntPtr pDev)
+/**
+ * Note that pDev was the last device to send a core event.  This function
+ * copies the complete keymap from the originating device to the core
+ * device, and makes sure the appropriate notifications are generated.
+ *
+ * Call this just before processInputProc.
+ */
+_X_EXPORT void
+SwitchCoreKeyboard(DeviceIntPtr pDev)
 {
     KeyClassPtr ckeyc = inputInfo.keyboard->key;
 
@@ -557,8 +534,14 @@ void SwitchCoreKeyboard(DeviceIntPtr pDe
     }
 }
 
-/* Currently a no-op. */
-void SwitchCorePointer(DeviceIntPtr pDev)
+/**
+ * Note that pDev was the last function to send a core pointer event.
+ * Currently a no-op.
+ *
+ * Call this just before processInputProc.
+ */ 
+_X_EXPORT void
+SwitchCorePointer(DeviceIntPtr pDev)
 {
     if (inputInfo.pointer->devPrivates[CoreDevicePrivatesIndex].ptr != pDev)
         inputInfo.pointer->devPrivates[CoreDevicePrivatesIndex].ptr = pDev;
diff-tree b03e2f7029506640a8fe5cb88818b329c23503ff (from 90de7ce25a84cfe6c6790f9af2bc2399d25b9b9c)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Sun Oct 22 19:56:49 2006 +0300

    xi: fix NIDR return yet again
    For a one-line function, it was pretty broken.

diff --git a/Xi/stubs.c b/Xi/stubs.c
index 88afec0..28ecd8b 100644
--- a/Xi/stubs.c
+++ b/Xi/stubs.c
@@ -308,5 +308,5 @@ ChangeDeviceControl(register ClientPtr c
 int
 NewInputDeviceRequest(InputOption *options)
 {
-    return;
+    return BadValue;
 }
diff-tree 90de7ce25a84cfe6c6790f9af2bc2399d25b9b9c (from f46dc272913ffb6b5b234a7ec6f4ba5cae44a831)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Sun Oct 22 19:54:36 2006 +0300

    xi: fix return type for NIDR

diff --git a/Xi/stubs.c b/Xi/stubs.c
index 0678c4c..88afec0 100644
--- a/Xi/stubs.c
+++ b/Xi/stubs.c
@@ -305,7 +305,7 @@ ChangeDeviceControl(register ClientPtr c
  * Add a new device with the specified options.
  *
  */
-void
+int
 NewInputDeviceRequest(InputOption *options)
 {
     return;
diff-tree f46dc272913ffb6b5b234a7ec6f4ba5cae44a831 (from 31a6307b7ba5adaa96deb8101ddfcda0262f537d)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Sun Oct 22 19:51:35 2006 +0300

    xi: add NewInputDeviceRequest to stubs

diff --git a/Xi/stubs.c b/Xi/stubs.c
index 27afcea..0678c4c 100644
--- a/Xi/stubs.c
+++ b/Xi/stubs.c
@@ -296,3 +296,17 @@ ChangeDeviceControl(register ClientPtr c
 	return (BadMatch);
     }
 }
+
+
+/****************************************************************************
+ *
+ * Caller: configAddDevice (and others)
+ *
+ * Add a new device with the specified options.
+ *
+ */
+void
+NewInputDeviceRequest(InputOption *options)
+{
+    return;
+}
diff-tree 31a6307b7ba5adaa96deb8101ddfcda0262f537d (from eae6594d03a606ddf1f433b5897b5938aa940c1e)
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Sun Oct 22 19:49:31 2006 +0300

    xi: change DEVICE_TOUCHSCREEN to ABS_{AREA_CALIB} for stubs

diff --git a/Xi/stubs.c b/Xi/stubs.c
index 90aeddb..27afcea 100644
--- a/Xi/stubs.c
+++ b/Xi/stubs.c
@@ -287,7 +287,8 @@ ChangeDeviceControl(register ClientPtr c
     switch (control->control) {
     case DEVICE_RESOLUTION:
 	return (BadMatch);
-    case DEVICE_TOUCHSCREEN:
+    case DEVICE_ABS_CALIB:
+    case DEVICE_ABS_AREA:
         return (BadMatch);
     case DEVICE_CORE:
         return (BadMatch);
diff-tree 948a97b97e93cee05a23f1f1ae699c5e181bc8ce (from 04554a3adcddc32de5fdb0b3122da0bcdd4c24a9)
Author: Drew Parsons <dparsons at debian.org>
Date:   Sat Oct 21 23:09:22 2006 +1000

    Minor typo fix to xorg.conf man page.

diff --git a/hw/xfree86/doc/man/xorg.conf.man.pre b/hw/xfree86/doc/man/xorg.conf.man.pre
index e94804c..abf3146 100644
--- a/hw/xfree86/doc/man/xorg.conf.man.pre
+++ b/hw/xfree86/doc/man/xorg.conf.man.pre
@@ -1081,7 +1081,7 @@ Include the set of modes listed in the
 .B Modes
 section called
 .IR modesection-id.
-This make all of the modes defined in that section available for use by
+This makes all of the modes defined in that section available for use by
 this monitor.
 .TP 7
 .BI "Mode  \*q" name \*q
diff-tree 04554a3adcddc32de5fdb0b3122da0bcdd4c24a9 (from edd5f1745461f995670969cb736d1569ca94643f)
Author: Drew Parsons <dparsons at debian.org>
Date:   Sat Oct 21 22:06:43 2006 +1000

    Minor typos in Xserver man page.

diff --git a/doc/Xserver.man.pre b/doc/Xserver.man.pre
index b9597f1..d65acde 100644
--- a/doc/Xserver.man.pre
+++ b/doc/Xserver.man.pre
@@ -181,7 +181,7 @@ prints a usage message.
 causes all remaining command line arguments to be ignored.
 .TP 8
 .B \-maxbigreqsize \fIsize\fP
-sets the maxmium big request to
+sets the maximum big request to
 .I size
 MB.
 .TP 8
@@ -449,7 +449,7 @@ the text after the /; it is used to dist
 
 <action> ::= a | i | e
 
-<string> ::= <dbl quoted string> | <single quoted string> | <unqouted string>
+<string> ::= <dbl quoted string> | <single quoted string> | <unquoted string>
 
 <dbl quoted string> ::= <space> " <not dqoute>* " <space>
 
diff-tree edd5f1745461f995670969cb736d1569ca94643f (from e1dd1904c6c7ce33f347d822272831d54a6497c8)
Author: Carl Switzky <Carl.Switzky at Sun.COM>
Date:   Thu Oct 19 17:30:54 2006 -0700

    Add ast driver/device info to Xorg server & config utilities

diff --git a/hw/xfree86/common/xf86PciInfo.h b/hw/xfree86/common/xf86PciInfo.h
index b8ba73f..0630cfa 100644
--- a/hw/xfree86/common/xf86PciInfo.h
+++ b/hw/xfree86/common/xf86PciInfo.h
@@ -92,6 +92,7 @@
 #define PCI_VENDOR_TRITECH		0x1292
 #define PCI_VENDOR_NVIDIA_SGS		0x12D2
 #define PCI_VENDOR_VMWARE		0x15AD
+#define PCI_VENDOR_AST			0x1A03
 #define PCI_VENDOR_3DLABS		0x3D3D
 #define PCI_VENDOR_AVANCE_2		0x4005
 #define PCI_VENDOR_HERCULES		0x4843
@@ -358,6 +359,9 @@
 #define PCI_CHIP_RS350_7834             0x7834
 #define PCI_CHIP_RS350_7835             0x7835
 
+/* ASPEED Technology (AST) */
+#define PCI_CHIP_AST2000		0x2000
+
 /* Avance Logic */
 #define PCI_CHIP_ALG2064		0x2064
 #define PCI_CHIP_ALG2301		0x2301
diff --git a/hw/xfree86/utils/xorgcfg/text-mode.c b/hw/xfree86/utils/xorgcfg/text-mode.c
index 10f4b69..0fc5770 100644
--- a/hw/xfree86/utils/xorgcfg/text-mode.c
+++ b/hw/xfree86/utils/xorgcfg/text-mode.c
@@ -1128,6 +1128,7 @@ CardConfig(void)
     static char *xdrivers[] = {
 	"apm",
 	"ark",
+	"ast",
 	"ati",
 	"r128",
 	"radeon",
diff --git a/hw/xfree86/utils/xorgconfig/Cards b/hw/xfree86/utils/xorgconfig/Cards
index bf30eab..b95928c 100644
--- a/hw/xfree86/utils/xorgconfig/Cards
+++ b/hw/xfree86/utils/xorgconfig/Cards
@@ -51,6 +51,11 @@ NAME ** Ark Logic (generic)             
 SERVER SVGA
 DRIVER ark
 
+NAME ** ASPEED Technology (generic)        [ast]
+#CHIPSET ast
+SERVER SVGA
+DRIVER ast
+
 NAME ** ATI (generic)                      [ati]
 #CHIPSET ati
 SERVER SVGA
diff-tree e1dd1904c6c7ce33f347d822272831d54a6497c8 (from 62d24097932708fbbb62a23614fe63b4b7acf3bd)
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Thu Oct 19 13:51:53 2006 -0700

    Pre-release message should tell users to check git, not CVS, for updates

diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index 8b4bf14..8f0a26d 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -1763,8 +1763,8 @@ xf86PrintBanner()
     "Bugs may be filed in the bugzilla at http://bugs.freedesktop.org/.\n"
     "Select the \"xorg\" product for bugs you find in this release.\n"
     "Before reporting bugs in pre-release versions please check the\n"
-    "latest version in the X.Org Foundation CVS repository.\n"
-    "See http://wiki.x.org/wiki/CvsPage for CVS access instructions.\n");
+    "latest version in the X.Org Foundation git repository.\n"
+    "See http://wiki.x.org/wiki/GitPage for git access instructions.\n");
 #endif
   ErrorF("\nX Window System Version %d.%d.%d",
 	 XORG_VERSION_MAJOR,
diff-tree 62d24097932708fbbb62a23614fe63b4b7acf3bd (from 357b37b3826fa6e9878c0bd895164259c2ed3c0d)
Author: Joshua Baergen <joshuabaergen at gentoo.org>
Date:   Thu Oct 19 11:14:26 2006 -0700

    Create xorg.conf.example (Gentoo bug #138623).

diff --git a/configure.ac b/configure.ac
index 693da13..444b021 100644
--- a/configure.ac
+++ b/configure.ac
@@ -821,6 +821,7 @@ VENDOR_MAN_VERSION="Version ${VENDOR_VER
 
 AC_DEFINE_DIR(COMPILEDDEFAULTFONTPATH, FONTPATH, [Default font path])
 AC_DEFINE_DIR(RGB_DB, RGBPATH, [Default RGB path])
+AC_DEFINE_DIR(BASE_FONT_PATH, FONTDIR, [Default base font path])
 AC_DEFINE_DIR(DRI_DRIVER_PATH, DRI_DRIVER_PATH, [Default DRI driver path])
 AC_DEFINE_UNQUOTED(XVENDORNAME, ["$VENDOR_STRING"], [Vendor name])
 AC_DEFINE_UNQUOTED(XVENDORNAMESHORT, ["$VENDOR_STRING_SHORT"], [Short vendor name])
diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am
index 5cce11d..79d2ec5 100644
--- a/hw/xfree86/Makefile.am
+++ b/hw/xfree86/Makefile.am
@@ -1,3 +1,5 @@
+include $(top_srcdir)/cpprules.in
+
 if DRI
 DRI_SUBDIR = dri
 endif
@@ -82,7 +84,23 @@ endif
 optionsdir = $(libdir)/X11
 dist_options_DATA = Options
 
+BUILT_SOURCES = xorg.conf.example
+CLEAN = xorg.conf.example xorg.conf.example.pre
 EXTRA_DIST = xorgconf.cpp
 
+CPP_FILES_FLAGS = \
+	-DRGBPATH=\"$(RGB_DB)\" \
+	-DLOCALFONTPATH="\"$(BASE_FONT_PATH)/local\"" \
+	-DMISCFONTPATH="\"$(BASE_FONT_PATH)/misc\"" \
+	-DT1FONTPATH="\"$(BASE_FONT_PATH)/Type1\"" \
+	-DTRUETYPEFONTPATH="\"$(BASE_FONT_PATH)/TTF\"" \
+	-DCIDFONTPATH="\"$(BASE_FONT_PATH)/CID\"" \
+	-DDPI75FONTPATH="\"$(BASE_FONT_PATH)/75dpi\"" \
+	-DDPI100FONTPATH="\"$(BASE_FONT_PATH)/100dpi\"" \
+	-DMODULEPATH=\"$(DEFAULT_MODULE_PATH)\"
+
 relink:
 	rm -f Xorg && $(MAKE) Xorg
+
+xorg.conf.example.pre: xorgconf.cpp
+	cp $< $@
diff --git a/hw/xfree86/xorgconf.cpp b/hw/xfree86/xorgconf.cpp
index c94c1e5..6c52213 100644
--- a/hw/xfree86/xorgconf.cpp
+++ b/hw/xfree86/xorgconf.cpp
@@ -54,12 +54,9 @@ XCOMM command (or a combination of both 
 
     FontPath	LOCALFONTPATH
     FontPath	MISCFONTPATH
-    FontPath	DPI75USFONTPATH
-    FontPath	DPI100USFONTPATH
     FontPath	T1FONTPATH
-    FontPath    TRUETYPEFONTPATH
+    FontPath	TRUETYPEFONTPATH
     FontPath	CIDFONTPATH
-    FontPath	SPFONTPATH
     FontPath	DPI75FONTPATH
     FontPath	DPI100FONTPATH
 
diff-tree 357b37b3826fa6e9878c0bd895164259c2ed3c0d (from 5eca750fe2f3f243fb352271ad8da196af0cb16a)
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Wed Oct 18 18:11:06 2006 -0700

    Use getisax() instead of asm code to determine available x86 ISA extensions on Solaris

diff --git a/configure.ac b/configure.ac
index 444dd4c..693da13 100644
--- a/configure.ac
+++ b/configure.ac
@@ -82,7 +82,8 @@ AC_TYPE_PID_T
 dnl Checks for library functions.
 AC_FUNC_VPRINTF
 AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp strchr strrchr \
-		strtol getopt getopt_long vsnprintf walkcontext backtrace])
+		strtol getopt getopt_long vsnprintf walkcontext backtrace \
+		getisax])
 AC_FUNC_ALLOCA
 dnl Old HAS_* names used in os/*.c.
 AC_CHECK_FUNC([getdtablesize],
diff --git a/fb/fbpict.c b/fb/fbpict.c
index eb305b9..d839994 100644
--- a/fb/fbpict.c
+++ b/fb/fbpict.c
@@ -1435,6 +1435,10 @@ fbPictureInit (ScreenPtr pScreen, PictFo
  */
 #if !defined(__amd64__) && !defined(__x86_64__)
 
+#ifdef HAVE_GETISAX
+#include <sys/auxv.h>
+#endif
+
 enum CPUFeatures {
     NoFeatures = 0,
     MMX = 0x1,
@@ -1445,7 +1449,23 @@ enum CPUFeatures {
 };
 
 static unsigned int detectCPUFeatures(void) {
+    unsigned int features = 0;
     unsigned int result;
+
+#ifdef HAVE_GETISAX
+    if (getisax(&result, 1)) {
+        if (result & AV_386_CMOV)
+            features |= CMOV;
+        if (result & AV_386_MMX)
+            features |= MMX;
+        if (result & AV_386_AMD_MMX)
+            features |= MMX_Extensions;
+        if (result & AV_386_SSE)
+            features |= SSE;
+        if (result & AV_386_SSE2)
+            features |= SSE2;
+    }
+#else
     char vendor[13];
     vendor[0] = 0;
     vendor[12] = 0;
@@ -1454,7 +1474,8 @@ static unsigned int detectCPUFeatures(vo
      * %esp here. We can't declare either one as clobbered
      * since they are special registers (%ebx is the "PIC
      * register" holding an offset to global data, %esp the
-     * stack pointer), so we need to make sure they have their+      * original values when we access the output operands.
+     * stack pointer), so we need to make sure they have their
+     * original values when we access the output operands.
      */
     __asm__ ("pushf\n"
              "pop %%eax\n"
@@ -1490,7 +1511,6 @@ static unsigned int detectCPUFeatures(vo
              : "%eax", "%ecx", "%edx"
         );
 
-    unsigned int features = 0;
     if (result) {
         /* result now contains the standard feature bits */
         if (result & (1 << 15))
@@ -1524,6 +1544,7 @@ static unsigned int detectCPUFeatures(vo
                 features |= MMX_Extensions;
         }
     }
+#endif /* HAVE_GETISAX */
     return features;
 }
 
diff --git a/include/dix-config.h.in b/include/dix-config.h.in
index 571a867..65c42e6 100644
--- a/include/dix-config.h.in
+++ b/include/dix-config.h.in
@@ -112,6 +112,9 @@
 /* Define to 1 if you have the `geteuid' function. */
 #undef HAVE_GETEUID
 
+/* Define to 1 if you have the `getisax' function. */
+#undef HAVE_GETISAX
+
 /* Define to 1 if you have the `getopt' function. */
 #undef HAVE_GETOPT
 
diff-tree 5eca750fe2f3f243fb352271ad8da196af0cb16a (from df979b75c8cd8a7e0566aea58031bb9b8f5cd3d3)
Author: Adam Jackson <ajax at benzedrine.nwnk.net>
Date:   Tue Oct 17 14:53:28 2006 -0400

    Stop building xorgcfg by default.

diff --git a/configure.ac b/configure.ac
index 7222106..444dd4c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1579,8 +1579,8 @@ AC_SUBST(XORGCONFIG_DEP_LIBS)
 
 dnl xorgcfg GUI configuration utility
 AC_ARG_ENABLE(xorgcfg, AS_HELP_STRING([--enable-xorgcfg], 
-	[Build xorgcfg GUI configuration utility (default: yes)]),
-	[XORGCFG=$enableval],[XORGCFG=yes])
+	[Build xorgcfg GUI configuration utility (default: no)]),
+	[XORGCFG=$enableval],[XORGCFG=no])
 if test x$XORGCFG = xyes ; then
 	PKG_CHECK_MODULES([XORGCFG_DEP], 
 	    [xkbui >= 1.0.2 xkbfile xxf86misc xxf86vm xaw7 xmu xt xpm xext x11])
diff-tree df979b75c8cd8a7e0566aea58031bb9b8f5cd3d3 (from d430e76a161c963169067875c3654f5fd8f42b19)
Author: Matthias Hopf <mhopf at suse.de>
Date:   Tue Oct 17 17:06:44 2006 +0200

    StorePixels() macro could create invalid  *x++=*x...  code - fixed.

diff --git a/cfb/cfbteblt8.c b/cfb/cfbteblt8.c
index 1db2996..9d4ce57 100644
--- a/cfb/cfbteblt8.c
+++ b/cfb/cfbteblt8.c
@@ -301,7 +301,7 @@ typedef unsigned int	*glyphPointer;
 #define StorePixels(o,p)    dst[o] = p
 #define Loop		    dst += widthDst;
 #else
-#define StorePixels(o,p)    *dst++ = (p)
+#define StorePixels(o,p)    do { *dst = (p); dst++; } while (0)
 #define Loop		    dst += widthLeft;
 #endif
 
diff-tree d430e76a161c963169067875c3654f5fd8f42b19 (from 3ad1642f1bbaa5f96558cdf3384b40f7122f8781)
Author: Alan Hourihane <alanh at fairlite.demon.co.uk>
Date:   Mon Oct 16 12:39:05 2006 +0100

    Small modification to blocking signals when switching modes.

diff --git a/hw/xfree86/common/xf86Cursor.c b/hw/xfree86/common/xf86Cursor.c
index 8bb12ae..dcdf466 100644
--- a/hw/xfree86/common/xf86Cursor.c
+++ b/hw/xfree86/common/xf86Cursor.c
@@ -213,7 +213,6 @@ xf86SwitchMode(ScreenPtr pScreen, Displa
   ScreenPtr   pCursorScreen;
   Bool        Switched;
   int         px, py;
-  int         sigstate;
 
   if (!pScr->vtSema || !mode || !pScr->SwitchMode)
     return FALSE;
@@ -233,10 +232,8 @@ xf86SwitchMode(ScreenPtr pScreen, Displa
   if (pScreen == pCursorScreen)
     miPointerPosition(&px, &py);
 
-  sigstate = xf86BlockSIGIO ();
   xf86EnterServerState(SETUP);
   Switched = (*pScr->SwitchMode)(pScr->scrnIndex, mode, 0);
-  xf86EnterServerState(OPERATING);
   if (Switched) {
     pScr->currentMode = mode;
 
@@ -271,7 +268,7 @@ xf86SwitchMode(ScreenPtr pScreen, Displa
       pScr->frameY1 = pScr->virtualY - 1;
     }
   }
-  xf86UnblockSIGIO (sigstate);
+  xf86EnterServerState(OPERATING);
 
   if (pScr->AdjustFrame)
     (*pScr->AdjustFrame)(pScr->scrnIndex, pScr->frameX0, pScr->frameY0, 0);
diff-tree 3ad1642f1bbaa5f96558cdf3384b40f7122f8781 (from f9bfee50981006a2c58d3f73e2b0d123bb2a41b7)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Sun Oct 15 16:57:09 2006 +0200

    Fix __glXDRIbindTexImage() for 32 bpp on big endian platforms.

diff --git a/GL/glx/glxdri.c b/GL/glx/glxdri.c
index b572304..170662c 100644
--- a/GL/glx/glxdri.c
+++ b/GL/glx/glxdri.c
@@ -359,7 +359,12 @@ __glXDRIbindTexImage(__GLXcontext *baseC
     if (pixmap->drawable.depth >= 24) {
 	bpp = 4;
 	format = GL_BGRA;
-	type = GL_UNSIGNED_BYTE;
+	type =
+#if X_BYTE_ORDER == X_LITTLE_ENDIAN
+	    GL_UNSIGNED_BYTE;
+#else
+	    GL_UNSIGNED_INT_8_8_8_8_REV;
+#endif
     } else {
 	bpp = 2;
 	format = GL_RGB;
diff-tree f9bfee50981006a2c58d3f73e2b0d123bb2a41b7 (from b9108a13fc126d97c0393f911a1d9292563444ce)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Sun Oct 15 16:48:59 2006 +0200

    Add per-drawable Xv colour key helper function.
    
    This allows overlay Xv adaptors to work slightly better with compositing
    managers.
    
    Bump the video driver ABI minor so drivers only need to check for this at build
    time.

diff --git a/hw/xfree86/common/xf86Module.h b/hw/xfree86/common/xf86Module.h
index f54be49..cf404fb 100644
--- a/hw/xfree86/common/xf86Module.h
+++ b/hw/xfree86/common/xf86Module.h
@@ -84,7 +84,7 @@ typedef enum {
  * mask is 0xFFFF0000.
  */
 #define ABI_ANSIC_VERSION	SET_ABI_VERSION(0, 3)
-#define ABI_VIDEODRV_VERSION	SET_ABI_VERSION(1, 0)
+#define ABI_VIDEODRV_VERSION	SET_ABI_VERSION(1, 1)
 #define ABI_XINPUT_VERSION	SET_ABI_VERSION(0, 6)
 #define ABI_EXTENSION_VERSION	SET_ABI_VERSION(0, 3)
 #define ABI_FONT_VERSION	SET_ABI_VERSION(0, 5)
diff --git a/hw/xfree86/common/xf86xv.c b/hw/xfree86/common/xf86xv.c
index 89cb6ba..3e908b8 100644
--- a/hw/xfree86/common/xf86xv.c
+++ b/hw/xfree86/common/xf86xv.c
@@ -974,6 +974,7 @@ xf86XVEnlistPortInWindow(WindowPtr pWin,
    if(!winPriv) {
 	winPriv = xalloc(sizeof(XF86XVWindowRec));
 	if(!winPriv) return BadAlloc;
+	memset(winPriv, 0, sizeof(XF86XVWindowRec));
 	winPriv->PortRec = portPriv;
 	winPriv->next = PrivRoot;
 	pWin->devPrivates[XF86XVWindowIndex].ptr = (pointer)winPriv;
@@ -1026,6 +1027,9 @@ xf86XVDestroyWindow(WindowPtr pWin)
 
      pPriv->pDraw = NULL;
      tmp = WinPriv;
+     if(WinPriv->pGC) {
+       FreeGC(WinPriv->pGC, 0);
+     }
      WinPriv = WinPriv->next;
      xfree(tmp);
   }
@@ -1118,6 +1122,8 @@ xf86XVClipNotify(WindowPtr pWin, int dx,
   while(WinPriv) {
      pPriv = WinPriv->PortRec;
 
+     if(!pPriv) goto next;
+ 
      if(pPriv->pCompositeClip && pPriv->FreeCompositeClip)
 	REGION_DESTROY(pScreen, pPriv->pCompositeClip);
 
@@ -1148,6 +1154,7 @@ xf86XVClipNotify(WindowPtr pWin, int dx,
 	}
      }
 
+next:
      pPrev = WinPriv;
      WinPriv = WinPriv->next;
   }
@@ -1739,9 +1746,13 @@ xf86XVPutImage(
      REGION_UNINIT(pScreen, &VPReg);
   }
 
-  if(portPriv->pDraw) {
+  /* If we are changing windows, unregister our port in the old window */
+  if(portPriv->pDraw && (portPriv->pDraw != pDraw))
      xf86XVRemovePortFromWindow((WindowPtr)(portPriv->pDraw), portPriv);
-  }
+
+  /* Register our port with the new window */
+  ret =  xf86XVEnlistPortInWindow((WindowPtr)pDraw, portPriv);
+  if(ret != Success) goto PUT_IMAGE_BAILOUT;
 
   if(!REGION_NOTEMPTY(pScreen, &ClipRegion)) {
      clippedAway = TRUE;
@@ -1772,7 +1783,6 @@ xf86XVPutImage(
   if((ret == Success) &&
 	(portPriv->AdaptorRec->flags & VIDEO_OVERLAID_IMAGES)) {
 
-     xf86XVEnlistPortInWindow((WindowPtr)pDraw, portPriv);
      portPriv->isOn = XV_ON;
      portPriv->pDraw = pDraw;
      portPriv->drw_x = drw_x;  portPriv->drw_y = drw_y;
@@ -1813,6 +1823,56 @@ xf86XVQueryImageAttributes(
 			format->id, width, height, pitches, offsets);
 }
 
+
+_X_EXPORT void
+xf86XVFillKeyHelperDrawable (DrawablePtr pDraw, CARD32 key, RegionPtr clipboxes)
+{
+   ScreenPtr pScreen = pDraw->pScreen;
+   WindowPtr pWin = (WindowPtr)pDraw;
+   XF86XVWindowPtr pPriv = GET_XF86XV_WINDOW(pWin);
+   GCPtr pGC = NULL;
+   XID pval[2];
+   BoxPtr pbox = REGION_RECTS(clipboxes);
+   int i, nbox = REGION_NUM_RECTS(clipboxes);
+   xRectangle *rects;
+
+   if(!xf86Screens[pScreen->myNum]->vtSema) return;
+
+   if(pPriv)
+      pGC = pPriv->pGC;
+
+   if(!pGC) {
+       int status;
+       pval[0] = key;
+       pval[1] = IncludeInferiors;
+       pGC = CreateGC(pDraw, GCForeground | GCSubwindowMode, pval, &status);
+       if(!pGC) return;
+       ValidateGC(pDraw, pGC);
+       if (pPriv) pPriv->pGC = pGC;
+   } else if (key != pGC->fgPixel){
+       pval[0] = key;
+       ChangeGC(pGC, GCForeground, pval);
+       ValidateGC(pDraw, pGC);
+   }
+
+   REGION_TRANSLATE(pDraw->pScreen, clipboxes, -pDraw->x, -pDraw->y);
+
+   rects = ALLOCATE_LOCAL(nbox * sizeof(xRectangle));
+
+   for(i = 0; i < nbox; i++, pbox++) {
+      rects[i].x = pbox->x1;
+      rects[i].y = pbox->y1;
+      rects[i].width = pbox->x2 - pbox->x1;
+      rects[i].height = pbox->y2 - pbox->y1;
+   }
+
+   (*pGC->ops->PolyFillRect)(pDraw, pGC, nbox, rects);
+
+   if (!pPriv) FreeGC(pGC, 0);
+
+   DEALLOCATE_LOCAL(rects);
+}
+
 _X_EXPORT void
 xf86XVFillKeyHelper (ScreenPtr pScreen, CARD32 key, RegionPtr clipboxes)
 {
diff --git a/hw/xfree86/common/xf86xv.h b/hw/xfree86/common/xf86xv.h
index e0feb57..817e2b9 100644
--- a/hw/xfree86/common/xf86xv.h
+++ b/hw/xfree86/common/xf86xv.h
@@ -232,6 +232,9 @@ void xf86XVFreeVideoAdaptorRec(XF86Video
 void
 xf86XVFillKeyHelper (ScreenPtr pScreen, CARD32 key, RegionPtr clipboxes);
 
+void
+xf86XVFillKeyHelperDrawable (DrawablePtr pDraw, CARD32 key, RegionPtr clipboxes);
+
 Bool
 xf86XVClipVideoHelper(
     BoxPtr dst,
diff --git a/hw/xfree86/common/xf86xvpriv.h b/hw/xfree86/common/xf86xvpriv.h
index ced0536..e716c9c 100644
--- a/hw/xfree86/common/xf86xvpriv.h
+++ b/hw/xfree86/common/xf86xvpriv.h
@@ -80,6 +80,7 @@ typedef struct {
 typedef struct _XF86XVWindowRec{
    XvPortRecPrivatePtr PortRec;
    struct _XF86XVWindowRec *next;
+   GCPtr pGC;
 } XF86XVWindowRec, *XF86XVWindowPtr;
 
 #endif  /* _XF86XVPRIV_H_ */
diff --git a/hw/xfree86/loader/xf86sym.c b/hw/xfree86/loader/xf86sym.c
index 69e11d5..a498ccc 100644
--- a/hw/xfree86/loader/xf86sym.c
+++ b/hw/xfree86/loader/xf86sym.c
@@ -625,6 +625,7 @@ _X_HIDDEN void *xfree86LookupTab[] = {
     SYMFUNC(xf86XVAllocateVideoAdaptorRec)
     SYMFUNC(xf86XVFreeVideoAdaptorRec)
     SYMFUNC(xf86XVFillKeyHelper)
+    SYMFUNC(xf86XVFillKeyHelperDrawable)
     SYMFUNC(xf86XVClipVideoHelper)
     SYMFUNC(xf86XVCopyYUV12ToPacked)
     SYMFUNC(xf86XVCopyPacked)
diff-tree b9108a13fc126d97c0393f911a1d9292563444ce (from cf948b7b04dfeb61a294889027b9a54f6b9b478e)
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Fri Oct 13 19:05:28 2006 -0700

    Make sure xorgcfg files are included even when dist made with --disable-xorgcfg

diff --git a/hw/xfree86/utils/xorgcfg/Makefile.am b/hw/xfree86/utils/xorgcfg/Makefile.am
index 73e4042..309ed5c 100644
--- a/hw/xfree86/utils/xorgcfg/Makefile.am
+++ b/hw/xfree86/utils/xorgcfg/Makefile.am
@@ -56,6 +56,7 @@ endif
 if NEED_STRLCAT
 STRL_SRCS = $(top_srcdir)/os/strlcat.c $(top_srcdir)/os/strlcpy.c
 endif
+endif BUILD_XORGCFG
 
 xorgcfg_SOURCES =	\
         accessx.c \
@@ -95,10 +96,7 @@ xorgcfg_SOURCES =	\
         xf86config.h \
 	$(STRL_SRCS)
 
-XBMdir = $(includedir)/X11/bitmaps
-XPMdir = $(includedir)/X11/pixmaps
-
-XBM_DATA = \
+BITMAPS = \
         card.xbm \
         keyboard.xbm \
         monitor.xbm \
@@ -112,7 +110,7 @@ XBM_DATA = \
         shorter.xbm \
         taller.xbm
 
-XPM_DATA = \
+PIXMAPS = \
         card.xpm \
         computer.xpm \
         keyboard.xpm \
@@ -122,6 +120,13 @@ XPM_DATA = \
 # Rules needed to cpp man page & app-defaults
 include $(top_srcdir)/cpprules.in
 
+if BUILD_XORGCFG
+XBMdir = $(includedir)/X11/bitmaps
+XPMdir = $(includedir)/X11/pixmaps
+
+XBM_DATA = $(BITMAPS)
+XPM_DATA = $(PIXMAPS)
+
 # App default files  (*.ad)
 
 appdefaultdir = @APPDEFAULTDIR@
@@ -146,7 +151,6 @@ appman_DATA = $(appman_PRE:man=@APP_MAN_
 
 all-local: $(appman_PRE) $(appman_DATA)
 
-EXTRA_DIST = $(XBM_DATA) $(XPM_DATA) XOrgCfg.pre xorgcfg.man.pre
 BUILT_SOURCES = $(appman_PRE)
 CLEANFILES = $(APPDEFAULTFILES) $(BUILT_SOURCES) $(appman_DATA)
 
@@ -156,4 +160,6 @@ SUFFIXES += .$(APP_MAN_SUFFIX) .man
 	-rm -f $@
 	$(LN_S) $< $@
 
-endif
+endif BUILD_XORGCFG
+
+EXTRA_DIST = $(BITMAPS) $(PIXMAPS) XOrgCfg.pre xorgcfg.man.pre



More information about the xorg-commit mailing list