6850903 Cursor on inactive screen not erased
authorAlan Coopersmith <Alan.Coopersmith@Sun.COM>
Fri, 26 Jun 2009 15:04:57 -0700
changeset 735 35e72c38b3b4
parent 734 b4f632294aee
child 736 cae13d718dad
6850903 Cursor on inactive screen not erased
open-src/xserver/xorg/patch-list
open-src/xserver/xorg/xinerama-cursors.patch
--- a/open-src/xserver/xorg/patch-list	Fri Jun 26 13:58:56 2009 -0700
+++ b/open-src/xserver/xorg/patch-list	Fri Jun 26 15:04:57 2009 -0700
@@ -1,4 +1,5 @@
 upstream-1.6.2.patch,-p1
+xinerama-cursors.patch,-p1
 xkb-defaults.patch,-p1
 xkb-defaults-compat.patch
 constify-atom-strings.patch,-p1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/open-src/xserver/xorg/xinerama-cursors.patch	Fri Jun 26 15:04:57 2009 -0700
@@ -0,0 +1,37 @@
+From 3323f7ac880d5a8261d5b22059374fc9de8ca683 Mon Sep 17 00:00:00 2001
+From: Peter Hutterer <[email protected]>
+Date: Wed, 25 Mar 2009 12:55:42 +1000
+Subject: [PATCH] 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 <[email protected]>
+Signed-off-by: Peter Hutterer <[email protected]>
+---
+ hw/xfree86/ramdac/xf86Cursor.c |    6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/hw/xfree86/ramdac/xf86Cursor.c b/hw/xfree86/ramdac/xf86Cursor.c
+index 2b73b16..896ed37 100644
+--- a/hw/xfree86/ramdac/xf86Cursor.c
++++ b/hw/xfree86/ramdac/xf86Cursor.c
+@@ -302,9 +302,9 @@ 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 || !pDev->isMaster && pDev->u.master == inputInfo.pointer))
++                (*ScreenPriv->spriteFuncs->SetCursor)(pDev, pScreen, NullCursor, x, y);
+         else if (ScreenPriv->isUp) {
+             xf86SetCursor(pScreen, NullCursor, x, y);
+             ScreenPriv->isUp = FALSE;
+-- 
+1.6.0.6
+