Sophie

Sophie

distrib > Mandriva > 2009.1 > i586 > media > main-release-src > by-pkgid > ed850f9ceda4826f28781585a4806f28 > files > 8

x11-server-1.6.1-1mdv2009.1.src.rpm

From 0935c4973fdff0db5167a5a722e06a7910bad08c Mon Sep 17 00:00:00 2001
From: Ander Conselvan de Oliveira <ander@mandriva.com.br>
Date: Mon, 12 Jan 2009 17:33:28 -0200
Subject: [PATCH 701/705] Fix for X server 1.6 input interface changes

---
 hw/vnc/cursor.c          |    2 +-
 hw/vnc/cutpaste.c        |    2 +-
 hw/vnc/dispcur.c         |   51 ++++++++++++++++++++++++++++++----------
 hw/vnc/init.c            |   12 ++++-----
 hw/vnc/kbdptr.c          |   22 ++++++++--------
 hw/vnc/rfb.h             |    3 ++
 hw/vnc/rfbmouse.c        |    1 -
 hw/vnc/rfbserver.c       |    5 ++-
 hw/vnc/sprite.c          |   58 ++++++++++++++++++++++++++++++++-------------
 hw/vnc/sprite.h          |   15 ++++++++++++
 hw/vnc/vncext.c          |   12 ++++----
 hw/xfree86/vnc/vncInit.c |   32 +++++++++++++------------
 12 files changed, 141 insertions(+), 74 deletions(-)

diff --git a/hw/vnc/cursor.c b/hw/vnc/cursor.c
index d355e03..955c780 100644
--- a/hw/vnc/cursor.c
+++ b/hw/vnc/cursor.c
@@ -262,7 +262,7 @@ rfbSendCursorPos(cl, pScreen)
 
 #if XFREE86VNC
     if (pScreen == pCursorScreen) 
-        miPointerPosition(&x, &y);
+        miPointerGetPosition(ptrDevice, &x, &y);
 #else
     rfbSpriteGetCursorPos(pScreen, &x, &y);
 #endif
diff --git a/hw/vnc/cutpaste.c b/hw/vnc/cutpaste.c
index 6f57aca..4bb3184 100644
--- a/hw/vnc/cutpaste.c
+++ b/hw/vnc/cutpaste.c
@@ -66,7 +66,7 @@ rfbSetXCutText(char *str, int len)
 	    event.u.selectionClear.time = GetTimeInMillis();
 	    event.u.selectionClear.window = pSel->window;
 	    event.u.selectionClear.atom = pSel->selection;
-	    (void) TryClientEvents (pSel->client, &event, 1,
+	    (void) TryClientEvents (pSel->client, NULL, &event, 1,
 				NoEventMask, NoEventMask /* CantBeFiltered */,
 				NullGrab);
 	}
diff --git a/hw/vnc/dispcur.c b/hw/vnc/dispcur.c
index 0ccf0a7..7f77c7d 100644
--- a/hw/vnc/dispcur.c
+++ b/hw/vnc/dispcur.c
@@ -106,18 +106,23 @@ typedef struct {
 
 static Bool	rfbDCRealizeCursor(ScreenPtr pScreen, CursorPtr pCursor);
 static Bool	rfbDCUnrealizeCursor(ScreenPtr pScreen, CursorPtr pCursor);
-static Bool	rfbDCPutUpCursor(ScreenPtr pScreen, CursorPtr pCursor,
+static Bool	rfbDCPutUpCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
+				 CursorPtr pCursor,
 				int x, int y, unsigned long source,
 				unsigned long mask);
-static Bool	rfbDCSaveUnderCursor(ScreenPtr pScreen, int x, int y,
-				    int w, int h);
-static Bool	rfbDCRestoreUnderCursor(ScreenPtr pScreen, int x, int y,
-				       int w, int h);
-static Bool	rfbDCMoveCursor(ScreenPtr pScreen, CursorPtr pCursor,
+static Bool	rfbDCSaveUnderCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
+				     int x, int y, int w, int h);
+static Bool	rfbDCRestoreUnderCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
+					int x, int y, int w, int h);
+static Bool	rfbDCMoveCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
+				CursorPtr pCursor,
 			       int x, int y, int w, int h, int dx, int dy,
 			       unsigned long source, unsigned long mask);
