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.
This commit is contained in:
Peter Hutterer 2007-03-01 17:19:37 +10:30 committed by Peter Hutterer
parent 2a35d44b6d
commit 43bd35fcf8
7 changed files with 38 additions and 13 deletions

View File

@ -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;

View File

@ -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 "$@"

View File

@ -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;
}

View File

@ -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;
}
/*

View File

@ -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)

View File

@ -10,6 +10,7 @@
#ifdef HAVE_XORG_CONFIG_H
#include <xorg-config.h>
#include <linux/types.h>
#endif
#include <X11/X.h>

View File

@ -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. */