6949755 keyboard accessibility, mouse keys are unusable
authorAlan Coopersmith <Alan.Coopersmith@Oracle.COM>
Wed, 19 May 2010 18:20:03 -0700
changeset 951 07bc323acba1
parent 950 f0247b47266e
child 952 a6e7000b9e48
6949755 keyboard accessibility, mouse keys are unusable
open-src/xserver/xorg/mousekeys.patch
open-src/xserver/xorg/patch-list
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/open-src/xserver/xorg/mousekeys.patch	Wed May 19 18:20:03 2010 -0700
@@ -0,0 +1,31 @@
+Temporary solution for https://bugs.freedesktop.org/show_bug.cgi?id=24856
+aka Sun bug 6949755: Mouse Keys are ununusable
+
+Ensures waitForUpdate is False before calling SetCursorPosition.
+Normally waitForUpdate is False when SilkenMouse is active, True
+when it's not.   When it's True, the mouse cursor position on
+screen is not updated immediately.
+
+This is more critical on Solaris, since we disabled SigIO, thus in turn
+disable SilkenMouse, due to the SSE2 vs. signal handler issues described in
+Sun bugs 6849925, 6859428, and 6879897.
+
+--- xkb/ddxFakeMtn.c	2010-01-14 17:11:32.000000000 -0800
++++ xkb/ddxFakeMtn.c	2010-05-19 16:21:52.593826378 -0700
+@@ -113,6 +113,15 @@ ScreenPtr	   pScreen, oldScreen;
+ 
+     if (pScreen != oldScreen)
+ 	NewCurrentScreen(inputInfo.pointer, pScreen, oldX, oldY);
+-    if (pScreen->SetCursorPosition)
++    if (pScreen->SetCursorPosition) {
++	Bool waitForUpdate;
++	miPointerScreenPtr pScreenPriv = GetScreenPrivate(pScreen);
++
++	OsBlockSignals();
++	waitForUpdate = pScreenPriv->waitForUpdate;
++	pScreenPriv->waitForUpdate = False;
+ 	(*pScreen->SetCursorPosition)(inputInfo.pointer, pScreen, oldX, oldY, TRUE);
++	pScreenPriv->waitForUpdate = waitForUpdate;
++	OsReleaseSignals();
++    }
+ }
--- a/open-src/xserver/xorg/patch-list	Wed May 19 13:41:09 2010 -0700
+++ b/open-src/xserver/xorg/patch-list	Wed May 19 18:20:03 2010 -0700
@@ -30,3 +30,4 @@
 6912996.patch
 6942816.patch
 getifaddrs.patch,-p1
+mousekeys.patch