---
 xserver/hw/xwin/InitInput.c |    5 ++---
 xserver/hw/xwin/wincursor.c |   33 ++++++++++++++++++++++++---------
 2 files changed, 26 insertions(+), 12 deletions(-)

Index: xorg-git/xserver/hw/xwin/InitInput.c
===================================================================
--- xorg-git.orig/xserver/hw/xwin/InitInput.c
+++ xorg-git/xserver/hw/xwin/InitInput.c
@@ -94,7 +94,6 @@ ProcessInputEvents (void)
 #endif
 
   mieqProcessInputEvents ();
-  miPointerUpdate ();
 
 #if 0
   ErrorF ("ProcessInputEvents - returning\n");
@@ -145,8 +144,8 @@ InitInput (int argc, char *argv[])
     }
 #endif
 
-  pMouse = AddInputDevice (winMouseProc, TRUE);
-  pKeyboard = AddInputDevice (winKeybdProc, TRUE);
+  pMouse = AddInputDevice (serverClient, winMouseProc, TRUE);
+  pKeyboard = AddInputDevice (serverClient, winKeybdProc, TRUE);
   
   RegisterPointerDevice (pMouse);
   RegisterKeyboardDevice (pKeyboard);
Index: xorg-git/xserver/hw/xwin/wincursor.c
===================================================================
--- xorg-git.orig/xserver/hw/xwin/wincursor.c
+++ xorg-git/xserver/hw/xwin/wincursor.c
@@ -62,7 +62,7 @@ extern Bool	g_fSoftwareCursor;
  */
 
 static void
-winPointerWarpCursor (ScreenPtr pScreen, int x, int y);
+winPointerWarpCursor (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y);
 
 static Bool
 winCursorOffScreen (ScreenPtr *ppScreen, int *x, int *y);
@@ -79,7 +79,7 @@ miPointerScreenFuncRec g_winPointerCurso
 
 
 static void
-winPointerWarpCursor (ScreenPtr pScreen, int x, int y)
+winPointerWarpCursor (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
 {
   winScreenPriv(pScreen);
   RECT			rcClient;
@@ -119,7 +119,7 @@ winPointerWarpCursor (ScreenPtr pScreen,
     }
 
   /* Call the mi warp procedure to do the actual warping in X. */
-  miPointerWarpCursor (pScreen, x, y);
+  miPointerWarpCursor (inputInfo.pointer, pScreen, x, y);
 }
 
 static Bool
@@ -437,7 +437,7 @@ winLoadCursor (ScreenPtr pScreen, Cursor
  *  Convert the X cursor representation to native format if possible.
  */
 static Bool
-winRealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
+winRealizeCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)
 {
   if(pCursor == NULL || pCursor->bits == NULL)
     return FALSE;
@@ -453,7 +453,7 @@ winRealizeCursor (ScreenPtr pScreen, Cur
  *  Free the storage space associated with a realized cursor.
  */
 static Bool
-winUnrealizeCursor(ScreenPtr pScreen, CursorPtr pCursor)
+winUnrealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)
 {
   return TRUE;
 }
@@ -464,7 +464,7 @@ winUnrealizeCursor(ScreenPtr pScreen, Cu
  *  Set the cursor sprite and position.
  */
 static void
-winSetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y)
+winSetCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor, int x, int y)
 {
   POINT ptCurPos, ptTemp;
   HWND  hwnd;
@@ -538,20 +538,35 @@ winSetCursor (ScreenPtr pScreen, CursorP
 
 
 /*
- * QuartzMoveCursor
+ * winMoveCursor
  *  Move the cursor. This is a noop for us.
  */
 static void
-winMoveCursor (ScreenPtr pScreen, int x, int y)
+winMoveCursor (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
 {
 }
 
+static Bool
+winDeviceCursorInitialize(DeviceIntPtr pDev, ScreenPtr pScr)
+{
+  winScreenPriv(pScr);
+  return pScreenPriv->cursor.spriteFuncs->DeviceCursorInitialize(pDev, pScr);
+}
+
+static void
+winDeviceCursorCleanup(DeviceIntPtr pDev, ScreenPtr pScr)
+{
+  winScreenPriv(pScr);
+  return pScreenPriv->cursor.spriteFuncs->DeviceCursorCleanup(pDev, pScr);
+}
 
 static miPointerSpriteFuncRec winSpriteFuncsRec = {
   winRealizeCursor,
   winUnrealizeCursor,
   winSetCursor,
-  winMoveCursor
+  winMoveCursor,
+  winDeviceCursorInitialize,
+  winDeviceCursorCleanup
 };
 
 

-- 

