diff --git a/dix/devices.c b/dix/devices.c index 927d16e8d..579203f1f 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -173,6 +173,11 @@ EnableDevice(DeviceIntPtr dev) dev->enabled = TRUE; *prev = dev->next; + if (IsPointerDevice(dev) && dev->isMPDev) + InitializeSprite(dev, GetCurrentRootWindow()); + else + PairDevices(NULL, inputInfo.pointer, dev); + for (prev = &inputInfo.devices; *prev; prev = &(*prev)->next) ; *prev = dev; @@ -221,11 +226,6 @@ ActivateDevice(DeviceIntPtr dev) SendEventToAllWindows(&dummyDev, DevicePresenceNotifyMask, (xEvent *) &ev, 1); - if (IsPointerDevice(dev) && dev->isMPDev) - InitializeSprite(dev, GetCurrentRootWindow()); - else - PairDevices(NULL, inputInfo.pointer, dev); - return ret; } @@ -448,7 +448,6 @@ InitAndStartDevices() PairDevices(NULL, GuessFreePointerDevice(), dev); } - return Success; } diff --git a/dix/events.c b/dix/events.c index dc9c4e507..c9b5a4f32 100644 --- a/dix/events.c +++ b/dix/events.c @@ -4290,6 +4290,11 @@ InitEvents() { spriteTraceSize = 32; spriteTrace = (WindowPtr *)xalloc(32*sizeof(WindowPtr)); + /* FIXME: spriteTrace[0] needs to be NULL, otherwise + * GetCurrentRootWindow() in EnableDevice() may return a invalid + * value. (whot) + */ + memset(spriteTrace, 0, 32 * sizeof(WindowPtr)); if (!spriteTrace) FatalError("failed to allocate spriteTrace"); }