Adjust client pointer coordinates to absolute

The client is not aware of where the screen is placed so it will give
us screen relative coordinates. Convert to and from these and absolute
coordinates before interacting with the input layer.
diff --git a/unix/xserver/hw/vnc/XorgGlue.c b/unix/xserver/hw/vnc/XorgGlue.c
index d7892b1..712ed6a 100644
--- a/unix/xserver/hw/vnc/XorgGlue.c
+++ b/unix/xserver/hw/vnc/XorgGlue.c
@@ -92,6 +92,16 @@
   *blueMask = vis->blueMask;
 }
 
+int vncGetScreenX(int scrIdx)
+{
+  return screenInfo.screens[scrIdx]->x;
+}
+
+int vncGetScreenY(int scrIdx)
+{
+  return screenInfo.screens[scrIdx]->y;
+}
+
 int vncGetScreenWidth(int scrIdx)
 {
   return screenInfo.screens[scrIdx]->width;
diff --git a/unix/xserver/hw/vnc/XorgGlue.h b/unix/xserver/hw/vnc/XorgGlue.h
index 92b0d18..5cae860 100644
--- a/unix/xserver/hw/vnc/XorgGlue.h
+++ b/unix/xserver/hw/vnc/XorgGlue.h
@@ -33,6 +33,8 @@
                         int *trueColour, int *bigEndian,
                         int *redMask, int *greenMask, int *blueMask);
 
+int vncGetScreenX(int scrIdx);
+int vncGetScreenY(int scrIdx);
 int vncGetScreenWidth(int scrIdx);
 int vncGetScreenHeight(int scrIdx);
 
diff --git a/unix/xserver/hw/vnc/XserverDesktop.cc b/unix/xserver/hw/vnc/XserverDesktop.cc
index 4eaa41f..4f82a54 100644
--- a/unix/xserver/hw/vnc/XserverDesktop.cc
+++ b/unix/xserver/hw/vnc/XserverDesktop.cc
@@ -514,6 +514,8 @@
       // We are responsible for propagating mouse movement between clients
       int cursorX, cursorY;
       vncGetPointerPos(&cursorX, &cursorY);
+      cursorX -= vncGetScreenX(screenIndex);
+      cursorY -= vncGetScreenY(screenIndex);
       if (oldCursorPos.x != cursorX || oldCursorPos.y != cursorY) {
         oldCursorPos.x = cursorX;
         oldCursorPos.y = cursorY;
@@ -648,7 +650,8 @@
 
 void XserverDesktop::pointerEvent(const Point& pos, int buttonMask)
 {
-  vncPointerMove(pos.x, pos.y);
+  vncPointerMove(pos.x + vncGetScreenX(screenIndex),
+                 pos.y + vncGetScreenY(screenIndex));
   vncPointerButtonAction(buttonMask);
 }