dix: update CheckMotion to deal with DeviceEvents.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
8829d966a6
commit
3a02e538db
|
@ -930,14 +930,15 @@ ProcessOtherEvent(xEventPtr ev, DeviceIntPtr device, int count)
|
||||||
if (ret == DONT_PROCESS)
|
if (ret == DONT_PROCESS)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
nevents = ConvertBackToXI((InternalEvent*)ev, xE);
|
|
||||||
|
|
||||||
v = device->valuator;
|
v = device->valuator;
|
||||||
b = device->button;
|
b = device->button;
|
||||||
k = device->key;
|
k = device->key;
|
||||||
|
|
||||||
if (device->isMaster || !device->u.master)
|
if (device->isMaster || !device->u.master)
|
||||||
CheckMotion(xE, device);
|
CheckMotion(event, device);
|
||||||
|
|
||||||
|
nevents = ConvertBackToXI((InternalEvent*)ev, xE);
|
||||||
|
|
||||||
if (xE->u.u.type != DeviceValuator && xE->u.u.type != GenericEvent) {
|
if (xE->u.u.type != DeviceValuator && xE->u.u.type != GenericEvent) {
|
||||||
GetSpritePosition(device, &rootX, &rootY);
|
GetSpritePosition(device, &rootX, &rootY);
|
||||||
|
|
43
dix/events.c
43
dix/events.c
|
@ -2493,35 +2493,24 @@ XYToWindow(DeviceIntPtr pDev, int x, int y)
|
||||||
* @return TRUE if the sprite has moved or FALSE otherwise.
|
* @return TRUE if the sprite has moved or FALSE otherwise.
|
||||||
*/
|
*/
|
||||||
Bool
|
Bool
|
||||||
CheckMotion(xEvent *xE, DeviceIntPtr pDev)
|
CheckMotion(DeviceEvent *ev, DeviceIntPtr pDev)
|
||||||
{
|
{
|
||||||
INT16 *rootX, *rootY;
|
|
||||||
WindowPtr prevSpriteWin;
|
WindowPtr prevSpriteWin;
|
||||||
SpritePtr pSprite = pDev->spriteInfo->sprite;
|
SpritePtr pSprite = pDev->spriteInfo->sprite;
|
||||||
|
|
||||||
prevSpriteWin = pSprite->win;
|
prevSpriteWin = pSprite->win;
|
||||||
|
|
||||||
if (xE && !syncEvents.playingEvents)
|
if (ev && !syncEvents.playingEvents)
|
||||||
{
|
{
|
||||||
/* GetPointerEvents() guarantees that pointer events have the correct
|
/* GetPointerEvents() guarantees that pointer events have the correct
|
||||||
rootX/Y set already. */
|
rootX/Y set already. */
|
||||||
switch(xE->u.u.type)
|
switch (ev->type)
|
||||||
{
|
{
|
||||||
case ButtonPress:
|
case ET_ButtonPress:
|
||||||
case ButtonRelease:
|
case ET_ButtonRelease:
|
||||||
case MotionNotify:
|
case ET_Motion:
|
||||||
rootX = &XE_KBPTR.rootX;
|
|
||||||
rootY = &XE_KBPTR.rootY;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (xE->u.u.type == DeviceButtonPress ||
|
|
||||||
xE->u.u.type == DeviceButtonRelease ||
|
|
||||||
xE->u.u.type == DeviceMotionNotify)
|
|
||||||
{
|
|
||||||
rootX = &((deviceKeyButtonPointer*)xE)->root_x;
|
|
||||||
rootY = &((deviceKeyButtonPointer*)xE)->root_y;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
/* all other events return FALSE */
|
/* all other events return FALSE */
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -2533,9 +2522,9 @@ CheckMotion(xEvent *xE, DeviceIntPtr pDev)
|
||||||
/* Motion events entering DIX get translated to Screen 0
|
/* Motion events entering DIX get translated to Screen 0
|
||||||
coordinates. Replayed events have already been
|
coordinates. Replayed events have already been
|
||||||
translated since they've entered DIX before */
|
translated since they've entered DIX before */
|
||||||
*rootX += panoramiXdataPtr[pSprite->screen->myNum].x -
|
ev->root_x += panoramiXdataPtr[pSprite->screen->myNum].x -
|
||||||
panoramiXdataPtr[0].x;
|
panoramiXdataPtr[0].x;
|
||||||
*rootY += panoramiXdataPtr[pSprite->screen->myNum].y -
|
ev->root_y += panoramiXdataPtr[pSprite->screen->myNum].y -
|
||||||
panoramiXdataPtr[0].y;
|
panoramiXdataPtr[0].y;
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
|
@ -2547,8 +2536,8 @@ CheckMotion(xEvent *xE, DeviceIntPtr pDev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pSprite->hot.x = *rootX;
|
pSprite->hot.x = ev->root_x;
|
||||||
pSprite->hot.y = *rootY;
|
pSprite->hot.y = ev->root_y;
|
||||||
if (pSprite->hot.x < pSprite->physLimits.x1)
|
if (pSprite->hot.x < pSprite->physLimits.x1)
|
||||||
pSprite->hot.x = pSprite->physLimits.x1;
|
pSprite->hot.x = pSprite->physLimits.x1;
|
||||||
else if (pSprite->hot.x >= pSprite->physLimits.x2)
|
else if (pSprite->hot.x >= pSprite->physLimits.x2)
|
||||||
|
@ -2561,8 +2550,8 @@ CheckMotion(xEvent *xE, DeviceIntPtr pDev)
|
||||||
ConfineToShape(pDev, pSprite->hotShape, &pSprite->hot.x, &pSprite->hot.y);
|
ConfineToShape(pDev, pSprite->hotShape, &pSprite->hot.x, &pSprite->hot.y);
|
||||||
pSprite->hotPhys = pSprite->hot;
|
pSprite->hotPhys = pSprite->hot;
|
||||||
|
|
||||||
if ((pSprite->hotPhys.x != *rootX) ||
|
if ((pSprite->hotPhys.x != ev->root_x) ||
|
||||||
(pSprite->hotPhys.y != *rootY))
|
(pSprite->hotPhys.y != ev->root_y))
|
||||||
{
|
{
|
||||||
#ifdef PANORAMIX
|
#ifdef PANORAMIX
|
||||||
if (!noPanoramiXExtension)
|
if (!noPanoramiXExtension)
|
||||||
|
@ -2578,8 +2567,8 @@ CheckMotion(xEvent *xE, DeviceIntPtr pDev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*rootX = pSprite->hot.x;
|
ev->root_x = pSprite->hot.x;
|
||||||
*rootY = pSprite->hot.y;
|
ev->root_y = pSprite->hot.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
pSprite->win = XYToWindow(pDev, pSprite->hot.x, pSprite->hot.y);
|
pSprite->win = XYToWindow(pDev, pSprite->hot.x, pSprite->hot.y);
|
||||||
|
@ -2587,7 +2576,7 @@ CheckMotion(xEvent *xE, DeviceIntPtr pDev)
|
||||||
if (pSprite->win != prevSpriteWin)
|
if (pSprite->win != prevSpriteWin)
|
||||||
{
|
{
|
||||||
if (prevSpriteWin != NullWindow) {
|
if (prevSpriteWin != NullWindow) {
|
||||||
if (!xE)
|
if (!ev)
|
||||||
UpdateCurrentTimeIf();
|
UpdateCurrentTimeIf();
|
||||||
DoEnterLeaveEvents(pDev, prevSpriteWin, pSprite->win,
|
DoEnterLeaveEvents(pDev, prevSpriteWin, pSprite->win,
|
||||||
NotifyNormal);
|
NotifyNormal);
|
||||||
|
@ -2609,7 +2598,7 @@ WindowsRestructured(void)
|
||||||
while(pDev)
|
while(pDev)
|
||||||
{
|
{
|
||||||
if (DevHasCursor(pDev))
|
if (DevHasCursor(pDev))
|
||||||
CheckMotion((xEvent *)NULL, pDev);
|
CheckMotion(NULL, pDev);
|
||||||
pDev = pDev->next;
|
pDev = pDev->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -466,7 +466,7 @@ extern _X_EXPORT int DeliverEvents(
|
||||||
|
|
||||||
extern _X_EXPORT Bool
|
extern _X_EXPORT Bool
|
||||||
CheckMotion(
|
CheckMotion(
|
||||||
xEvent* /* xE */,
|
DeviceEvent* /* ev */,
|
||||||
DeviceIntPtr /* pDev */);
|
DeviceIntPtr /* pDev */);
|
||||||
|
|
||||||
extern _X_EXPORT void WriteEventsToClient(
|
extern _X_EXPORT void WriteEventsToClient(
|
||||||
|
|
Loading…
Reference in New Issue