dix: when floating a device, create a new cursor sprite.
This is essentially necessary to allow calls to miPointerGetSprite etc. to work for floating slave devices.
This commit is contained in:
parent
e0fbe404a4
commit
1a3f351c50
|
@ -2415,6 +2415,7 @@ PairDevices(ClientPtr client, DeviceIntPtr ptr, DeviceIntPtr kbd)
|
||||||
int
|
int
|
||||||
AttachDevice(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr master)
|
AttachDevice(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr master)
|
||||||
{
|
{
|
||||||
|
ScreenPtr screen;
|
||||||
DeviceIntPtr oldmaster;
|
DeviceIntPtr oldmaster;
|
||||||
if (!dev || dev->isMaster)
|
if (!dev || dev->isMaster)
|
||||||
return BadDevice;
|
return BadDevice;
|
||||||
|
@ -2428,7 +2429,11 @@ AttachDevice(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr master)
|
||||||
|
|
||||||
/* free the existing sprite. */
|
/* free the existing sprite. */
|
||||||
if (!dev->u.master && dev->spriteInfo->paired == dev)
|
if (!dev->u.master && dev->spriteInfo->paired == dev)
|
||||||
|
{
|
||||||
|
screen = miPointerGetScreen(dev);
|
||||||
|
screen->DeviceCursorCleanup(dev, screen);
|
||||||
xfree(dev->spriteInfo->sprite);
|
xfree(dev->spriteInfo->sprite);
|
||||||
|
}
|
||||||
|
|
||||||
oldmaster = dev->u.master;
|
oldmaster = dev->u.master;
|
||||||
dev->u.master = master;
|
dev->u.master = master;
|
||||||
|
@ -2442,10 +2447,14 @@ AttachDevice(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr master)
|
||||||
if (!master)
|
if (!master)
|
||||||
{
|
{
|
||||||
WindowPtr currentRoot = dev->spriteInfo->sprite->spriteTrace[0];
|
WindowPtr currentRoot = dev->spriteInfo->sprite->spriteTrace[0];
|
||||||
|
/* we need to init a fake sprite */
|
||||||
|
screen = currentRoot->drawable.pScreen;
|
||||||
|
screen->DeviceCursorInitialize(dev, screen);
|
||||||
dev->spriteInfo->sprite = NULL;
|
dev->spriteInfo->sprite = NULL;
|
||||||
InitializeSprite(dev, currentRoot);
|
InitializeSprite(dev, currentRoot);
|
||||||
dev->spriteInfo->spriteOwner = FALSE;
|
dev->spriteInfo->spriteOwner = FALSE;
|
||||||
dev->spriteInfo->paired = dev;
|
dev->spriteInfo->paired = dev;
|
||||||
|
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
dev->spriteInfo->sprite = master->spriteInfo->sprite;
|
dev->spriteInfo->sprite = master->spriteInfo->sprite;
|
||||||
|
|
Loading…
Reference in New Issue