summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2009-03-25 12:55:42 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2009-06-18 15:04:38 +1000
commit66089e9129a821cfb1983d3d35f41b975a52de5e (patch)
tree8ed1399f508ba97033edf51313263b0ecfbcb984
parentafa680e495622f521cae80563511c0d284f57551 (diff)
xfree86: fix SWCursor check in xf86CursorSetCursor.
Wrong check for inputInfo.pointer resulted in a SW cursor being rendered when the pointer left the screen (in a Xinerama setup). We must call the sprite rendering function if - SW cursors are enabled, or - The current device is not the VCP and not attached to the VCP. Reported-by: Gordon Yuan <GordonYuan@viatech.com.cn> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r--hw/xfree86/ramdac/xf86Cursor.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/hw/xfree86/ramdac/xf86Cursor.c b/hw/xfree86/ramdac/xf86Cursor.c
index b86655031..b474ff318 100644
--- a/hw/xfree86/ramdac/xf86Cursor.c
+++ b/hw/xfree86/ramdac/xf86Cursor.c
@@ -302,9 +302,10 @@ xf86CursorSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCurs,
if (pCurs == NullCursor) { /* means we're supposed to remove the cursor */
- if (ScreenPriv->SWCursor || pDev != inputInfo.pointer)
- (*ScreenPriv->spriteFuncs->SetCursor)(pDev, pScreen, NullCursor,
- x, y);
+ if (ScreenPriv->SWCursor ||
+ !(pDev == inputInfo.pointer || !IsMaster(pDev) &&
+ GetMaster(pDev->u.master, MASTER_POINTER) == inputInfo.pointer))
+ (*ScreenPriv->spriteFuncs->SetCursor)(pDev, pScreen, NullCursor, x, y);
else if (ScreenPriv->isUp) {
xf86SetCursor(pScreen, NullCursor, x, y);
ScreenPriv->isUp = FALSE;