From 4c61bf84b11e26e6f22648668c95ea760a379163 Mon Sep 17 00:00:00 2001 From: marha Date: Fri, 11 Jun 2010 12:14:52 +0000 Subject: xserver git update 11/6/2010 --- xorg-server/dix/getevents.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'xorg-server/dix/getevents.c') diff --git a/xorg-server/dix/getevents.c b/xorg-server/dix/getevents.c index 7a24b801e..ea19e0cac 100644 --- a/xorg-server/dix/getevents.c +++ b/xorg-server/dix/getevents.c @@ -33,6 +33,7 @@ #include #include #include +#include #include "misc.h" #include "resource.h" @@ -56,6 +57,7 @@ #include #include +#include #include "exglobals.h" #include "exevents.h" #include "exglobals.h" @@ -325,8 +327,7 @@ void AllocateMotionHistory(DeviceIntPtr pDev) { int size; - if (pDev->valuator->motion) - free(pDev->valuator->motion); + free(pDev->valuator->motion); if (pDev->valuator->numMotionEvents < 1) return; @@ -997,6 +998,22 @@ FreeEventList(EventListPtr list, int num_events) free(list); } +static void +transformAbsolute(DeviceIntPtr dev, int v[MAX_VALUATORS]) +{ + struct pixman_f_vector p; + + /* p' = M * p in homogeneous coordinates */ + p.v[0] = v[0]; + p.v[1] = v[1]; + p.v[2] = 1.0; + + pixman_f_transform_point(&dev->transform, &p); + + v[0] = lround(p.v[0]); + v[1] = lround(p.v[1]); +} + /** * Generate a series of xEvents (filled into the EventList) representing * pointer motion, or button presses. Xi and XKB-aware. @@ -1068,6 +1085,7 @@ GetPointerEvents(EventList *events, DeviceIntPtr pDev, int type, int buttons, scr->height); } + transformAbsolute(pDev, valuators); moveAbsolute(pDev, &x, &y, first_valuator, num_valuators, valuators); } else { if (flags & POINTER_ACCELERATE) { @@ -1191,8 +1209,8 @@ PostSyntheticMotion(DeviceIntPtr pDev, will translate from sprite screen to screen 0 upon reentry to the DIX layer. */ if (!noPanoramiXExtension) { - x += panoramiXdataPtr[0].x - panoramiXdataPtr[screen].x; - y += panoramiXdataPtr[0].y - panoramiXdataPtr[screen].y; + x += screenInfo.screens[0]->x - screenInfo.screens[screen]->x; + y += screenInfo.screens[0]->y - screenInfo.screens[screen]->y; } #endif -- cgit v1.2.3