--- /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