--- xorg-server-1.3.0.0/hw/xfree86/os-support/bsd/bsd_mouse.c 2006-09-18 15:04:18.000000000 +0900 +++ bsd_mouse.c 2008-02-23 17:52:40.000000000 +0900 @@ -411,6 +411,8 @@ while( n-- ) { int buttons = pMse->lastButtons; int dx = 0, dy = 0, dz = 0, dw = 0; + static int ax, ay; + int absXY = 0; switch (event->type) { case WSCONS_EVENT_MOUSE_UP: #define BUTBIT (1 << (event->value <= 2 ? 2 - event->value : event->value)) @@ -425,6 +427,14 @@ case WSCONS_EVENT_MOUSE_DELTA_Y: dy = -event->value; break; + case WSCONS_EVENT_MOUSE_ABSOLUTE_X: + ax = event->value; + absXY = 1; + break; + case WSCONS_EVENT_MOUSE_ABSOLUTE_Y: + ay = event->value; + absXY = 1; + break; #ifdef WSCONS_EVENT_MOUSE_DELTA_Z case WSCONS_EVENT_MOUSE_DELTA_Z: dz = event->value; @@ -437,7 +447,12 @@ continue; } - pMse->PostEvent(pInfo, buttons, dx, dy, dz, dw); + if (absXY) { + xf86PostMotionEvent(pInfo->dev, + TRUE, 0, 2, ax, ay); + } else { + pMse->PostEvent(pInfo, buttons, dx, dy, dz, dw); + } ++event; } return; @@ -789,3 +804,4 @@ p->PreInit = bsdMousePreInit; return p; } +