diff options
author | Dave Airlie <airlied@redhat.com> | 2012-05-29 15:33:32 +0100 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2012-05-29 15:33:32 +0100 |
commit | cbe403acc508905e6db0d8de5a7a4dbcacf34d2f (patch) | |
tree | a5b68c6a6ece1c3a06750feae228322d406c8c90 | |
parent | 6d33d6151b568021960dbbab0d72b468010f2977 (diff) |
mipointer: iterate across cursors on all slave screens as wellplatform-usb-hotplug-101
-rw-r--r-- | mi/mipointer.c | 85 |
1 files changed, 72 insertions, 13 deletions
diff --git a/mi/mipointer.c b/mi/mipointer.c index a56838ead..781a9941e 100644 --- a/mi/mipointer.c +++ b/mi/mipointer.c @@ -166,18 +166,18 @@ miPointerCloseScreen(ScreenPtr pScreen) } /* - * DIX/DDX interface routines + * wrappers for slave screens */ static Bool -miPointerRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor) +miPointerRealizeCursor_screen(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor) { SetupScreen(pScreen); return (*pScreenPriv->spriteFuncs->RealizeCursor) (pDev, pScreen, pCursor); } static Bool -miPointerUnrealizeCursor(DeviceIntPtr pDev, +miPointerUnrealizeCursor_screen(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor) { SetupScreen(pScreen); @@ -186,6 +186,67 @@ miPointerUnrealizeCursor(DeviceIntPtr pDev, } static Bool +miPointerRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor) +{ + Bool ret; + ScreenPtr iter; + + ret = miPointerRealizeCursor_screen(pDev, pScreen, pCursor); + xorg_list_for_each_entry(iter, &pScreen->output_slave_list, output_head) + ret = miPointerRealizeCursor_screen(pDev, iter, pCursor); + return ret; +} + +static Bool +miPointerUnrealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor) +{ + Bool ret; + ScreenPtr iter; + + ret = miPointerUnrealizeCursor_screen(pDev, pScreen, pCursor); + xorg_list_for_each_entry(iter, &pScreen->output_slave_list, output_head) + ret = miPointerUnrealizeCursor_screen(pDev, iter, pCursor); + return ret; +} + +static void +DoSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCurs, + int x, int y) +{ + ScreenPtr iter; + miPointerScreenPtr pScreenPriv; + + pScreenPriv = GetScreenPrivate(pScreen); + (*pScreenPriv->spriteFuncs->SetCursor)(pDev, pScreen, pCurs, x, y); + + xorg_list_for_each_entry(iter, &pScreen->output_slave_list, output_head) { + pScreenPriv = GetScreenPrivate(iter); + (*pScreenPriv->spriteFuncs->SetCursor)(pDev, iter, pCurs, x, y); + } +} + +static void +DoMoveCursor(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y) +{ + ScreenPtr iter; + miPointerScreenPtr pScreenPriv; + + pScreenPriv = GetScreenPrivate(pScreen); + (*pScreenPriv->spriteFuncs->MoveCursor)(pDev, pScreen, x, y); + + xorg_list_for_each_entry(iter, &pScreen->output_slave_list, output_head) { + pScreenPriv = GetScreenPrivate(iter); + (*pScreenPriv->spriteFuncs->MoveCursor)(pDev, iter, x, y); + } +} + + +/* + * DIX/DDX interface routines + */ + + +static Bool miPointerDisplayCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor) { miPointerPtr pPointer; @@ -424,16 +485,14 @@ miPointerUpdateSprite(DeviceIntPtr pDev) miPointerScreenPtr pOldPriv; pOldPriv = GetScreenPrivate(pPointer->pSpriteScreen); - if (pPointer->pCursor) { - (*pOldPriv->spriteFuncs->SetCursor) - (pDev, pPointer->pSpriteScreen, NullCursor, 0, 0); - } + if (pPointer->pCursor) + DoSetCursor(pDev, pPointer->pSpriteScreen, NullCursor, 0, 0); + (*pOldPriv->screenFuncs->CrossScreen) (pPointer->pSpriteScreen, FALSE); } (*pScreenPriv->screenFuncs->CrossScreen) (pScreen, TRUE); - (*pScreenPriv->spriteFuncs->SetCursor) - (pDev, pScreen, pPointer->pCursor, x, y); + DoSetCursor(pDev, pScreen, pPointer->pCursor, x, y); pPointer->devx = x; pPointer->devy = y; pPointer->pSpriteCursor = pPointer->pCursor; @@ -447,8 +506,8 @@ miPointerUpdateSprite(DeviceIntPtr pDev) if (!pCursor || (pCursor->bits->emptyMask && !pScreenPriv->showTransparent)) pCursor = NullCursor; - (*pScreenPriv->spriteFuncs->SetCursor) (pDev, pScreen, pCursor, x, y); - + DoSetCursor(pDev, pScreen, pCursor, x, y); + pPointer->devx = x; pPointer->devy = y; pPointer->pSpriteCursor = pPointer->pCursor; @@ -457,7 +516,7 @@ miPointerUpdateSprite(DeviceIntPtr pDev) pPointer->devx = x; pPointer->devy = y; if (pPointer->pCursor && !pPointer->pCursor->bits->emptyMask) - (*pScreenPriv->spriteFuncs->MoveCursor) (pDev, pScreen, x, y); + DoMoveCursor(pDev, pScreen, x, y); } } @@ -541,7 +600,7 @@ miPointerMoveNoEvent(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y) pPointer->devx = x; pPointer->devy = y; if (pPointer->pCursor && !pPointer->pCursor->bits->emptyMask) - (*pScreenPriv->spriteFuncs->MoveCursor) (pDev, pScreen, x, y); + DoMoveCursor(pDev, pScreen, x, y); } pPointer->x = x; |