Index: /trunk/src/VBox/Additions/x11/vboxmouse/vboxmouse_15.c
===================================================================
--- /trunk/src/VBox/Additions/x11/vboxmouse/vboxmouse_15.c	(revision 30431)
+++ /trunk/src/VBox/Additions/x11/vboxmouse/vboxmouse_15.c	(revision 30432)
@@ -72,4 +72,5 @@
         &&  RT_SUCCESS(VbglR3GetMouseStatus(&fFeatures, &cx, &cy))
         && (fFeatures & VMMDEV_MOUSE_HOST_CAN_ABSOLUTE))
+    {
 #if ABI_XINPUT_VERSION == SET_ABI_VERSION(2, 0)
         /* Bug in the 1.4 X server series - conversion_proc was no longer
@@ -78,6 +79,15 @@
         cy = (cy * screenInfo.screens[0]->height) / 65535;
 #endif
-        /* send absolute movement */
-        xf86PostMotionEvent(pInfo->dev, 1, 0, 2, cx, cy);
+        /* The X server is calling this function even if only a button was
+         * pressed. old_x/old_y seem to be not used by the server code. */
+        if (   (uint32_t)pInfo->old_x != cx
+            || (uint32_t)pInfo->old_y != cy)
+        {
+            /* send absolute movement */
+            xf86PostMotionEvent(pInfo->dev, 1, 0, 2, cx, cy);
+            pInfo->old_x = cx;
+            pInfo->old_y = cy;
+        }
+    }
 }
 
