mi: handle sprite even for floating slave devices.

We still don't render it, but we accept all the other calls to update it's
internal state.
This commit is contained in:
Peter Hutterer 2008-05-22 23:24:29 +09:30
parent 0f15875a27
commit e0fbe404a4

View File

@ -50,7 +50,7 @@ _X_EXPORT DevPrivateKey miPointerScreenKey = &miPointerScreenKey;
static DevPrivateKey miPointerPrivKey = &miPointerPrivKey; static DevPrivateKey miPointerPrivKey = &miPointerPrivKey;
#define MIPOINTER(dev) \ #define MIPOINTER(dev) \
((DevHasCursor((dev))) ? \ ((DevHasCursor((dev)) || (!dev->isMaster && !dev->u.master)) ? \
(miPointerPtr)dixLookupPrivate(&(dev)->devPrivates, miPointerPrivKey): \ (miPointerPtr)dixLookupPrivate(&(dev)->devPrivates, miPointerPrivKey): \
(miPointerPtr)dixLookupPrivate(&(dev)->u.master->devPrivates, miPointerPrivKey)) (miPointerPtr)dixLookupPrivate(&(dev)->u.master->devPrivates, miPointerPrivKey))
@ -193,9 +193,6 @@ miPointerDisplayCursor (pDev, pScreen, pCursor)
{ {
miPointerPtr pPointer; miPointerPtr pPointer;
if (!pDev->isMaster && !pDev->u.master)
return FALSE;
/* return for keyboards */ /* return for keyboards */
if ((pDev->isMaster && !DevHasCursor(pDev)) || if ((pDev->isMaster && !DevHasCursor(pDev)) ||
(!pDev->isMaster && pDev->u.master && !DevHasCursor(pDev->u.master))) (!pDev->isMaster && pDev->u.master && !DevHasCursor(pDev->u.master)))
@ -217,9 +214,6 @@ miPointerConstrainCursor (pDev, pScreen, pBox)
{ {
miPointerPtr pPointer; miPointerPtr pPointer;
if (!pDev->isMaster && !pDev->u.master)
return;
pPointer = MIPOINTER(pDev); pPointer = MIPOINTER(pDev);
pPointer->limits = *pBox; pPointer->limits = *pBox;
@ -313,13 +307,13 @@ miPointerDeviceCleanup(pDev, pScreen)
DeviceIntPtr pDev; DeviceIntPtr pDev;
ScreenPtr pScreen; ScreenPtr pScreen;
{ {
if (DevHasCursor(pDev)) if (!pDev->isMaster && pDev->u.master)
{ return;
SetupScreen(pScreen);
(*pScreenPriv->spriteFuncs->DeviceCursorCleanup)(pDev, pScreen); SetupScreen(pScreen);
xfree(dixLookupPrivate(&pDev->devPrivates, miPointerPrivKey)); (*pScreenPriv->spriteFuncs->DeviceCursorCleanup)(pDev, pScreen);
dixSetPrivate(&pDev->devPrivates, miPointerPrivKey, NULL); xfree(dixLookupPrivate(&pDev->devPrivates, miPointerPrivKey));
} dixSetPrivate(&pDev->devPrivates, miPointerPrivKey, NULL);
} }
@ -334,8 +328,6 @@ miPointerWarpCursor (pDev, pScreen, x, y)
miPointerPtr pPointer; miPointerPtr pPointer;
BOOL changedScreen = FALSE; BOOL changedScreen = FALSE;
if (!pDev->isMaster && !pDev->u.master)
return;
pPointer = MIPOINTER(pDev); pPointer = MIPOINTER(pDev);
SetupScreen (pScreen); SetupScreen (pScreen);
@ -388,7 +380,7 @@ miPointerUpdateSprite (DeviceIntPtr pDev)
int x, y, devx, devy; int x, y, devx, devy;
miPointerPtr pPointer; miPointerPtr pPointer;
if (!pDev || !pDev->coreEvents || (!pDev->isMaster && !pDev->u.master)) if (!pDev || !pDev->coreEvents)
return; return;
pPointer = MIPOINTER(pDev); pPointer = MIPOINTER(pDev);
@ -477,10 +469,7 @@ miPointerSetScreen(DeviceIntPtr pDev, int screen_no, int x, int y)
{ {
miPointerScreenPtr pScreenPriv; miPointerScreenPtr pScreenPriv;
ScreenPtr pScreen; ScreenPtr pScreen;
miPointerPtr pPointer; miPointerPtr pPointer;
if (!pDev->isMaster && !pDev->u.master)
return;
pPointer = MIPOINTER(pDev); pPointer = MIPOINTER(pDev);
@ -502,10 +491,8 @@ miPointerCurrentScreen ()
_X_EXPORT ScreenPtr _X_EXPORT ScreenPtr
miPointerGetScreen(DeviceIntPtr pDev) miPointerGetScreen(DeviceIntPtr pDev)
{ {
if (!pDev || (!pDev->isMaster && !pDev->u.master)) miPointerPtr pPointer = MIPOINTER(pDev);
return NULL; return (pPointer) ? pPointer->pScreen : NULL;
return MIPOINTER(pDev)->pScreen;
} }
/* Move the pointer to x, y on the current screen, update the sprite, and /* Move the pointer to x, y on the current screen, update the sprite, and
@ -525,9 +512,6 @@ miPointerMoved (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y,
miPointerPtr pPointer; miPointerPtr pPointer;
SetupScreen(pScreen); SetupScreen(pScreen);
if (!pDev->isMaster && !pDev->u.master)
return;
pPointer = MIPOINTER(pDev); pPointer = MIPOINTER(pDev);
/* Hack: We mustn't call into ->MoveCursor for anything but the /* Hack: We mustn't call into ->MoveCursor for anything but the
@ -556,9 +540,6 @@ miPointerSetPosition(DeviceIntPtr pDev, int *x, int *y, unsigned long time)
ScreenPtr newScreen; ScreenPtr newScreen;
miPointerPtr pPointer; miPointerPtr pPointer;
if (!pDev->isMaster && !pDev->u.master)
return;
pPointer = MIPOINTER(pDev); pPointer = MIPOINTER(pDev);
pScreen = pPointer->pScreen; pScreen = pPointer->pScreen;
@ -613,12 +594,6 @@ miPointerPosition (int *x, int *y)
_X_EXPORT void _X_EXPORT void
miPointerGetPosition(DeviceIntPtr pDev, int *x, int *y) miPointerGetPosition(DeviceIntPtr pDev, int *x, int *y)
{ {
if (!pDev->isMaster && !pDev->u.master)
{
ErrorF("[mi] miPointerGetPosition called for floating device.\n");
return;
}
*x = MIPOINTER(pDev)->x; *x = MIPOINTER(pDev)->x;
*y = MIPOINTER(pDev)->y; *y = MIPOINTER(pDev)->y;
} }