-static Bool	rfbDCChangeSave(ScreenPtr pScreen, int x, int y, int w, int h,	
-			       int dx, int dy);
+static Bool	rfbDCChangeSave(DeviceIntPtr pDev, ScreenPtr pScreen,
+				int x, int y, int w, int h, int dx, int dy);
+static Bool	rfbDCDeviceCursorInitialize(DeviceIntPtr pDev,
+					    ScreenPtr pScreen);
+static void	rfbDCDeviceCursorCleanup(DeviceIntPtr pDev, ScreenPtr pScreen);
 
 static rfbSpriteCursorFuncRec rfbDCFuncs = {
     rfbDCRealizeCursor,
@@ -127,6 +132,8 @@ static rfbSpriteCursorFuncRec rfbDCFuncs = {
     rfbDCRestoreUnderCursor,
     rfbDCMoveCursor,
     rfbDCChangeSave,
+    rfbDCDeviceCursorInitialize,
+    rfbDCDeviceCursorCleanup,
 };
 
 Bool
@@ -428,7 +435,8 @@ rfbDCMakeGC(GCPtr *ppGC, WindowPtr pWin)
 }
 
 static Bool
-rfbDCPutUpCursor (pScreen, pCursor, x, y, source, mask)
+rfbDCPutUpCursor (pDev, pScreen, pCursor, x, y, source, mask)
+    DeviceIntPtr    pDev;
     ScreenPtr	    pScreen;
     CursorPtr	    pCursor;
     int		    x, y;
@@ -483,7 +491,8 @@ rfbDCPutUpCursor (pScreen, pCursor, x, y, source, mask)
 }
 
 static Bool
-rfbDCSaveUnderCursor (pScreen, x, y, w, h)
+rfbDCSaveUnderCursor (pDev, pScreen, x, y, w, h)
+    DeviceIntPtr    pDev;
     ScreenPtr	pScreen;
     int		x, y, w, h;
 {
@@ -516,7 +525,8 @@ rfbDCSaveUnderCursor (pScreen, x, y, w, h)
 }
 
 static Bool
-rfbDCRestoreUnderCursor (pScreen, x, y, w, h)
+rfbDCRestoreUnderCursor (pDev, pScreen, x, y, w, h)
+    DeviceIntPtr    pDev;
     ScreenPtr	pScreen;
     int		x, y, w, h;
 {
@@ -542,7 +552,8 @@ rfbDCRestoreUnderCursor (pScreen, x, y, w, h)
 }
 
 static Bool
-rfbDCChangeSave (pScreen, x, y, w, h, dx, dy)
+rfbDCChangeSave (pDev, pScreen, x, y, w, h, dx, dy)
+    DeviceIntPtr    pDev;
     ScreenPtr	    pScreen;
     int		    x, y, w, h, dx, dy;
 {
@@ -675,7 +686,8 @@ rfbDCChangeSave (pScreen, x, y, w, h, dx, dy)
 }
 
 static Bool
-rfbDCMoveCursor (pScreen, pCursor, x, y, w, h, dx, dy, source, mask)
+rfbDCMoveCursor (pDev, pScreen, pCursor, x, y, w, h, dx, dy, source, mask)
+    DeviceIntPtr    pDev;
     ScreenPtr	    pScreen;
     CursorPtr	    pCursor;
     int		    x, y, w, h, dx, dy;
@@ -790,3 +802,16 @@ rfbDCMoveCursor (pScreen, pCursor, x, y, w, h, dx, dy, source, mask)
 			    0, 0, w, h, x, y);
     return TRUE;
 }
+
+static Bool
+rfbDCDeviceCursorInitialize (DeviceIntPtr pDev, ScreenPtr pScreen)
+{
+    return TRUE;
+}
+
+static void
+rfbDCDeviceCursorCleanup (DeviceIntPtr pDev, ScreenPtr pScreen)
+{
+    return;
+}
+
diff --git a/hw/vnc/init.c b/hw/vnc/init.c
index a166358..be9ffb3 100644
--- a/hw/vnc/init.c
+++ b/hw/vnc/init.c
@@ -138,7 +138,7 @@ static void rfbCrossScreen(ScreenPtr pScreen, Bool entering);
 
 
 static void
