> -static void
> +static Bool
> xf86CursorMoveCursor(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
> {
> xf86CursorScreenPtr ScreenPriv =
> (xf86CursorScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
> xf86CursorScreenKey);
> -
> + Bool ret;
> /* only update coordinate state for first sprite, otherwise we get jumps
> when removing a sprite. The second sprite is never HW rendered anyway
> */
> if (GetMaster(pDev, MASTER_POINTER) == inputInfo.pointer) {
> @@ -408,15 +414,25 @@ xf86CursorMoveCursor(DeviceIntPtr pDev, ScreenPtr
> pScreen, int x, int y)
> ScreenPriv->y = y;
>
> if (ScreenPriv->CursorToRestore)
> - xf86CursorSetCursor(pDev, pScreen, ScreenPriv->CursorToRestore,
> x,
> + ret = xf86CursorSetCursor(pDev, pScreen,
> ScreenPriv->CursorToRestore, x,
> y);
> else if (ScreenPriv->SWCursor)
> - (*ScreenPriv->spriteFuncs->MoveCursor) (pDev, pScreen, x, y);
> - else if (ScreenPriv->isUp)
> + if (input_in_sigio == 1)
> + ret = FALSE;
> + else
> + ret = (*ScreenPriv->spriteFuncs->MoveCursor) (pDev, pScreen,
> x, y);
> + else if (ScreenPriv->isUp) {
> xf86MoveCursor(pScreen, x, y);
> + ret = TRUE;
> + }
> + return ret;
> + }
> + else {
> + if (input_in_sigio)
> + return FALSE;
> + else
> + return (*ScreenPriv->spriteFuncs->MoveCursor) (pDev, pScreen, x,
> y);
> }
> - else
> - (*ScreenPriv->spriteFuncs->MoveCursor) (pDev, pScreen, x, y);
> }
Weird mix of 'return' and 'ret =' in this function. Pick one style please.
> - (*pScreenPriv->spriteFuncs->SetCursor)
> + ret = (*pScreenPriv->spriteFuncs->SetCursor)
> (pDev, pScreen, pPointer->pCursor, x, y);
> - pPointer->devx = x;
> - pPointer->devy = y;
> - pPointer->pSpriteCursor = pPointer->pCursor;
> - pPointer->pSpriteScreen = pScreen;
> + if (ret == FALSE) {
> + pPointer->devx = x;
> + pPointer->devy = y;
> + pPointer->pSpriteCursor = pPointer->pCursor;
> + pPointer->pSpriteScreen = pScreen;
> + }
Is 'ret == FALSE' correct here? Seems like you're updating the pointer
when the device *didn't* move the sprite?
> + ret = (*pScreenPriv->spriteFuncs->SetCursor) (pDev, pScreen,
> pCursor, x, y);
> + if (ret == TRUE) {
> + pPointer->devx = x;
> + pPointer->devy = y;
> + pPointer->pSpriteCursor = pPointer->pCursor;
> + }
This case updates it when the driver *does* move the sprite. I'm so confused.
Looks like a nice cleanup though.
--
[email protected]
pgpJxt3AinlVi.pgp
Description: PGP signature
_______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
