diff options
author | Alan Coopersmith <alan.coopersmith@oracle.com> | 2010-06-03 19:00:53 -0700 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2010-07-02 14:27:49 +1000 |
commit | 3d9079b898c432a87f9b95c1f39a85f660bf0858 (patch) | |
tree | e40067ee9cbdf8115134e848a17ed62c4e686c33 | |
parent | 69b2b5c85ec079ef49f84722daa5f148cedc2e1b (diff) |
Add API to update setting of waitForUpdate screen private in miPointer
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r-- | hw/xfree86/ramdac/xf86Cursor.c | 12 | ||||
-rw-r--r-- | mi/mipointer.c | 16 | ||||
-rw-r--r-- | mi/mipointer.h | 5 |
3 files changed, 25 insertions, 8 deletions
diff --git a/hw/xfree86/ramdac/xf86Cursor.c b/hw/xfree86/ramdac/xf86Cursor.c index e16b510ff..ec781aad8 100644 --- a/hw/xfree86/ramdac/xf86Cursor.c +++ b/hw/xfree86/ramdac/xf86Cursor.c @@ -245,8 +245,6 @@ xf86CursorSwitchMode(int index, DisplayModePtr mode, int flags) ScreenPtr pScreen = screenInfo.screens[index]; xf86CursorScreenPtr ScreenPriv = (xf86CursorScreenPtr)dixLookupPrivate( &pScreen->devPrivates, xf86CursorScreenKey); - miPointerScreenPtr PointPriv = (miPointerScreenPtr)dixLookupPrivate( - &pScreen->devPrivates, miPointerScreenKey); if (ScreenPriv->isUp) { xf86SetCursor(pScreen, NullCursor, ScreenPriv->x, ScreenPriv->y); @@ -261,7 +259,7 @@ xf86CursorSwitchMode(int index, DisplayModePtr mode, int flags) * ensure the cursor is repainted by miPointerWarpCursor(). */ ScreenPriv->CursorToRestore = ScreenPriv->CurrentCursor; - PointPriv->waitForUpdate = FALSE; /* Force cursor repaint */ + miPointerSetWaitForUpdate(pScreen, FALSE); /* Force cursor repaint */ return ret; } @@ -302,9 +300,6 @@ xf86CursorSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCurs, xf86CursorScreenPtr ScreenPriv = (xf86CursorScreenPtr)dixLookupPrivate( &pScreen->devPrivates, xf86CursorScreenKey); xf86CursorInfoPtr infoPtr = ScreenPriv->CursorInfoPtr; - miPointerScreenPtr PointPriv = (miPointerScreenPtr)dixLookupPrivate( - &pScreen->devPrivates, miPointerScreenKey); - if (pCurs == NullCursor) { /* means we're supposed to remove the cursor */ if (ScreenPriv->SWCursor || @@ -355,11 +350,12 @@ xf86CursorSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCurs, xf86SetCursor(pScreen, pCurs, x, y); ScreenPriv->SWCursor = FALSE; ScreenPriv->isUp = TRUE; - PointPriv->waitForUpdate = !infoPtr->pScrn->silkenMouse; + + miPointerSetWaitForUpdate(pScreen, !infoPtr->pScrn->silkenMouse); return; } - PointPriv->waitForUpdate = TRUE; + miPointerSetWaitForUpdate(pScreen, TRUE); if (ScreenPriv->isUp) { /* Remove the HW cursor, or make it transparent */ diff --git a/mi/mipointer.c b/mi/mipointer.c index 33bb40b89..9936a01f4 100644 --- a/mi/mipointer.c +++ b/mi/mipointer.c @@ -452,6 +452,22 @@ miPointerGetScreen(DeviceIntPtr pDev) return (pPointer) ? pPointer->pScreen : NULL; } +/* Controls whether the cursor image should be updated immediately when + moved (FALSE) or if something else will be responsible for updating + it later (TRUE). Returns current setting. + Caller is responsible for calling OsBlockSignal first. +*/ +Bool +miPointerSetWaitForUpdate(ScreenPtr pScreen, Bool wait) +{ + SetupScreen(pScreen); + Bool prevWait = pScreenPriv->waitForUpdate; + + pScreenPriv->waitForUpdate = wait; + return prevWait; +} + + /* Move the pointer on the current screen, and update the sprite. */ static void miPointerMoved (DeviceIntPtr pDev, ScreenPtr pScreen, diff --git a/mi/mipointer.h b/mi/mipointer.h index de58c07f4..3c8611022 100644 --- a/mi/mipointer.h +++ b/mi/mipointer.h @@ -139,6 +139,11 @@ extern _X_EXPORT void miPointerSetPosition( extern _X_EXPORT void miPointerUpdateSprite( DeviceIntPtr pDev); +/* Sets whether the sprite should be updated immediately on pointer moves */ +extern _X_EXPORT Bool miPointerSetWaitForUpdate( + ScreenPtr pScreen, + Bool wait); + extern _X_EXPORT DevPrivateKeyRec miPointerPrivKeyRec; #define miPointerPrivKey (&miPointerPrivKeyRec) |