-PointerWarpCursor(ScreenPtr pScreen, int x, int y)
+PointerWarpCursor(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
 {
 #if 0
    DeviceIntPtr pDev = NULL;
@@ -774,11 +774,10 @@ InitInput(argc, argv)
     int argc;
     char *argv[];
 {
-    DeviceIntPtr p, k;
-    k = AddInputDevice(rfbKeybdProc, TRUE);
-    p = AddInputDevice(rfbMouseProc, TRUE);
-    RegisterKeyboardDevice(k);
-    RegisterPointerDevice(p);
+    kbdDevice = AddInputDevice(serverClient, rfbKeybdProc, TRUE);
+    ptrDevice = AddInputDevice(serverClient, rfbMouseProc, TRUE);
+    RegisterKeyboardDevice(kbdDevice);
+    RegisterPointerDevice(ptrDevice);
 
     mieqInit();
 
@@ -843,7 +842,6 @@ rfbMouseProc(pDevice, onoff)
 	map[4] = 4;
 	map[5] = 5;
 	InitPointerDeviceStruct(pDev, map, 5,
-                                GetMotionHistory,
 				PtrDeviceControl,
                                 GetMaximumEventsNum(), 2 /* numAxes */);
         vncSetPointerDevice(pDevice);
diff --git a/hw/vnc/kbdptr.c b/hw/vnc/kbdptr.c
index de31920..e5b7ee7 100644
--- a/hw/vnc/kbdptr.c
+++ b/hw/vnc/kbdptr.c
@@ -49,7 +49,7 @@
 
 static void vncXConvertCase(KeySym sym, KeySym *lower, KeySym *upper);
 
-static DeviceIntPtr ptrDevice = NULL, kbdDevice = NULL;
+DeviceIntPtr ptrDevice = NULL, kbdDevice = NULL;
 
 
 void
@@ -74,7 +74,7 @@ vncSetPointerDevice(DeviceIntPtr ptr)
 static void
 EnqueueMotion(DeviceIntPtr ptrDev, int x, int y)
 {
-   xEvent *events = (xEvent*) calloc(sizeof(xEvent),  GetMaximumEventsNum());
+   EventListPtr events;
    int detail = 0, valuators[2], nevents, i;
    valuators[0] = x;
    valuators[1] = y;
@@ -82,11 +82,11 @@ EnqueueMotion(DeviceIntPtr ptrDev, int x, int y)
       ErrorF("VNC: In EnqueueMotion() ptrDev=NULL\n");
       return;
    }
+   GetEventList(&events);
    nevents = GetPointerEvents(events, ptrDev, MotionNotify, detail,
                               POINTER_ABSOLUTE, 0, 2, valuators);
    for (i = 0; i < nevents; i++)
-      mieqEnqueue(ptrDev, events + i);
-   free(events);
+      mieqEnqueue(ptrDev, (events + i)->event);
 }
 #endif
 
@@ -94,33 +94,33 @@ EnqueueMotion(DeviceIntPtr ptrDev, int x, int y)
 static void
 EnqueueButton(DeviceIntPtr ptrDev, int type, int detail)
 {
-   xEvent *events = (xEvent*) calloc(sizeof(xEvent),  GetMaximumEventsNum());
+   EventListPtr events;
    int nevents, i;
    if (!ptrDev) {
       ErrorF("VNC: In EnqueueButton() ptrDev=NULL\n");
       return;
    }
+   GetEventList(&events);
    nevents = GetPointerEvents(events, ptrDev, type, detail,
                               POINTER_ABSOLUTE, 0, 0, NULL/*valuators*/);
    for (i = 0; i < nevents; i++)
-      mieqEnqueue(ptrDev, events + i);
-   free(events);
+      mieqEnqueue(ptrDev, (events + i)->event);
 }
 
 
 static void
 EnqueueKey(DeviceIntPtr kbdDev, int type, int detail)
 {
-   xEvent *events = (xEvent*) calloc(sizeof(xEvent),  GetMaximumEventsNum());
+   EventListPtr events;
    int nevents, i;
    if (!kbdDev) {
       ErrorF("VNC: In EnqueueKey() kbdDev=NULL\n");
       return;
    }
+   GetEventList(&events);
    nevents = GetKeyboardEvents(events, kbdDev, type, detail);
    for (i = 0; i < nevents; i++)
-      mieqEnqueue(kbdDev, events + i);
-   free(events);
+      mieqEnqueue(kbdDev, (events + i)->event);
 }
 
 
@@ -256,7 +256,7 @@ KbdAddEvent(Bool down, KeySym keySym, rfbClientPtr cl)
 		shiftMustBePressed = TRUE;
 	}
 
-	SendMappingNotify(MappingKeyboard, keyCode, 1, serverClient);
+	SendMappingNotify(kbdDevice, MappingKeyboard, keyCode, 1, serverClient);
 
 	ErrorF("KbdAddEvent: unknown KeySym 0x%x - allocating KeyCode %d\n",
 	       (int)keySym, keyCode);
diff --git a/hw/vnc/rfb.h b/hw/vnc/rfb.h
index 8a6d1ec..2077f96 100644
--- a/hw/vnc/rfb.h
+++ b/hw/vnc/rfb.h
@@ -582,6 +582,9 @@ extern void rfbGotXCutText(char *str, int len);
 extern Bool compatibleKbd;
 extern unsigned char ptrAcceleration;
 
+extern DeviceIntPtr ptrDevice;
+extern DeviceIntPtr kbdDevice;
+
 extern void PtrDeviceInit(void);
 extern void PtrDeviceOn(DeviceIntPtr pDev);
 extern void PtrDeviceOff(void);
diff --git a/hw/vnc/rfbmouse.c b/hw/vnc/rfbmouse.c
index 40e6ec6..ccbda94 100644
--- a/hw/vnc/rfbmouse.c
+++ b/hw/vnc/rfbmouse.c
@@ -120,7 +120,6 @@ xf86rfbMouseControlProc(DeviceIntPtr device, int onoff)
 	map[4] = 4;
 	map[5] = 5;
 	InitPointerDeviceStruct(pDev, map, 5, 
-                                func1,
 				PtrDeviceControl,
                                 (*func2)(), 2);
 	break;
diff --git a/hw/vnc/rfbserver.c b/hw/vnc/rfbserver.c
index b93087f..f22dedf 100644
--- a/hw/vnc/rfbserver.c
+++ b/hw/vnc/rfbserver.c
@@ -1122,8 +1122,9 @@ rfbProcessClientNormalMessage(cl)
 
 	{
 		int x, y;
-		miPointerPosition(&x, &y); /*XXX deprecated*/
-		(*pVNC->spriteFuncs->SetCursor)(cl->pScreen, pVNC->pCurs, x, y);
+		miPointerGetPosition(ptrDevice, &x, &y);
+		(*pVNC->spriteFuncs->SetCursor)(ptrDevice, cl->pScreen,
+						pVNC->pCurs, x, y);
 	}
 #endif
 
diff --git a/hw/vnc/sprite.c b/hw/vnc/sprite.c
index c1e8685..08bd7ac 100644
--- a/hw/vnc/sprite.c
+++ b/hw/vnc/sprite.c
@@ -289,23 +289,33 @@ static GCOps rfbSpriteGCOps = {
  * pointer-sprite method table
  */
 
-static Bool rfbSpriteRealizeCursor (ScreenPtr pScreen, CursorPtr pCursor);
-static Bool rfbSpriteUnrealizeCursor (ScreenPtr pScreen, CursorPtr pCursor);
-static void rfbSpriteSetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y);
-static void rfbSpriteMoveCursor (ScreenPtr pScreen, int x, int y);
+static Bool rfbSpriteRealizeCursor (DeviceIntPtr pDev, ScreenPtr pScreen,
+				    CursorPtr pCursor);
+static Bool rfbSpriteUnrealizeCursor (DeviceIntPtr pDev, ScreenPtr pScreen,
+				      CursorPtr pCursor);
+static void rfbSpriteSetCursor (DeviceIntPtr pDev, ScreenPtr pScreen,
+				CursorPtr pCursor, int x, int y);
+static void rfbSpriteMoveCursor (DeviceIntPtr pDev, ScreenPtr pScreen,
+				 int x, int y);
+static Bool rfbSpriteDeviceCursorInitialize (DeviceIntPtr pDev,
+					     ScreenPtr pScreen);
+static void rfbSpriteDeviceCursorCleanup (DeviceIntPtr pDev, ScreenPtr pScreen);
 
 miPointerSpriteFuncRec rfbSpritePointerFuncs = {
     rfbSpriteRealizeCursor,
     rfbSpriteUnrealizeCursor,
     rfbSpriteSetCursor,
     rfbSpriteMoveCursor,
+    rfbSpriteDeviceCursorInitialize,
+    rfbSpriteDeviceCursorCleanup,
 };
 
 /*
  * other misc functions
  */
 
-static Bool rfbDisplayCursor (ScreenPtr pScreen, CursorPtr pCursor);
+static Bool rfbDisplayCursor (DeviceIntPtr pDev, ScreenPtr pScreen,
+			      CursorPtr pCursor);
 
 
 /*
@@ -1963,7 +1973,7 @@ rfbSpriteLineHelper()
 #define SPRITE_PAD 8
 
 static Bool
-rfbSpriteRealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
+rfbSpriteRealizeCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)
 {
     rfbSpriteScreenPtr	pScreenPriv;
 
@@ -1975,7 +1985,8 @@ rfbSpriteRealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
 }
 
 static Bool
-rfbSpriteUnrealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
+rfbSpriteUnrealizeCursor (DeviceIntPtr pDev, ScreenPtr pScreen,
+			  CursorPtr pCursor)
 {
     rfbSpriteScreenPtr	pScreenPriv;
 
@@ -1985,7 +1996,8 @@ rfbSpriteUnrealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
 }
 
 static void
-rfbSpriteSetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y)
+rfbSpriteSetCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor,
+		    int x, int y)
 {
     rfbSpriteScreenPtr	pScreenPriv;
     rfbClientPtr cl, nextCl;
@@ -2052,14 +2064,14 @@ rfbSpriteSetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y)
 		pScreenPriv->saved.y1 -= dy;
 		pScreenPriv->saved.x2 -= dx;
 		pScreenPriv->saved.y2 -= dy;
-		(void) (*pScreenPriv->funcs->ChangeSave) (pScreen,
+		(void) (*pScreenPriv->funcs->ChangeSave) (pDev, pScreen,
 				pScreenPriv->saved.x1,
  				pScreenPriv->saved.y1,
 				pScreenPriv->saved.x2 - pScreenPriv->saved.x1,
 				pScreenPriv->saved.y2 - pScreenPriv->saved.y1,
 				dx, dy);
 	    }
-	    (void) (*pScreenPriv->funcs->MoveCursor) (pScreen, pCursor,
+	    (void) (*pScreenPriv->funcs->MoveCursor) (pDev, pScreen, pCursor,
 				  pScreenPriv->saved.x1,
  				  pScreenPriv->saved.y1,
 				  pScreenPriv->saved.x2 - pScreenPriv->saved.x1,
@@ -2101,13 +2113,13 @@ rfbSpriteSetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y)
 }
 
 static void
-rfbSpriteMoveCursor (ScreenPtr pScreen, int x, int y)
+rfbSpriteMoveCursor (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
 {
     rfbSpriteScreenPtr	pScreenPriv;
 
     pScreenPriv = (rfbSpriteScreenPtr)dixLookupPrivate(&pScreen->devPrivates,
 						      rfbSpriteScreenKey);
-    rfbSpriteSetCursor (pScreen, pScreenPriv->pCursor, x, y);
+    rfbSpriteSetCursor (pDev, pScreen, pScreenPriv->pCursor, x, y);
 }
 
 /*
@@ -2130,7 +2142,7 @@ rfbSpriteRemoveCursor (pScreen)
     pVNC->dontSendFramebufferUpdate = TRUE;
     pVNC->cursorIsDrawn = FALSE;
     pScreenPriv->pCacheWin = NullWindow;
-    if (!(*pScreenPriv->funcs->RestoreUnderCursor) (pScreen,
+    if (!(*pScreenPriv->funcs->RestoreUnderCursor) (ptrDevice, pScreen,
 					 pScreenPriv->saved.x1,
 					 pScreenPriv->saved.y1,
 					 pScreenPriv->saved.x2 - pScreenPriv->saved.x1,
@@ -2164,7 +2176,7 @@ rfbSpriteRestoreCursor (pScreen)
 
     x = pScreenPriv->x - (int)pCursor->bits->xhot;
     y = pScreenPriv->y - (int)pCursor->bits->yhot;
-    if ((*pScreenPriv->funcs->SaveUnderCursor) (pScreen,
+    if ((*pScreenPriv->funcs->SaveUnderCursor) (ptrDevice, pScreen,
 				      pScreenPriv->saved.x1,
 				      pScreenPriv->saved.y1,
 				      pScreenPriv->saved.x2 - pScreenPriv->saved.x1,
@@ -2172,7 +2184,7 @@ rfbSpriteRestoreCursor (pScreen)
     {
 	if (pScreenPriv->checkPixels)
 	    rfbSpriteFindColors (pScreen);
-	if ((*pScreenPriv->funcs->PutUpCursor) (pScreen, pCursor, x, y,
+	if ((*pScreenPriv->funcs->PutUpCursor) (ptrDevice, pScreen, pCursor, x, y,
 				  pScreenPriv->colors[SOURCE_COLOR].pixel,
 				  pScreenPriv->colors[MASK_COLOR].pixel))
 	    pVNC->cursorIsDrawn = TRUE;
@@ -2215,7 +2227,8 @@ rfbSpriteComputeSaved (pScreen)
  */
 
 static Bool
-rfbDisplayCursor(pScreen, pCursor)
+rfbDisplayCursor(pDev, pScreen, pCursor)
+    DeviceIntPtr pDev;
     ScreenPtr pScreen;
     CursorPtr pCursor;
 {
@@ -2230,7 +2243,7 @@ rfbDisplayCursor(pScreen, pCursor)
 
     pPriv = (rfbSpriteScreenPtr)dixLookupPrivate(&pScreen->devPrivates,
 						      rfbSpriteScreenKey);
-    status = (*pPriv->DisplayCursor)(pScreen, pCursor);
+    status = (*pPriv->DisplayCursor)(pDev, pScreen, pCursor);
 
     /* send new cursor shape to interested viewers */
     for (cl = rfbClientHead; cl ; cl = cl->next) {
@@ -2277,3 +2290,14 @@ rfbSpriteGetCursorPos (pScreen, px, py)
     *py = pScreenPriv->y;
 }
 
+static Bool
+rfbSpriteDeviceCursorInitialize (DeviceIntPtr pDev, ScreenPtr pScreen)
+{
+    return TRUE;
+}
+
+static void
+rfbSpriteDeviceCursorCleanup (DeviceIntPtr pDev, ScreenPtr pScreen)
+{
+    return;
+}
diff --git a/hw/vnc/sprite.h b/hw/vnc/sprite.h
index ed34726..22a84f6 100644
--- a/hw/vnc/sprite.h
+++ b/hw/vnc/sprite.h
@@ -61,6 +61,7 @@ typedef struct {
 		CursorPtr /*pCursor*/
 );
     Bool	(*PutUpCursor)(
+		DeviceIntPtr /*pDev*/,
 		ScreenPtr /*pScreen*/,
 		CursorPtr /*pCursor*/,
 		int /*x*/,
@@ -69,6 +70,7 @@ typedef struct {
 		unsigned long /*mask*/
 );
     Bool	(*SaveUnderCursor)(
+		DeviceIntPtr /*pDev*/,
 		ScreenPtr /*pScreen*/,
 		int /*x*/,
 		int /*y*/,
@@ -76,6 +78,7 @@ typedef struct {
 		int /*h*/
 );
     Bool	(*RestoreUnderCursor)(
+		DeviceIntPtr /*pDev*/,
 		ScreenPtr /*pScreen*/,
 		int /*x*/,
 		int /*y*/,
@@ -83,6 +86,7 @@ typedef struct {
 		int /*h*/
 );
     Bool	(*MoveCursor)(
+		DeviceIntPtr /*pDev*/,
 		ScreenPtr /*pScreen*/,
 		CursorPtr /*pCursor*/,
 		int /*x*/,
@@ -95,6 +99,7 @@ typedef struct {
 		unsigned long /*mask*/
 );
     Bool	(*ChangeSave)(
+		DeviceIntPtr /*pDev*/,
 		ScreenPtr /*pScreen*/,
 		int /*x*/,
 		int /*y*/,
@@ -104,6 +109,16 @@ typedef struct {
 		int /*dy*/
 );
 
+    Bool	(*DeviceCursorInitialize)(
+		DeviceIntPtr /*pDev*/,
+		ScreenPtr /*pScreen*/
+);
+
+    void	(*DeviceCursorCleanup)(
+		DeviceIntPtr /*pDev*/,
+		ScreenPtr /*pScreen*/
+);
+
 } rfbSpriteCursorFuncRec, *rfbSpriteCursorFuncPtr;
 
 extern Bool rfbSpriteInitialize(
diff --git a/hw/vnc/vncext.c b/hw/vnc/vncext.c
index 80a3433..1eb7644 100644
--- a/hw/vnc/vncext.c
+++ b/hw/vnc/vncext.c
@@ -514,8 +514,8 @@ GenerateVncConnectedEvent(int sock)
    	  else
 		conn.ipaddress = (CARD32)peer.sin_addr.s_addr;
 
-	  (void) TryClientEvents(pn->client, (xEventPtr)&conn, 1, NoEventMask,
-				 NoEventMask, NullGrab);
+	  (void) TryClientEvents(pn->client, NULL, (xEventPtr)&conn, 1,
+				 NoEventMask, NoEventMask, NullGrab);
 	}
 	pn = pn->next;
     }
@@ -557,8 +557,8 @@ GenerateVncChromiumConnectedEvent(int sock)
    	  else
 		conn.ipaddress = (CARD32)peer.sin_addr.s_addr;
 
-	  (void) TryClientEvents(pn->client, (xEventPtr)&conn, 1, NoEventMask,
-				 NoEventMask, NullGrab);
+	  (void) TryClientEvents(pn->client, NULL, (xEventPtr)&conn, 1,
+				 NoEventMask, NoEventMask, NullGrab);
 	}
 	pn = pn->next;
     }
@@ -586,8 +586,8 @@ GenerateVncDisconnectedEvent(int sock)
     	  conn.type = VncEventBase + XVncDisconnected;
     	  conn.sequenceNumber = pn->client->sequence;
     	  conn.connected = sock;
-	  (void) TryClientEvents(pn->client, (xEventPtr)&conn, 1, NoEventMask,
-				 NoEventMask, NullGrab);
+	  (void) TryClientEvents(pn->client, NULL, (xEventPtr)&conn, 1,
+				 NoEventMask, NoEventMask, NullGrab);
 	}
 	pn = pn->next;
     }
diff --git a/hw/xfree86/vnc/vncInit.c b/hw/xfree86/vnc/vncInit.c
index e07ac8f..221f018 100644
--- a/hw/xfree86/vnc/vncInit.c
+++ b/hw/xfree86/vnc/vncInit.c
@@ -56,11 +56,11 @@ static unsigned long VNCGeneration = 0;
 static const OptionInfoRec *VNCAvailableOptions(void *unused);
 static void rfbWakeupHandler (int i, pointer blockData, unsigned long err, pointer pReadmask);
 
-static Bool vncCursorRealizeCursor(ScreenPtr, CursorPtr);
-static Bool vncCursorUnrealizeCursor(ScreenPtr, CursorPtr);
-static void vncCursorSetCursor(ScreenPtr, CursorPtr, int, int);
-static void vncCursorMoveCursor(ScreenPtr, int, int);
-static Bool vncDisplayCursor(ScreenPtr, CursorPtr);
+static Bool vncCursorRealizeCursor(DeviceIntPtr, ScreenPtr, CursorPtr);
+static Bool vncCursorUnrealizeCursor(DeviceIntPtr, ScreenPtr, CursorPtr);
+static void vncCursorSetCursor(DeviceIntPtr, ScreenPtr, CursorPtr, int, int);
+static void vncCursorMoveCursor(DeviceIntPtr, ScreenPtr, int, int);
+static Bool vncDisplayCursor(DeviceIntPtr, ScreenPtr, CursorPtr);
 
 static miPointerSpriteFuncRec vncCursorSpriteFuncs = {
    vncCursorRealizeCursor,
@@ -389,23 +389,24 @@ VNCInit(ScreenPtr pScreen, unsigned char *FBStart)
 /****** miPointerSpriteFunctions *******/
 
 static Bool
-vncCursorRealizeCursor(ScreenPtr pScreen, CursorPtr pCurs)
+vncCursorRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCurs)
 {
     vncScreenPtr   pScreenPriv = VNCPTR(pScreen);
 
-    return (*pScreenPriv->spriteFuncs->RealizeCursor)(pScreen, pCurs);
+    return (*pScreenPriv->spriteFuncs->RealizeCursor)(pDev, pScreen, pCurs);
 }
 
 static Bool
-vncCursorUnrealizeCursor(ScreenPtr pScreen, CursorPtr pCurs)
+vncCursorUnrealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCurs)
 {
     vncScreenPtr   pScreenPriv = VNCPTR(pScreen);
 
-    return (*pScreenPriv->spriteFuncs->UnrealizeCursor)(pScreen, pCurs);
+    return (*pScreenPriv->spriteFuncs->UnrealizeCursor)(pDev, pScreen, pCurs);
 }
 
 static void
