Index: /trunk/src/VBox/Main/src-client/MouseImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/MouseImpl.cpp	(revision 77484)
+++ /trunk/src/VBox/Main/src-client/MouseImpl.cpp	(revision 77485)
@@ -668,12 +668,7 @@
     ComAssertRet(pDisplay, E_FAIL);
 
-    if (x == -1 || y == -1)  /* Report only. */
-        return S_OK;
-    if (x != mcLastX || y != mcLastY)  /* This covers out-of-range too. */
-    {
-        if (x < 0x7fffffff && y < 0x7fffffff)
-            pDisplay->i_reportHostCursorPosition(x - 1, y - 1, false);
-        else  /* Out of range. */
-            pDisplay->i_reportHostCursorPosition(0, 0, true);
+    if (x != mcLastX || y != mcLastY)
+    {
+        pDisplay->i_reportHostCursorPosition(x - 1, y - 1, false);
     }
     return S_OK;
@@ -855,8 +850,25 @@
              __PRETTY_FUNCTION__, x, y, dz, dw, aButtonState));
 
+    DisplayMouseInterface *pDisplay = mParent->i_getDisplayMouseInterface();
+    ComAssertRet(pDisplay, E_FAIL);
     int32_t xAdj, yAdj;
     uint32_t fButtonsAdj;
     bool fValid;
 
+    /* If we are doing old-style (IRQ-less) absolute reporting to the VMM
+     * device then make sure the guest is aware of it, so that it knows to
+     * ignore relative movement on the PS/2 device. */
+    i_updateVMMDevMouseCaps(VMMDEV_MOUSE_HOST_WANTS_ABSOLUTE, 0);
+    /* Detect out-of-range. */
+    if (x == 0x7FFFFFFF && y == 0x7FFFFFFF)
+    {
+        pDisplay->i_reportHostCursorPosition(0, 0, true);
+        return S_OK;
+    }
+    /* Detect "report-only" (-1, -1).  This is not ideal, as in theory the
+     * front-end could be sending negative values relative to the primary
+     * screen. */
+    if (x == -1 && y == -1)
+        return S_OK;
     /** @todo the front end should do this conversion to avoid races */
     /** @note Or maybe not... races are pretty inherent in everything done in
@@ -866,8 +878,4 @@
 
     fButtonsAdj = i_mouseButtonsToPDM(aButtonState);
-    /* If we are doing old-style (IRQ-less) absolute reporting to the VMM
-     * device then make sure the guest is aware of it, so that it knows to
-     * ignore relative movement on the PS/2 device. */
-    i_updateVMMDevMouseCaps(VMMDEV_MOUSE_HOST_WANTS_ABSOLUTE, 0);
     if (fValid)
     {
