summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter@cs.unisa.edu.au>2007-03-01 17:19:37 +1030
committerPeter Hutterer <whot@hyena.localdomain>2007-03-01 17:19:37 +1030
commit43bd35fcf85b51b7e5714844bade90184dbd746f (patch)
tree76120c1a607fff3e0e1d7d65fc0ad7373fc28133
parent2a35d44b6d87f96a7ce90dc8f0142f48cc176e95 (diff)
dix: Remove InitSprite, work can be done by InitializeSprite.
Free sprite struct if a spriteOwner is paired. xfree86: Use PairDevices instead of passing booleans around when creating a sprite. Xext: Switch back to using LookupPointer/KeyboardDevice instead of inputInfo.xyz.
-rw-r--r--Xext/xtest.c8
-rwxr-xr-xautogen.sh2
-rw-r--r--dix/devices.c11
-rw-r--r--dix/events.c21
-rw-r--r--hw/xfree86/common/xf86Xinput.c6
-rw-r--r--hw/xfree86/os-support/linux/lnx_agp.c1
-rw-r--r--include/inputstr.h2
7 files changed, 38 insertions, 13 deletions
diff --git a/Xext/xtest.c b/Xext/xtest.c
index d46d6e7d9..cb7b5b83b 100644
--- a/Xext/xtest.c
+++ b/Xext/xtest.c
@@ -316,7 +316,7 @@ ProcXTestFakeInput(client)
#ifdef XINPUT
if (!extension)
#endif /* XINPUT */
- dev = inputInfo.keyboard;
+ dev = (DeviceIntPtr)LookupKeyboardDevice();
if (ev->u.u.detail < dev->key->curKeySyms.minKeyCode ||
ev->u.u.detail > dev->key->curKeySyms.maxKeyCode)
{
@@ -361,7 +361,7 @@ ProcXTestFakeInput(client)
}
#endif /* XINPUT */
if (!dev)
- dev = inputInfo.pointer;
+ dev = (DeviceIntPtr*)LookupPointerDevice();
if (ev->u.keyButtonPointer.root == None)
root = GetCurrentRootWindow();
else
@@ -427,7 +427,7 @@ ProcXTestFakeInput(client)
#ifdef PANORAMIX
if ((!noPanoramiXExtension
&& root->drawable.pScreen->myNum
- != XineramaGetCursorScreen(inputInfo.pointer))
+ != XineramaGetCursorScreen(dev))
|| (noPanoramiXExtension && root != GetCurrentRootWindow()))
#else
@@ -451,7 +451,7 @@ ProcXTestFakeInput(client)
#ifdef XINPUT
if (!extension)
#endif /* XINPUT */
- dev = inputInfo.pointer;
+ dev = (DeviceIntPtr*)LookupPointerDevice();
if (!ev->u.u.detail || ev->u.u.detail > dev->button->numButtons)
{
client->errorValue = ev->u.u.detail;
diff --git a/autogen.sh b/autogen.sh
index 904cd6746..1176abd5b 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -9,4 +9,4 @@ cd $srcdir
autoreconf -v --install || exit 1
cd $ORIGDIR || exit $?
-$srcdir/configure --enable-maintainer-mode "$@"
+$srcdir/configure --enable-maintainer-mode --disable-dmx "$@"
diff --git a/dix/devices.c b/dix/devices.c
index ad5cd5042..747d7822b 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -1937,14 +1937,21 @@ ProcQueryKeymap(ClientPtr client)
* pointer sprite.
*/
int
-PairDevices(ClientPtr client, DeviceIntPtr pointer, DeviceIntPtr keyboard)
+PairDevices(ClientPtr client, DeviceIntPtr ptr, DeviceIntPtr kbd)
{
if (!pairingClient)
RegisterPairingClient(client);
else if (pairingClient != client)
return BadAccess;
- keyboard->pSprite = pointer->pSprite;
+ if (kbd->spriteOwner)
+ {
+ xfree(kbd->pSprite);
+ kbd->pSprite = NULL;
+ kbd->spriteOwner = FALSE;
+ }
+
+ kbd->pSprite = ptr->pSprite;
return Success;
}
diff --git a/dix/events.c b/dix/events.c
index 5ea9a65c2..a1e72f187 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -240,7 +240,6 @@ static WindowPtr *spriteTrace = (WindowPtr *)NULL;
static int spriteTraceSize = 0;
static int spriteTraceGood;
-
/**
* True if device owns a cursor, false if device shares a cursor sprite with
* another device.
@@ -2212,8 +2211,16 @@ void
InitializeSprite(DeviceIntPtr pDev, WindowPtr pWin)
{
SpritePtr pSprite;
- ScreenPtr pScreen = pWin->drawable.pScreen;
+ ScreenPtr pScreen;
+
+ if (!pDev->pSprite)
+ {
+ pDev->pSprite = (SpritePtr)xcalloc(1, sizeof(SpriteRec));
+ if (!pDev->pSprite)
+ FatalError("InitializeSprite: failed to allocate sprite struct");
+ }
+ pScreen = (pWin) ? pWin->drawable.pScreen : (ScreenPtr)NULL;
pSprite = pDev->pSprite;
pSprite->hotPhys.pScreen = pScreen;
pSprite->hotPhys.x = pScreen->width / 2;
@@ -2222,8 +2229,12 @@ InitializeSprite(DeviceIntPtr pDev, WindowPtr pWin)
pSprite->hotLimits.x2 = pScreen->width;
pSprite->hotLimits.y2 = pScreen->height;
pSprite->win = pWin;
- pSprite->current = wCursor (pWin);
- pSprite->current->refcnt++;
+ if (pWin)
+ {
+ pSprite->current = wCursor(pWin);
+ pSprite->current->refcnt++;
+ } else
+ pSprite->current = NullCursor;
(*pScreen->CursorLimits) ( pDev, pScreen, pSprite->current,
&pSprite->hotLimits, &pSprite->physLimits);
@@ -2252,6 +2263,8 @@ InitializeSprite(DeviceIntPtr pDev, WindowPtr pWin)
REGION_NULL(pScreen, &pSprite->Reg2);
}
#endif
+
+ pDev->spriteOwner = TRUE;
}
/*
diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index 608fa9bb2..41118c043 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -187,7 +187,11 @@ xf86ActivateDevice(LocalDevicePtr local)
#endif
/* Only create a new sprite if it's a non-shared pointer */
- InitSprite(dev, IsPointerDevice(dev) && dev->isMPDev);
+ if (IsPointerDevice(dev) && dev->isMPDev)
+ InitializeSprite(pDev, NullWindow);
+ else
+ PairDevices(pairingClient, inputInfo.pointer, pDev);
+
RegisterOtherDevice(dev);
if (serverGeneration == 1)
diff --git a/hw/xfree86/os-support/linux/lnx_agp.c b/hw/xfree86/os-support/linux/lnx_agp.c
index ded9e0fae..300b08df6 100644
--- a/hw/xfree86/os-support/linux/lnx_agp.c
+++ b/hw/xfree86/os-support/linux/lnx_agp.c
@@ -10,6 +10,7 @@
#ifdef HAVE_XORG_CONFIG_H
#include <xorg-config.h>
+#include <linux/types.h>
#endif
#include <X11/X.h>
diff --git a/include/inputstr.h b/include/inputstr.h
index c4a2d1855..90a985b5f 100644
--- a/include/inputstr.h
+++ b/include/inputstr.h
@@ -355,7 +355,7 @@ typedef struct _DeviceIntRec {
int nPrivates;
DeviceUnwrapProc unwrapProc;
Bool isMPDev; /* TRUE if multipointer device */
- /* Each devices has a sprite. However, keyboards and shared pointers do
+ /* Each device has a sprite. However, keyboards and shared pointers do
not in fact own a sprite but rather have their pointer set to the
sprite of another device. pSprite always has to point to a valid
sprite. spriteOwner indicates whether it is the device's sprite. */