-vncCursorSetCursor(ScreenPtr pScreen, CursorPtr pCurs, int x, int y)
+vncCursorSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCurs,
+		   int x, int y)
 {
     vncScreenPtr   pScreenPriv = VNCPTR(pScreen);
 
@@ -426,11 +427,11 @@ vncCursorSetCursor(ScreenPtr pScreen, CursorPtr pCurs, int x, int y)
     pScreenPriv->cursorIsDrawn = TRUE;
 #endif
 
-    (*pScreenPriv->spriteFuncs->SetCursor)(pScreen, pCurs, x, y);
+    (*pScreenPriv->spriteFuncs->SetCursor)(pDev, pScreen, pCurs, x, y);
 }
 
 static void
-vncCursorMoveCursor(ScreenPtr pScreen, int x, int y)
+vncCursorMoveCursor(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
 {
     vncScreenPtr   pScreenPriv = VNCPTR(pScreen);
     rfbClientPtr cl;
@@ -440,7 +441,7 @@ vncCursorMoveCursor(ScreenPtr pScreen, int x, int y)
 	    cl->cursorWasMoved = TRUE;
     }
 
-    (*pScreenPriv->spriteFuncs->MoveCursor)(pScreen, x, y);
+    (*pScreenPriv->spriteFuncs->MoveCursor)(pDev, pScreen, x, y);
 }
 
 Bool
@@ -505,7 +506,8 @@ vncUseHWCursorARGB(pScreen, pCursor)
 #endif
 
 static Bool
-vncDisplayCursor(pScreen, pCursor)
+vncDisplayCursor(pDev, pScreen, pCursor)
+    DeviceIntPtr pDev;
     ScreenPtr pScreen;
     CursorPtr pCursor;
 {
@@ -520,7 +522,7 @@ vncDisplayCursor(pScreen, pCursor)
 	    cl->cursorWasChanged = TRUE;
     }
 
-    ret = (*pScreen->DisplayCursor)(pScreen, pCursor);
+    ret = (*pScreen->DisplayCursor)(pDev, pScreen, pCursor);
 
     pScreen->DisplayCursor = vncDisplayCursor;
 
-- 
1.6.1