diff --git a/render/animcur.c b/render/animcur.c index 485c068..2804037 100644 --- a/render/animcur.c +++ b/render/animcur.c @@ -191,27 +191,31 @@ AnimCurScreenBlockHandler(int screenNum, } static Bool -AnimCurDisplayCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor) +AnimCurDisplayCursor(DeviceIntPtr pDev, + ScreenPtr pScreen, + CursorPtr pCursor) { AnimCurScreenPtr as = GetAnimCurScreen(pScreen); Bool ret; + DeviceIntPtr pMasterDev = pDev->type == MASTER_POINTER ? pDev : pDev->master; if (IsFloating(pDev)) return FALSE; + if (!pMasterDev) + return FALSE; Unwrap(as, pScreen, DisplayCursor); if (IsAnimCur(pCursor)) { - if (pCursor != pDev->spriteInfo->anim.pCursor) { + if (pCursor != pMasterDev->spriteInfo->anim.pCursor) { AnimCurPtr ac = GetAnimCur(pCursor); ret = (*pScreen->DisplayCursor) (pDev, pScreen, ac->elts[0].pCursor); if (ret) { - pDev->spriteInfo->anim.elt = 0; - pDev->spriteInfo->anim.time = - GetTimeInMillis() + ac->elts[0].delay; - pDev->spriteInfo->anim.pCursor = pCursor; - pDev->spriteInfo->anim.pScreen = pScreen; + pMasterDev->spriteInfo->anim.elt = 0; + pMasterDev->spriteInfo->anim.time = GetTimeInMillis () + ac->elts[0].delay; + pMasterDev->spriteInfo->anim.pCursor = pCursor; + pMasterDev->spriteInfo->anim.pScreen = pScreen; if (!as->BlockHandler) Wrap(as, pScreen, BlockHandler, AnimCurScreenBlockHandler); @@ -221,8 +225,8 @@ AnimCurDisplayCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor) ret = TRUE; } else { - pDev->spriteInfo->anim.pCursor = 0; - pDev->spriteInfo->anim.pScreen = 0; + pMasterDev->spriteInfo->anim.pCursor = 0; + pMasterDev->spriteInfo->anim.pScreen = 0; ret = (*pScreen->DisplayCursor) (pDev, pScreen, pCursor); } Wrap(as, pScreen, DisplayCursor, AnimCurDisplayCursor);